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

大家都知道微信公众号可以从微信官方服务器获取对应的二维码(包括临时二维码及永久二维码),这样的需求常用于商业客户层次关系管理场景,但是如果有很多客户,就算二维码中的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

你可能感兴趣的:(微信)