1. 程式人生 > 其它 >奇怪的知識又增加了,ImageMagick PDF轉JPG圖片合併的時候報Unsupported Image Type

奇怪的知識又增加了,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,搞定