GraphicsMagick im4java 打水印中文乱码问题!!!

发布于 2021-11-25 17:03:27 字数 166 浏览 918 评论 10

利用getBytes("utf-8"),"gbk");的写法,可以解决部分乱码问题。

如“中国”不乱码,"中国人"乱码

如“你好”不乱码,“你好啊”乱码。。。

这就比较坑爹了,不知所以然。。。。

有朋友遇到这个问题,解决了的么?求真相

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(10

灵芸 2021-11-25 18:52:02

请问,楼主最后使用了哪一种水印方式?谢谢。

眉黛浅 2021-11-25 18:52:02

引用来自“xiaomaid”的答案

请问,楼主最后使用了哪一种水印方式?谢谢。

永不分离 2021-11-25 18:52:02

Graphics g = image.createGraphics(); 你查查这个有关方法。弄不出再找我。给你源码

筱武穆 2021-11-25 18:52:02

谢谢了,我也换了,用的是
ImageMagick+
jmagick

一笔一画续写前缘 2021-11-25 18:52:02

我绕了个弯子解决了,先根据水印文字生成一副背景透明的水印图片并保存(我的项目中这个水印文字并不会经常改变),再进行水印图片添加到目标图片上就可以了,可能不适合那种文字经常变的情况,

生成水印图片的代码:

/**
 * 
 * @param shopName
 * @return
 * @author pfma
 * @throws IOException
 * @time 20131119 1:06:34
 */
public final static byte[] drawWatermark(String shopName) throws IOException
{
 if (StringUtil.isEmpty(shopName))
 {
     return null;
 }


 int imageHeight = 100;// 图片的高度


 // 根据文字计算水印文件宽度
 Font font = new Font("", Font.BOLD, 100);
 FontMetrics fm = new JLabel().getFontMetrics(font);
 int textWidth = fm.stringWidth(shopName);


 BufferedImage image = new BufferedImage(textWidth, imageHeight, BufferedImage.TYPE_INT_RGB);
 Graphics2D g2d = image.createGraphics();
 image = g2d.getDeviceConfiguration().createCompatibleImage(textWidth, imageHeight, Transparency.TRANSLUCENT);
 g2d.dispose();
 g2d = image.createGraphics();
 g2d.setColor(Color.WHITE);
 g2d.setStroke(new BasicStroke(1));
 g2d.setFont(font);
 g2d.drawString(shopName, 0, 85);


 ByteArrayOutputStream out = new ByteArrayOutputStream();


 // ImageIO.write(image, "png", new File("E://2.png"));
 ImageIO.write(image, "png", out);
 return out.toByteArray();
} 

需要当前机器上有对应的字体

三月梨花 2021-11-25 18:52:00

建议别使用这种水印方式了。。

带上头具痛哭 2021-11-25 18:52:00

目前查到是UTF 2个中文字符 GBK是三个,也就是转换的时候乱码了

岁吢 2021-11-25 18:49:29

只要是奇数个汉字就乱码,偶数个汉字就没有问题。奇怪了

GMOperation op = new GMOperation();
		   
		   // op.font("宋体").gravity("southeast").pointsize(18).fill("#BCBFC8").draw("text 100,100 bb"); 
		   try {
			String ss=new String("好的么".getBytes("utf-8"),"gbk");
			   op.font("隶书").pointsize(20).fill("red").draw("text 250,"+150+" '" + ss+ "'").quality(30.0);
				  // op.addImage(); 
			   
			   /****可用字体*****/
			   //方正舒体
			   //黑体
			   op.addImage(); 
			   op.addImage();
			   //op.font("Arial").fill("red").draw("text 100,100 "+new String(ss.getBytes("iso8859-1")));
		   } catch (Exception e1) {
			// TODO Auto-generated catch block
			   e1.printStackTrace();
		   }  
		     
		   String osName = System.getProperty("os.name").toLowerCase();    
		   ConvertCmd cmd = new ConvertCmd(true); 
		   if(osName.indexOf("win") != -1) {
		    //linux下不要设置此值,不然会报错
		    cmd.setSearchPath("C://Program Files//GraphicsMagick-1.3.18-Q8"); 
		   }
		   String srcPath="E:\result.png";
		   try{
		    cmd.run(op, srcPath, srcPath);

归途 2021-11-25 18:43:18

不使用这种水印方式了。。换掉了

躲猫猫 2021-11-25 18:41:54

我也遇到同样的问题了,你解决了么?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文