有关Alpha通道的JPEG是否有效的似乎有一些争论.我一直认为是正确的答案是 that in the JPEG FAQ,这本质上是“否”. (这是在07年1月重申的)

然而,Sun的ImageIO库中的Java JPEGImageWriter将很乐意地使用Alpha通道编写和读取灰度和RGB图像,尽管在Linux上几乎没有任何应用程序,我已经尝试过,将正确加载这样的JPEG.过去曾经报道过这个bug,但是Sun的回应是these are valid files:

This is not an Image I/O bug,but rather a deficiency in the other applications
the submitter mentions. The IIO JPEGImageWriter is able to write images with
a color model that contains an alpha channel (referred to in the IJG native
source code as the “NIFTY” color spaces,such as RGBA,ycbcrA,etc.),but many applications are not aware of these color spaces. So even though these images
written by the IIO JPEG writer are compliant with the JPEG specification (which
is blind to the varIoUs color space possiblities),some applications may not
recognize color spaces that contain an alpha channel and may throw an
error or render a corrupted image,as the submitter describes.

Developers wishing to maintain compatibility with these other alpha-unaware
applications should write images that do not contain an alpha channel (such as
TYPE_INT_RGB). Developers who want the capability of writing/reading an image
containing an alpha channel in the JPEG format can do so using the Image I/O
API,but need to be aware that many native applications out there are not quite
compliant with the ycbcrA and RGBA formats.

For more information,see the Image I/O JPEG Metadata Format Specification and Usage Notes:
07003

Closing as “not a bug”.
xxxxx@xxxxx 2003-03-24

我正在使用一个Java应用程序来创建这样的文件,并且想要编写一些尽可能快地加载它们的C代码. (本质上,问题是解压缩这些文件时,Java ImageIO库非常慢,我们希望通过JNI替换加载程序的本机代码,从而改善这一点 – 这是目前的性能瓶颈.)

这里有一些示例文件 – 向任何coulrophobic的人道歉:

> http://mythic-beasts.com/~mark/example-jpegs/

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

grayscale image with alpha channel view with various programs http://mythic-beasts.com/~mark/all-alpha-bridges.png

RGB image with alpha channel view with various programs 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;

…看起来不太有希望

如果我使用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通道的PNG文件
>以某种方式提高Sun的ImageIO的性能

…但第一个将涉及很多代码更改,并不清楚如何去做后者.在任何情况下,我认为如何使用libjpeg加载这样的文件的问题可能是更普遍的兴趣.

任何建议将不胜感激.

解决方法

你有没有试过 libjpeg-turbo?它应该能够解码RGBA,并且已经有一个Java包装器.

