JAVA給微信公眾號二維碼新增LOGO時總是生成灰度圖片的原因及解決辦法

hejisan發表於2018-03-06

大家都知道微信公眾號可以從微信官方伺服器獲取對應的二維碼(包括臨時二維碼及永久二維碼),這樣的需求常用於商業客戶層次關係管理場景,但是如果有很多客戶,就算二維碼中的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

相關文章