Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Photoshop到Flash的透明PNG:如何使.swf准确显示.psd的功能?_Flash_Graphics_Png_Photoshop_Alpha Transparency - Fatal编程技术网

从Photoshop到Flash的透明PNG:如何使.swf准确显示.psd的功能?

从Photoshop到Flash的透明PNG:如何使.swf准确显示.psd的功能?,flash,graphics,png,photoshop,alpha-transparency,Flash,Graphics,Png,Photoshop,Alpha Transparency,我在Photoshop中有两层:1--纹理,2--与纹理重叠的半透明图像。两者的结合在Photoshop中看起来很不错。我从Photoshop单独导出它们,并将它们保存为24位PNG,透明度和颜色转换为sRGB。(PS的工作色空间为sRGB。) 将它们导入flash的结果让我哭了(见下图,注意十字架周围的区域)( 我尝试了动态加载PNG和直接将它们导入fla(压缩类型:无损,允许平滑:false)。看起来半透明区域在导出时保存不准确。更让我困惑的是,为什么动态加载和直接导入的结果不同 我遗漏了什

我在Photoshop中有两层:1--纹理,2--与纹理重叠的半透明图像。两者的结合在Photoshop中看起来很不错。我从Photoshop单独导出它们,并将它们保存为24位PNG,透明度和颜色转换为sRGB。(PS的工作色空间为sRGB。)

将它们导入flash的结果让我哭了(见下图,注意十字架周围的区域)(

我尝试了动态加载PNG和直接将它们导入fla(压缩类型:无损,允许平滑:false)。看起来半透明区域在导出时保存不准确。更让我困惑的是,为什么动态加载和直接导入的结果不同

我遗漏了什么?对这些症状的深入解释将不胜感激


EDIT1这是我粘在上面的psd。在拉链里面你会发现透明。psd,只有两层。我仍然没有运气把它们放进fla:透明区域变脏了

(400KB)


EDIT2一位flash开发人员同事向我指出“预乘阿尔法问题”

我想这一定是我正在努力克服的问题

据我所知,Photoshop内部使用的是直线alpha(PNG导出时与白色进行预乘)和。但我仍然不明白:在渲染透明图像时有什么不同?我仍然不知道需要执行哪些操作才能使PS和Flash中的图像看起来一样(或者至少我应该如何指导我们的艺术家准备图像)

有人吗?我在继续挖谷歌寻找答案


EDIT3不幸的是,我无法修饰图像。这里的示例只是大图的一小部分。我有一个相当复杂的界面,在纹理上有许多半透明的元素。图片看起来很酷(好像是用皱巴巴的纸板或其他东西做成的)所以,我需要一个纹理和半透明的布局分开。在flash的顶层添加blendmodes确实解决了“重影区域”的问题,但它也显著改变了图片,这是不可接受的


半透明层:

纹理层:

结果(Windows上PS和Flash Player的屏幕截图):

  • Photoshop(原件):Ok
  • 闪光(导入fla):重鬼区
  • 闪光(png加载):灯光重影区域

看起来您正在使用FLA内部压缩的JPEG图像格式,而不是PNG。为了避免这种情况,您需要指定图像压缩应该是无损的。您可以在library或MovieClip props中这样做。

为什么必须将其作为单独的层导入。您可以在photoshop和i中展平图像把它拿走

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

也就是说,以下是您的选择:

  • 切换顶部(半透明)层的混合模式以使其变亮。这将去除丑陋的圆环,但也会减弱整体效果,因此您必须在photoshop中对其进行补偿。这是更简单的方法

  • 在PixelBender中,以您需要的方式自行实现alpha堆肥

  • 展平,切出精确的效果区域,然后用flash将这些区域覆盖在你原来的背景纹理上。是的,很粗糙,但应该可以


  • 干杯!

    您是否使用位图对象渲染上面的图像?我以前遇到过一个类似的问题,即两个对象与alpha重叠,其中最顶端对象的alpha创建了与您显示的类似的视觉瑕疵。使用位图的本机alpha混合,我始终无法正确修复该问题。我的解决方案是使用copyPixels函数手动组合它们。类似如下:

    public function mergeImgs(baseImg : Bitmap, topImg : Bitmap) : void
    {
        baseImg.bitmapData.copyPixels(topImg.bitmapData, topImg.bitmapData.rect, new Point(), null, null, true);
    }
    

    你介意上传你的加载代码吗?我认为这与问题无关。刚刚创建了两个
    flash.display.Loader
    实例,将它们添加到显示列表中,并称为
    load(new URLRequest(“layer1.png”))
    ,没有别的。我仍然得到了那些重影区域,这让我觉得问题在于PS如何保存PNG文件。这也可能是Flash播放器中的alpha翻译,你是否尝试将PNG导入photoshop,并将其与相同背景下的原始PNG进行比较?谢谢你的想法,我已经将PNG导入了photoshop到PS,结果非常好。我在我的帖子中添加了一个.psd。希望有人能帮助我。正如我在上面的帖子中提到的,我从一开始就使用了压缩类型:lossles和allow smoothing:false。我还有一个想法:这些人工制品可能会因为缩放而出现(不一定是那些图像,可能是缩放的父对象)。感谢您的想法,但事实并非如此。我导入图像并将其放置到根时间轴中。Flash显示图像上没有缩放,也没有父容器。“但它们也显著改变了图片”整体情况?如果你只将blendmode应用于该层,情况如何?如果你说的是半透明层本身,那么是的,你的艺术家将不得不进行一些补偿。从你的例子和我的观察来看,这似乎并不极端,但是如果你有很多这些元素,这将是乏味的。不幸的是y、 我无法美化图像。这里的示例只是大图片的一小部分。我有一个相当复杂的界面,有许多半透明元素,使图片看起来很酷(就像它是由皱巴巴的纸板或其他东西制成的)。我需要单独的纹理和半透明布局。混合模式确实解决了“重影区域”问题,但它们也显著改变了局面。我很抱歉