本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长


+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

我可以使用libjpeg读取带有Alpha通道的JPEG吗?

发布于2021-01-16 00:38     阅读(792)     评论(0)     点赞(9)     收藏(0)


关于带有Alpha通道的JPEG是否有效似乎存在一些争论。我一直理解为正确的答案是JPEG FAQ中的“ No”。(这在有关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的应用程序保持兼容性的开发人员应编写不包含Alpha通道(例如TYPE_INT_RGB)的图像。想要以JPEG格式写入/读取包含Alpha通道的图像的开发人员可以使用Image 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将加载器替换为本机代码,以改善此问题-目前是性能瓶颈。)

这里有一些示例文件-向所有患有库仑恐惧症的致歉

在这里,您可以看到尝试使用我相信使用的各种Linux软件查看灰度+ alpha和RGB + alpha图像的结果libjpeg

具有各种程序的Alpha通道视图的灰度图像http://mythic-beasts.com/~mark/all-alpha-bridges.png

具有Alpha通道视图的RGB图像以及各种程序
(来源:在mythic-beasts.com上标记

因此,似乎每种情况下色彩空间都只是被误解了。中唯一允许的值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;

...这看起来没有希望。

如果我使用example.cfrom的稍微修改后的版本加载这些图像libjpeg,则在读取标题后,每张图像cinfo.jpeg_color_spaceandcinfo.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库来应对?

显然,对于更普遍的问题,至少还有其他两种解决方案:

  1. 更改软件以输出正常的JPEG +一个表示Alpha通道的PNG文件
  2. 以某种方式提高Sun的ImageIO的性能

...但是前者会涉及很多代码更改,并且尚不清楚如何进行后者。无论如何,我认为如何使用libjpeg这样的文件加载问题可能是更普遍的兴趣之一。

任何建议将不胜感激。


解决方案


您已经尝试过libjpeg-turbo吗?它应该能够解码RGBA,并且已经有Java包装器。



所属网站分类: 技术文章 > 问答

作者:黑洞官方问答小能手

链接:http://www.javaheidong.com/blog/article/70481/1915d2b5660f3ed0a43d/

来源:java黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

9 0
收藏该文
已收藏

评论内容:(最多支持255个字符)