5

我在 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加载):光鬼区

在此处输入图像描述

4

3 回答 3

1

看起来您在 FLA 中获得了带有压缩的 JPEG 图像格式,而不是 PNG。为了避免这种情况,您需要指定您的图像压缩应该是无损的。您可以在库或 MovieClip 道具中执行此操作。

于 2011-07-04T13:07:39.067 回答
1

您是否使用 Bitmap 对象来渲染上面的图像?我遇到了一个类似的问题,将 2 个对象与 alpha 重叠,之前最上面的对象的 alpha 创建了类似于您所显示的视觉伪影。使用 Bitmap 的原生 alpha 混合,我永远无法正确解决问题。我的解决方案是使用 copyPixels 函数手动组合它们。像这样的东西:

public function mergeImgs(baseImg : Bitmap, topImg : Bitmap) : void
{
    baseImg.bitmapData.copyPixels(topImg.bitmapData, topImg.bitmapData.rect, new Point(), null, null, true);
}
于 2011-07-16T15:16:36.480 回答
0

为什么这些必须作为单独的层导入。您可以在 Photoshop 中将图像展平并导入。

是的,你失去了一些固有的灵活性,但有时我们不得不做出这些妥协。

也就是说,这是您的选择:

  1. 将顶部(半透明)图层的混合模式切换为变亮。这将摆脱那个丑陋的戒指,但它也会抑制整体效果,因此您必须在 Photoshop 中进行补偿。这是更简单的方法。

  2. 在 PixelBender 中以您需要的方式自己实施 alpha 堆肥。

  3. 展平,切出确切的效果区域,然后在 Flash 中将它们覆盖在原始背景纹理上。Hackish,是的,但它应该工作。

干杯!

于 2011-07-11T15:44:18.637 回答