Mar*_*air 10 java jpeg file-format libjpeg color-space
关于具有alpha通道的JPEG是否有效似乎存在争议.我一直认为正确的答案是在JPEG常见问题解答中,基本上是"否".(这在Stack Overflow的另一个问题中重申了.)
但是,Sun的ImageIO库中的Java的JPEGImageWriter将很乐意使用alpha通道编写和读取灰度和RGB图像,即使在Linux上我几乎没有应用程序,我已经尝试过正确加载这些JPEG.这在过去曾被报道为一个错误,但Sun的回答是这些是有效的文件:
这不是Image I/O错误,而是提交者提到的其他应用程序的缺陷.IIO JPEGImageWriter能够使用包含alpha通道的颜色模型(在IJG原生源代码中称为"NIFTY"颜色空间,如RGBA,YCbCrA等)来编写图像,但许多应用程序都不知道这些色彩空间.因此,即使IIO JPEG编写器写入的这些图像符合JPEG规范(对各种颜色空间可能性视而不见),某些应用程序可能无法识别包含alpha通道的颜色空间,并且可能会抛出错误或渲染损坏图像,正如提交者所描述的那样.
希望保持与其他alpha-unaware应用程序兼容的开发人员应该编写不包含alpha通道的图像(例如TYPE_INT_RGB).希望能够以JPEG格式编写/读取包含Alpha通道的图像的开发人员可以使用Image I/O API执行此操作,但需要注意的是,许多本机应用程序不完全符合YCbCrA和RGBA格式.
有关更多信息,请参阅Image 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用本机代码替换加载器来改善这一点 - 这是目前的性能瓶颈.)
这里有一些示例文件 - 向任何有嗜铁的人道歉:
在这里,您可以看到尝试使用我认为使用的各种Linux软件查看灰度+ alpha和RGB + alpha图像的结果libjpeg:
带有各种程序的alpha通道视图的灰度图像http://mythic-beasts.com/~mark/all-alpha-bridges.png
具有alpha通道视图的RGB图像与各种程序http://mythic-beasts.com/~mark/all-alpha-clowns.png
因此看起来好像在每种情况下都会误解色彩空间.唯一允许的值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;
Run Code Online (Sandbox Code Playgroud)
......看起来并不乐观.
如果我使用略微修改的example.cfrom 版本加载这些图像libjpeg,则读取标题后每个图像的值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
Run Code Online (Sandbox Code Playgroud)
所以,我的问题是:
显然,对于更普遍的问题,至少有两种其他解决方案:
...但第一个会涉及很多代码更改,并且不清楚如何去做后者.在任何情况下,我认为如何使用libjpeg加载此类文件的问题可能是更普遍的兴趣之一.
任何建议将不胜感激.
| 归档时间: |
|
| 查看次数: |
4758 次 |
| 最近记录: |