1

我正在加载一些图像,我想从 PNG 转换为 JPG 以具有更小的文件大小。然而,由于 JPG 没有透明度信息,因此图像的背景显示为白色。

加载图像后,如何使此白色背景透明?

提前致谢

4

3 回答 3

2

我假设您想在运行时将白色像素更改为透明像素。首先,我只想说最好的答案,就是使用 PNG 格式。我的观点是在运行时做这样的事情并不是一个好的解决方案。如果您有很多图像,文件大小很重要,那么运行时处理会带来它自己的负面影响,即处理图像时的长时间停顿。

我个人会探索我可以做些什么来减小 PNG 文件的大小,并且可能永远不会使用这样的解决方案。

但是,如果您选择走这条路,您需要做的是:

  • 将图像转换为带有 Alpha 通道的 BitmapData。

  • 循环通过 BitmapData 并使这些像素透明。

或者

  • 使用threshold()BitmapData 的方法。

正如有人在您的问题的评论中提到的那样,使用白色作为背景颜色并不是一个好主意,因为所有白色像素都将变得透明,而不仅仅是背景像素。

因此,选择一种不在这些图像的调色板中的颜色是您想要用作背景颜色的颜色

正如评论者指出的那样,threshold()BitmapData 的方法可能效果最好。

于 2013-04-11T01:21:24.780 回答
1

JPG(技术上,JPEG 文件交换格式)文件,正如普通浏览器和图形应用程序所理解的那样,不支持像 PNG 那样在图像中存储 alpha 通道。根据您的应用程序,您可能希望存储一个单独的黑白“图像”文件,它是 JPG 的透明蒙版,并使用该对。可以在自定义软件中使用格式的扩展,但它们不会在其他地方被理解。

但首先,请确保 JPG 确实是您想要使用的。JPG 仅适用于“摄影”图像,这些图像通常没有透明蒙版(当然也有例外)。如果图像更像图标/绘图,那么无论如何 JPG 很可能不会比 PNG 小很多,并且具有难看的锯齿伪影,因此仅优化 PNG 会给您带来更好的结果。

于 2013-04-11T01:06:31.697 回答
0

您可能需要考虑将 png 嵌入 Flash 库中,然后导出为 swf。然后,您可以使用 Flash 使用有损 JPEG 算法压缩您的 png,但它仍将保留 alpha 通道。这可能会导致文件大小更小,但有利于保持 8 位 Alpha 通道(每个像素有 256 个透明度级别)。

通过屏蔽特定颜色,您只会得到一个 1 位的 alpha 蒙版(一个像素要么完全可见,要么完全隐藏。)您还可能遇到问题,例如图像中的颜色与遮罩颜色对应时,从您要显示的实际图像中删除像素。

在 JPEG 图像中使用无光泽颜色的另一个问题是 JPEG 压缩会留下伪影,尤其是在对象边缘和无光泽颜色周围。这使得很难正确掩盖特定颜色。

于 2013-04-11T10:44:40.687 回答