java – 我可以使用libjpeg来读取带Alpha通道的JPEG吗?的更多相关文章

  1. android – 如何将位图的黑色背景颜色更改为透明?

    我正在使用以下代码创建Bitmap:但我想将背景颜色从黑色更改为透明,因为我也希望在另一个Activity中使用此对象.我搜索了很多,但我无法找到解决方案.请帮忙.提前致谢.解决方法当然,在模式ARGB_8888中创建的位图支持透明度但alpha通道最初由0xff填充,因此位图是不透明的.您必须清除整个位图,包括alpha通道,如下所示:

  2. Win32剪贴板和Alpha通道图像

    我特别感兴趣的是找出数据是否必须预付.如上所述,Word2010和XnView不会超前,而Firefox和Chrome.但是,知道颜色通道是否应该预乘,这一点至关重要.非常感谢您的光临!我已经倾销了完整的DIBV5,它与我的应用程序是一样的,但仍然可以与FF和Chrome一起使用,但不适用于我的应用程序,所以还必须有其他的东西!2)InternetExplorer10也是如此.将IE10的Alpha通道图像粘贴到我的应用程序上根本不起作用…我正在获得一个深度为24的DIB,即没有alpha通道所有.然而,

  3. javascript – Canvas:屏蔽图像并保留其alpha通道?

    这是我要做的:>获取图像A和图像B.图像B是黑色和白色的蒙版图像.>用图像B的红色通道替换图像A的Alpha通道.>在画布上绘制图像C.>在图像C的顶部绘制图像A.一切似乎都可以直到第4步.图像C根本不可见,图像A应该是透明的,有白色.解决方法Simon是对的:putimageData方法不注意合成;它只是复制像素值.为了获得合成,我们需要使用绘图操作.我们需要将像素数据的通道(变成红色变成alp

  4. three.js中的alpha通道不一致

    平面物体的例子:问题最明显的挤压样条几何示例:解决方法尝试使用depthTest.通常这会有所帮助:还有许多与您的主题相关的其他问题,例如:transparentbug

  5. ios – 删除图像中的Alpha通道

    我有一个应用程序图标的iOS,但苹果不允许alpha的形象.如何清除此Alpha通道?我只有我的png图像我没有源文件,因为我的朋友为我做的图像.解决方法假设您没有其他图像编辑器,那么您可以在Mac上的预览中打开它,并使用导出选项以不同的格式重新保存,以确保您摆脱Alpha通道,最好导出到JPG,然后打开它并将其作为PNG导出.话虽如此,我怀疑你可能会提交透明度通道的图标,只要没有实际的透明度.

  6. ios – 如何将UIImage / CGImageRef的Alpha通道转换为掩码?

    如何提取UIImage或CGImageRef的Alpha通道,并将其转换为可与CGImageMaskCreate一起使用的掩码?

  7. java – 我可以使用libjpeg来读取带Alpha通道的JPEG吗?

    >如果没有,是否有可以使用的替代C库可以处理它们?显而易见,至少有两个其他的解决方案是更普遍的问题:>更改软件以输出普通JPEG代表Alpha通道的PNG文件>以某种方式提高Sun的ImageIO的性能…但第一个将涉及很多代码更改,并不清楚如何去做后者.在任何情况下,我认为如何使用libjpeg加载这样的文件的问题可能是更普遍的兴趣.任何建议将不胜感激.解决方法你有没有试过libjpeg-turbo?它应该能够解码RGBA,并且已经有一个Java包装器.

  8. 如何使用JavaScript将图像从PNG转换为JPEG?

    我试图从画布中获取图像.PNG图像正确到位,但JPEG正在产生问题.我附上图片在这里.第一张图片是我的画布.随着PNG然后JPEG.so我想要我的JPEG图像与白色背景或我需要一个解决方案PNG到JPEG转换在JS解决方法原因这样做的原因是画布是透明的.然而,透明度为黑色的透明Alpha通道,因此它不会显示在屏幕上.另一边的JPEG不支持Alpha通道,因此默认的黑色将被剥去其alpha通道留下黑

随机推荐

  1. 基于EJB技术的商务预订系统的开发

    用EJB结构开发的应用程序是可伸缩的、事务型的、多用户安全的。总的来说,EJB是一个组件事务监控的标准服务器端的组件模型。基于EJB技术的系统结构模型EJB结构是一个服务端组件结构,是一个层次性结构,其结构模型如图1所示。图2:商务预订系统的构架EntityBean是为了现实世界的对象建造的模型,这些对象通常是数据库的一些持久记录。

  2. Java利用POI实现导入导出Excel表格

    这篇文章主要为大家详细介绍了Java利用POI实现导入导出Excel表格,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  3. Mybatis分页插件PageHelper手写实现示例

    这篇文章主要为大家介绍了Mybatis分页插件PageHelper手写实现示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  4. (jsp/html)网页上嵌入播放器(常用播放器代码整理)

    网页上嵌入播放器,只要在HTML上添加以上代码就OK了,下面整理了一些常用的播放器代码,总有一款适合你,感兴趣的朋友可以参考下哈,希望对你有所帮助

  5. Java 阻塞队列BlockingQueue详解

    本文详细介绍了BlockingQueue家庭中的所有成员,包括他们各自的功能以及常见使用场景,通过实例代码介绍了Java 阻塞队列BlockingQueue的相关知识,需要的朋友可以参考下

  6. Java异常Exception详细讲解

    异常就是不正常,比如当我们身体出现了异常我们会根据身体情况选择喝开水、吃药、看病、等 异常处理方法。 java异常处理机制是我们java语言使用异常处理机制为程序提供了错误处理的能力,程序出现的错误,程序可以安全的退出,以保证程序正常的运行等

  7. Java Bean 作用域及它的几种类型介绍

    这篇文章主要介绍了Java Bean作用域及它的几种类型介绍,Spring框架作为一个管理Bean的IoC容器,那么Bean自然是Spring中的重要资源了,那Bean的作用域又是什么,接下来我们一起进入文章详细学习吧

  8. 面试突击之跨域问题的解决方案详解

    跨域问题本质是浏览器的一种保护机制,它的初衷是为了保证用户的安全,防止恶意网站窃取数据。那怎么解决这个问题呢?接下来我们一起来看

  9. Mybatis-Plus接口BaseMapper与Services使用详解

    这篇文章主要为大家介绍了Mybatis-Plus接口BaseMapper与Services使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  10. mybatis-plus雪花算法增强idworker的实现

    今天聊聊在mybatis-plus中引入分布式ID生成框架idworker,进一步增强实现生成分布式唯一ID,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

返回
顶部