在做一个Web的时候,上传图片,因为png的图片体积太大,所以上传到服务器保存成jpg即可,节省空间。
但是有些png图片保存的时候会变色
如图
之前的图像

保存之后
用Photoshop打开变色的图片,查看通道


RGB色彩模式变成了CMYK
个人猜测,因为PNG图片包含了一个Alpha(透明)通道,一共四个通道,jpg不支持Alpha通道,所以导致了这个现象,细节要看算法,研究不深,就不分析了,下面给出解决方法:
0 1 2 3 4 5 6 7 8 9 10 |
java.awt.Image i = Toolkit.getDefaultToolkit().createImage(图像); PixelGrabber pg = new PixelGrabber( i, 0, 0, -1, -1, true); pg.grabPixels(); int width = pg.getWidth(), height = pg.getHeight(); DataBuffer buffer = new DataBufferInt(( int[])pg.getPixels(), pg.getWidth() * pg.getHeight()); WritableRaster raster = Raster.createPackedRaster( buffer, width, height, width, RGB_MASKS , null ); BufferedImage img = new BufferedImage( RGB_OPAQUE,raster, false, null); |
使用Toolkit打开图像,createImage有几个重载函数请按需选择,最后输出BufferedImage就是正常色彩。