您的位置:首页 > 移动开发 > 微信开发

JAVA给微信公众号二维码添加LOGO时总是生成灰度图片的原因及解决办法

2018-03-06 09:55 477 查看
大家都知道微信公众号可以从微信官方服务器获取对应的二维码(包括临时二维码及永久二维码),这样的需求常用于商业客户层次关系管理场景,但是如果有很多客户,就算二维码中的SCENCE_ID不同,就凭肉眼不容易看出来,那么我常用的做法就是在二维码中间添加一个LOGO,一般是当前客户自己的微信图片。
我们根据TOKEN从https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=TOKEN获取到二维码后,参数如下两个博文来进行合成: http://blog.csdn.net/u013142781/article/details/50310419 https://www.cnblogs.com/lmei/p/4626042.html 最后发现,生成的图片竟然无论怎么搞都是黑白的。
通过仔细观察,从微信取下来的二维码图片是grayscale,也就是颜色空间是灰阶的,那么我们用通用的方式以这个二维码为底图向上面叠加LOGO的时候,得到的还是灰阶图片,以致引起这个问题。问题找到了,那么解决方式就好说了。参考: http://blog.csdn.net/10km/article/details/51866321 这篇文章
java.awt.image包下面有个类java.awt.image.ColorConvertOp,类名直译就是”颜色转换操作”。
顾名思义,它的作用就是将一个色彩空间(color space)的图像转换为另一个色彩空间的图像。有了这个神器我们就能轻易的将一张彩色图你像转换成灰度(gray)或其他色彩空间图像。代码非常简单,只要一行。 public static BufferedImage toGray(BufferedImage srcImg){
return new ColorConvertOp(ColorSpace.getInstance(ColorSpace.CS_sRGB), null).filter(srcImg, null);
}这样我们就将原来的二维码图片变换了颜色空间,再利用上述两篇博文提到的方式合成图片即可。
更多文章参考:
Image转BufferedImage并提取像素进行颜色空间转换: http://blog.csdn.net/qq_29859497/article/details/72860023 Java加载图片 Image与BufferedImage 区别: http://blog.csdn.net/landlord921/article/details/38736619
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  微信