奇怪的知识又增加了,ImageMagick PDF转JPG图片合并的时候报Unsupported Image Type
背景
之前在PDF转JPG时使用了ImageMagic这个强大的工具,起初使用都没有什么问题,但是突然生产出现部分转换后的图片合并失败的问题
报错信息:
javax.imageio.IIOException: Unsupported Image Type
at com.sun.imageio.plugins.jpeg.JPEGImageReader.readInternal(Unknown Source)
at com.sun.imageio.plugins.jpeg.JPEGImageReader.read(Unknown Source)
at javax.imageio.ImageIO.read(Unknown Source)
at javax.imageio.ImageIO.read(Unknown Source)
产生原因
JPG是正儿八经的jpg,我们使用JAVA自带的IMAGE类库,网上查了一下这种情况是因为jpg的颜色模式是cymk,而jdk默认能处理的rgb颜色模式的图片
CYMK和RGB
刨去报错的内容,我们先来了解一下这两个颜色模式
RGB
RGB色彩模式是基于光源色发光原理定义,适用于显示器等发光体的颜色表示
以黑色介质为基础,通过光源三原色(红、绿、蓝)不同比例的亮度叠加,来获得各种不同的颜色,也就是所谓的相加色
CYMK
CMYK即CMY色彩模式是基于固有色光吸收/反射原理定义,适用于各种印刷媒介;
白光照射到物体上后,物体吸收掉其固有色的互补色光,从而反射光也就呈现为其固有色
以白色介质为基础,通过印刷三原色(青、品红、黄)不同比例的油墨混合,吸收原始色光中的对应波长,从而获得各种不同的颜色的反射效果,也就是所谓的相减色。
简而言之,RGB是颜色的叠加是相加色;CYMK是调节不通比例的油墨原色,是相减色
问题解决
网络上有一堆CYMK转RGB的代码,但是我们的图片是ImageMagick生成的,所以我们还是要通过指令参数解决,指令模板如下:
magick convert -density 220 -quality 80 -background white -alpha remove -colorspace sRGB {0} {1}/1.jpg
-colorspace sRGB 指定颜色模式为rgb,搞定