图片加水印时文本为unicode编码乱码问题

问题描述

请教一个问题。我在把文字写入图片时,如果字符串为unicode编码的话,生成的图片部分字符乱码,不过这个字符串如果使用log4j编码为utf-8打印到日志文件时是正常的,但在console控制台打印出来跟图片是一样的,也是部分字符乱码那。但在debug时看到的字符串是正常的,写到图片里就乱码了。代码如下:/** * <pre> * 文字水印。 * 超过屏幕可视区宽度时自动换行; * </pre> * * @param pressTexts 水印文字,字符串数组 * @param targetImg 目标图片路径 * @param outputImg 输出图片路径 * @param font 包含字体名称、字体样式、字体大小的Font对象 * @param color 字体颜色 * @param x 修正值 * @param widthMargin 宽度两边间隔 * @param y 修正值 * @param heightMargin 高度上下间隔 * @param alpha 透明度 */public static void pressText2MultiImgs(String[] pressTexts, String targetImg, String outputImg, Font font, Color color, int x, int widthMargin, int y, int heightMargin, float alpha) { try { File img = new File(targetImg); Image src = ImageIO.read(img); int width = src.getWidth(null); int height = src.getHeight(null); BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); Graphics2D g = image.createGraphics(); g.drawImage(src, 0, 0, width, height, null); g.setColor(color); g.setFont(font); g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, alpha)); int txtZoneWidth = width - widthMargin;//文字区域宽度,两边留间隙 int txtZoneHeight = height - heightMargin;//文字区域高度,上下留间隙 int lineNum = 0;//当前行数 // 处理多行字符 int fontSize = font.getSize(); for(String pressText : pressTexts){ List<String> strLines = getLineStr(pressText, fontSize, txtZoneWidth); for(String str : strLines){ log.debug("行:" + str);//1 lineNum++; g.drawString(str, x + (widthMargin / 2), fontSize * lineNum + (heightMargin / 2) + y); } } g.dispose(); File imgOutput = new File(outputImg); ImageIO.write((BufferedImage) image, "jpg", imgOutput); } catch (Exception e) { e.printStackTrace(); }}测试代码如下:@Testpublic void pressText2MultiImgsTest2(){ String pinyin = "āáăàaēéĕèeīíĭìiōóŏòoūúŭùuǖǘǚǜü"; log.info(pinyin); ImageUtils.pressText2MultiImgs(new String[]{pinyin}, "D:/temp/createImg/template.jpg", "D:/temp/createImg/out/out_3.jpg", new Font("宋体", 36, 16), Color.black, 8, 32, 8, 20, 1.0f);}这一串字符串中 "āáăàaēéĕèeīíĭìiōóŏòoūúŭùuǖǘǚǜü"有几个是写不到图片上的,是否有解决办法 呢 问题补充:Rainbow702 写道

解决方案

引用新的问题是能不能在图片上中英文混杂写入时用不同的字体?这个应该是不行的,你看一下你的 pressText2MultiImgs() 方法里,用到这个 Font 的地方就明白了,你无法先使用一个Font 写一会,再换另外一个 Font 来写一会。我觉得唯一的方法是,你多试几个中文字体,看看能不能找到一个可以显示上面“āáăàaēéĕèeīíĭìiōóŏòoūúŭùuǖǘǚǜü”这些所有字符。
解决方案二:
引用这一串字符串中 "āáăàaēéĕèeīíĭìiōóŏòoūúŭùuǖǘǚǜü"有几个是写不到图片上的把你的结果图传上来看一下呢

时间: 2024-10-27 09:59:54

图片加水印时文本为unicode编码乱码问题的相关文章

php给图片加水印与上传图片加水印php类

