似乎有一些關於alpha通道的JPEG是否有效的爭論。我一直認爲正確的答案是that in the JPEG FAQ,它本質上是「否」。 (這是在another question on Stack Overflow重申。)我可以使用libjpeg來讀取帶有alpha通道的JPEG嗎?
然而,Java的JPEGImageWriter Sun公司的ImageIO庫會很樂意寫,alpha通道讀取的灰度和RGB圖像,即使有在Linux上幾乎沒有任何應用程序,到目前爲止,我已經試過將正確加載這些JPEG。這已經報道,在過去的錯誤,但Sun的迴應是,these are valid files:
這不是一個圖像I/O錯誤,而是在提交提到的其它應用 缺乏。 IIO JPEGImageWriter能夠用 寫一個包含alpha通道的顏色模型(在IJG原生 源代碼中稱爲「NIFTY」顏色空間,如RGBA,YCbCrA等),但許多應用程序都是不知道這些色彩空間。因此,即使這些由IIO JPEG寫入器編寫的圖像 符合JPEG規範(其中 對各種色彩空間可能性都是盲目的),但某些應用程序可能不識別包含alpha通道的色彩空間,並且可能會拋出 錯誤或呈現損壞的圖像,如提交者描述的那樣。
開發人員希望保持與這些其他不知道alpha- 應用程序的兼容性應寫入不包含alpha通道的圖像(如 TYPE_INT_RGB)。開發人員想要以JPEG格式編寫/讀取包含alpha通道的圖像 ,可以使用圖像I/O API執行此操作,但需要注意的是,許多本機應用程序並不完全符合 YCbCrA和RGBA格式。
有關詳細信息,請參閱圖像I/O JPEG元數據格式規範和使用注意事項: http://java.sun.com/j2se/1.4.1/docs/api/javax/imageio/metadata/doc-files/jpeg_metadata.html
截止爲「不是一個錯誤」。 XXXXX @ XXXXX 2003-03-24
我與像創建這些文件的Java應用程序的工作,並希望寫一些C代碼,將盡可能快地加載這些。 (本質上問題是Java ImageIO庫在解壓縮這些文件時速度非常慢,我們希望通過JNI替代裝載程序,並使用本地代碼通過JNI進行改進 - 這是目前性能瓶頸。)
有一些示例文件在這裏 - 道歉的人誰是coulrophobic:
在這裏你可以看到試圖查看灰階+α和使用Linux軟件的各種位RGB +阿爾法圖像的結果我相信使用libjpeg
:
所以看起來好像色彩空間只是被在各種情況下曲解。jpeglib.h
中唯一允許的值爲:
/* Known color spaces. */
typedef enum {
JCS_UNKNOWN, /* error/unspecified */
JCS_GRAYSCALE, /* monochrome */
JCS_RGB, /* red/green/blue */
JCS_YCbCr, /* Y/Cb/Cr (also known as YUV) */
JCS_CMYK, /* C/M/Y/K */
JCS_YCCK /* Y/Cb/Cr/K */
} J_COLOR_SPACE;
...這看起來沒有希望。
如果我加載這些圖像與libjpeg
的example.c
略加修改,是cinfo.jpeg_color_space
和cinfo.out_color_space
每個圖像讀標題之後的值如下:
gray-normal.jpg: jpeg_color_space is JCS_GRAYSCALE, out_color_space is JCS_GRAYSCALE
gray-alpha.jpg: jpeg_color_space is JCS_CMYK, out_color_space is JCS_CMYK
rgb-normal.jpg: jpeg_color_space is JCS_YCbCr, out_color_space is JCS_RGB
rgb-alpha.jpg: jpeg_color_space is JCS_CMYK, out_color_space is JCS_CMYK
所以,我的問題是:
- 是否可以使用libjpeg來正確讀取這些文件?
- 如果不是,我可以使用哪種替代C庫來應對它們?
顯然,有至少兩個其他解決方案的更一般的問題:
- 更改軟件輸出一般JPEG +代表alpha通道
- 不知何故改善Sun的性能的PNG文件ImageIO
......但是第一個代碼會涉及很多代碼更改,並且不清楚如何去處理後者。無論如何,我認爲如何使用libjpeg
加載這樣的文件可能是一個更普遍的興趣。
任何建議將不勝感激。
不,我不知道它!感謝您的建議。 – 2011-06-02 10:19:41
不幸的是,我無法使libjpeg-turbo正確解碼這些圖像,但我接受這是最有幫助的答案。 – 2011-07-07 20:49:06