最近发现公司图片库中有些打水印的图片水印色彩和其他的不一样,后来发现是设计师上传的图片的色彩值是CMYK的,想要统一成RGB格式的。
之前使用的是jmagick进行的图片压缩和水印,看了一下jmagick的官方介绍,是有提供转换图片色彩格式的方法。记录一下,给碰到类似问题的同学提供参考。
jmagick的ColorspaceType里面是色彩格式对应的常量。
public static final int GRAYColorspace = 2; public static final int TransparentColorspace = 3; public static final int OHTAColorspace = 4; public static final int XYZColorspace = 5; public static final int YCbCrColorspace = 6; public static final int YCCColorspace = 7; public static final int YIQColorspace = 8; public static final int YPbPrColorspace = 9; public static final int YUVColorspace = 10; public static final int CMYKColorspace = 11; public static final int sRGBColorspace = 12;
将图片创建成MagickImage对象
ImageInfo imageInfo = new ImageInfo(filePath);
MagickImage fromImage = new MagickImage(imageInfo);
然后通过fromImage.getColorspace()可以拿到色彩格式
完整代码
/** * jmagick 将所有图片色彩统一为RGB * @param filePath 原图路径 * @param toFilePath 转换后的图片路径 * @return * @throws Exception */ public static InputStream convert2RGB(String filePath, String toFilePath) throws Exception{ InputStream stream = null; ImageInfo imageInfo = new ImageInfo(filePath); MagickImage fromImage = new MagickImage(imageInfo); if(fromImage.getColorspace() != ColorspaceType.RGBColorspace){ //因为是将所有其他格式转换为RGB格式,需要将当前文件的色彩格式传入 fromImage.transformRgbImage(fromImage.getColorspace()); fromImage.setFileName(toFilePath); fromImage.writeImage(imageInfo); stream = new FileInputStream(toFilePath); return stream; } return new FileInputStream(new File(filePath)); }