我在 Photoshop 中有两层:1 - 纹理,2 - 与纹理重叠的半透明图像。两者的组合在 Photoshop 中看起来不错。我将它们与 Photoshop 分开导出,将它们保存为 24 位 PNG,透明度和颜色转换为 sRGB。(PS 的工作色彩空间是 sRGB。)
将它们导入闪存的结果让我哭了(见下图,注意十字架周围的区域是什么样的)。:(
我尝试动态加载PNG并直接将它们导入fla(压缩类型:lossles,允许平滑:false)。看起来半透明区域在导出时保存不准确。更让我不解的是为什么动态加载和直接导入的结果不同。
我错过了什么?对这些症状的深入解释将不胜感激。
EDIT1这是我坚持的 psd。在 zip 中,您会发现transparent.psd,它只有两层。我仍然没有运气将它们放入 fla:透明区域变脏。
http://noregret.org/test/transparency.zip (400 kb)
EDIT2一位 Flash 开发人员向我指出“预乘 alpha 问题”。
http://en.wikipedia.org/wiki/Alpha_compositing#Description
我想这一定是我要克服的问题。
据我目前所知,Photoshop 内部使用直接 alpha(在 PNG 导出时预乘白色),而Flash 使用预乘 alpha。但我仍然不明白:是什么产生了透明图像渲染的差异?而且我仍然不知道我需要执行哪些操作才能使 PS 和 Flash 中的东西看起来相同(或者至少我如何指导我们的艺术家准备图像)。
任何人?我正在继续挖掘谷歌的答案。
EDIT3不幸的是,我无法展平图像。这里的这个例子只是大图的一小部分。我有一个相当复杂的界面,在纹理顶部有很多半透明元素。图片看起来很酷(就像它是由皱巴巴的纸板或其他东西制成的)。所以,我需要单独的纹理和半透明布局。在 Flash 中将混合模式添加到顶层确实解决了“重影区域”问题,但它也显着改变了画面,这是不可接受的。
半透明层:
纹理层:
结果(Windows 上 PS 和 Flash Player 的屏幕截图):
- Photoshop(原始):好的
- Flash(导入到fla):重影区
- Flash(png加载):光鬼区