奇怪的知識又增加了,ImageMagick PDF轉JPG圖片合併的時候報Unsupported Image Type
阿新 • • 發佈:2021-12-02
背景
之前在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,搞定