/* * 功能:PHP图片水印 (水印支持图片或文字) * 参数: * $groundImage 背景图片,即需要加水印的图片,暂只支持GIF,JPG,PNG格式: * $waterPos 水印位置,有10种状态,0为随机位置: * 1为顶端居左,2为顶端居中,3为顶端居右: * 4为中部居左,5为中部居中,6为中部居右: * 7为底端居左,8为底端居中,9为底端居右: * $waterImage 图片水印,即作为水印的图片,暂只支持GIF,JPG,PNG格式: * $waterText 文字水

使用snagit为图片加水印的方法

平时大家使用的最频繁的截图工具估计是QQ自带的ctrl+alt+a截图了,不过这个截图方式在聊天中用用尚可,有时候需要给截好的图作修改就比较不方便了.西西给大家介绍一款很不错的截图工具snagit,这款截图软件默认的快捷键是windows系统自带的截图按钮printscreen,而且功能还很多.今天教大家如何用snagit给图片添加水印. 软件下载:snagit下载 软件介绍: 上面给大家提供的snagit是小编平时喜欢用的版本,这个版本是绿色版不用安装破解导入注册表即可使用,非常方便.下载完毕

图片加水印软件哪款好

  图片加水印软件一:photoshop photoshop作为世界通用的强大图片处理工具,不要说加水印了,任何图片处理技术都能实现. 图片加水印软件二:光影魔术手 便捷的文字和水印功能 文字水印可随意拖动操作.横排.竖排.发光.描边.阴影.背景等各种效果,让文字加在图像上更加出彩,更可保存为文字模板供下次使用.多种混合模式让水印更加完美,快来试试吧! 图片加水印软件三:美图秀秀 傻瓜级新手操作实用软件,美图秀秀pc最新版软件是一款最简单实用的免费图片处理软件,使用这款美图秀秀软件不需要您去学习

php-PHP给图片加水印中文乱码问题

问题描述 PHP给图片加水印中文乱码问题 需要开启iconv,我phpinfo()打印为: 应该怎么写个程序,可以支持中文呢? 解决方案 页面编码和字体 字体是否支持中文

php 图片加水印与上传图片加水印php类_php技巧

一个正规的网站,在需要上传图片时,往往都会需要在图片上增加自己网站的LOGO水印.那么如何实现这一步骤呢?首先让我们来了解PHP图片加水印的原理. 通过判断文件类型建立图形,然后把其复制到原建立的图形上,填充并建立rectangle,以备写入imagestring()或是在原已经定好的图像程序当中判断水印类型:一是字符串,另是增加一个图形对象在上面.以下是PHP图片加水印的转载! 参数说明: $max_file_size : 上传文件大小限制, 单位BYTE $destination_folde

Photoshop一些给图片加水印的方法分享

给各位Photoshop软件的使用者们来详细的解析分享一下一些给图片加水印的方法. 方法分享: 首先,尽量不要太大,不要让水印喧宾夺主影响了图片本身. 水印的位置尽量规整,可以考虑和某些画面元素对齐或者交互. 如果是摄影作品,尤其是风光类的,我的习惯是设计一个和被摄地点有关联的小icon,然后配上20xx Carl Armen Photography之类提高bigger(略装)的文字. 颜色方面,我习惯用画面中某种颜色直接取色. 总之,就是让水印成为一个个人专属logo,画面版面的一部分. 不多

mvc-asp.net MVC怎么给图input type=file传过来的图片加水印

问题描述 asp.net MVC怎么给图input type=file传过来的图片加水印 解决方案 加水印后,在controller里面传到服务器里面保存 解决方案二: 这是controller的代码 public ActionResult AddNewsPic(string id) { if (Request.Files.Count > 0) { if (!string.IsNullOrEmpty(Request.Files[0].FileName)) { Stream fileDataStr

图片加水印-C#图片以流的形式加水印

问题描述 C#图片以流的形式加水印 用流读取的图片,我在上面加了文字水印. 但是我要怎么控制水印的位置,比如说我要加到右下角.应该怎么算坐标?(同一个坐标 .jpg格式跟tif格式位置不一样.)下面是我的代码: /// /// 图片加水印 /// /// 图片路径 /// 字体 /// 字体大小 /// 水印位置 /// 水印文字 /// 存储图片的文件夹 public void AddWaterText(string oldPath,string font,int fontSize,strin

PHP经典的给图片加水印程序

程序   如果对PHP的GD库比较熟悉,看懂这篇文章一点都不难了!   <?php   /******************************************************************************      参数说明:   $max_file_size : 上传文件大小限制, 单位BYTE   $destination_folder : 上传文件路径   $watermark : 是否附加水印(1为加水印,其他为不加水印);      使用说明: