使JPG白色背景透明

时间:2013-04-11 00:53:41

标签: actionscript-3 flash transparency

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

加载图片后如何才能使此白色背景透明?

提前致谢

3 个答案:

答案 0 :(得分:2)

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

我个人会探索如何减少PNG文件的大小,并且可能永远不会使用这样的解决方案。

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

  • 使用Alpha通道将图像转换为BitmapData。

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

  • 使用BitmapData的threshold()方法。

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

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

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

答案 1 :(得分:1)

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

但首先,请确保JPG确实是您想要使用的。 JPG仅适用于“摄影”图像,通常不具有透明蒙版(尽管有例外)。如果图像更像Icon / Drawing,那么JPG可能不会比PNG小得多,并且具有难看的锯齿伪像,因此只需优化PNG就可以获得更好的效果。

答案 2 :(得分:0)

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

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

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