透明至未乘的RGB + Alpha


16

我在Photoshop CS5中有一个透明层(因此,在内部,它很可能存储为未预乘的RGB分量以及每个像素一个alpha分量)。

现在,我想将其转换为不透明的图层(只是未预乘的RGB)+ alpha蒙版。结果应与原始结果相同。

我不能只是将透明层置于黑色下面,将其选为遮罩并合并这些层,因为这将导致Alpha预先乘以RGB值。

希望您能理解该问题,并能为我提供解决方案。

作为另一种解释:我想要这样的反向过程:

  1. 创建一个新层并粘贴到任何图像中
  2. 创建具有白色到黑色渐变的蒙版
  3. 应用图层蒙版

说明图片:

状态A: 在此处输入图片说明

状态B: 在此处输入图片说明


重要说明:该层仅是本例中完全恒定的红色-但是您可以想到任何任意图像,而不是恒定的红色。因此-要从状态A进入状态B,只需应用图层蒙版即可。

我想知道如何从状态B转到状态A。


我想知道某种掩蔽插件在这里是否有帮助。存在不透明度信息,这只是如何获取它的问题。脚本API中不存在获取像素级信息的情况(至少在Applescript中如此,但是所有受支持的语言似乎都与我所看到的一致)。
菲利普·里根

Answers:


6

我完全理解你的痛苦。这是我的解决方案:)
提取Alpha作为蒙版动作
这是它的作用:

在此处输入图片说明 编辑:
在此处输入图片说明
我希望这可以帮助:)


哇,很酷。当然,确实需要使用“动作”来使其成为可以忍受的过程。
2011年

5

错误!都错了!

在这个过程中,我欺骗了自己,也欺骗了您:我创建的确实是预乘图像-不是与黑色预乘,而是与白色预乘。我将这个答案留给其他人来建立。


我设法做到这一点:

  1. 从图像中提取真实的RGBA通道
  2. 使用它们来构建新图像

这是我的操作方式:

测试影像

这是我使用的测试图像。PS中的频道视图如下所示:

频道

通过选择各个通道,我将它们复制到各个层中,然后用白色背景将其展平以接收黑白地图,如下所示:

黑白地图

我还通过以下命令将原始图像的透明度提取到了图层中:在图层缩略图上单击鼠标右键,然后将所选内容填充到新图层中。

然后,我创建了一个具有相同尺寸且没有透明度的新图像。然后,我将创建的RGB图层粘贴到新图像的相应通道中:

新图片的频道

在最后一步中,我通过双击“展开”了该图层,并使用原始图像中的alpha图层创建了一个图层蒙版,结果是:

图层蒙版


如上所述,这不会创建未预乘的图像,因为我的示例必须像这样未预乘:

正确的版本

有谁比我聪明,可以创造这个吗?我认为,如果没有基于像素的高级脚本,这在Photoshop中是不可能的。


5

好的-我创建了一个简单的pixelBender滤镜,可以将其与photoshop PixelBender插件(http://labs.adobe.com/downloads/pixelbenderplugin.html)一起使用,以删除图层的透明度。在这里是:http : //neo.cycovery.com/removeTransparency.pbk


2

根据给出的答案和您的评论,简短的答案是:您无法做自己想做的。应用蒙版后,将渲染该图层,并丢弃看不见的图像数据。

编辑:

我制作了一些示例png文件,然后使用php对其进行了操作(下面的源代码)。

如果我创建具有随机透明度的png并在图层具有蒙版的情况下保存,则无论是否启用了alpha支持,100%的空白区域(例如来自框工具的区域)均显示为白色。禁用了alpha时,不会显示包含100%透明色的渐变。

如果我(永久)应用图层蒙版,然后创建png,那么如果禁用了alpha,则php会提供原始图像。

因此,可能的解决方法是找到一个不支持alpha PNG的软件包,然后从那里重新保存。至于恢复原始面膜,我还没有看过。

这两个代码样本都是概念验证的,而且很慢。

<?php

$im = imagecreatefrompng('./images/alphatest_nolayer.png');
$enable_alpha = 0;  //set to 0 to disable aplha

if ($enable_alpha) {
    imagealphablending($im, false);
    imagesavealpha($im, true);
}

header('Content-Type: image/png');
imagepng($im);

imagedestroy($im);

?>

要提取alpha(请注意:php的GD限制为128级alpha,而不是256级),因此会损失一些精度。可以使用关卡工具将Alpha拉伸至256)

<?php

$im = imagecreatefrompng('./images/alphatest_nolayer.png');
$w = imagesx($im);
$h = imagesy($im);

$om = imagecreatetruecolor($w,$h);

for ($x = 0; $x < $w; $x++) {
    for ($y = 0; $y < $h; $y++) {
        $rgb = imagecolorat($im, $x, $y);
        $colors = imagecolorsforindex($im,  $rgb);

        $orgb = imagecolorallocate($om,$colors['alpha'],$colors['alpha'],$colors['alpha']);
        imagesetpixel($om,$x,$y,$orgb);
    }
}

header('Content-Type: image/png');
imagepng($om);

imagedestroy($om);
imagedestroy($im);

?>

但数据仍然存在。这是RGBA像素数据的RGB部分。必须有一种方法可以提取它
Mat

1
您为什么不提供真实的示例文件?在您的问题中,您清楚地显示了一个具有透明区域且没有遮罩的图层,也没有显示Alpha通道的指示。
horatio 2011年

.png具有预定义的调色板颜色,用于100%透明的黑色,只要有100%的透明度以节省磁盘空间,就会适当使用(由Photoshop使用)。
Ars Magika

不确定这是否能真正回答问题-似乎特定于PNG处理。
e100

2

我发现了如何在GIMP中做到这一点,它可能不是PhotoShop,但至少它将按照您的要求进行。(按照我的解释;))

  • 在GIMP中打开图像。
  • 鼠标右键单击“ 图层”框中的图层
  • 从上下文菜单中选择“ 添加图层蒙版
  • 在下面的菜单中选择“ 传输层alpha通道 ”,然后单击“ 添加 ”按钮

此时,您将剩下带有Alpha通道蒙版的图像。

您可以进一步:

  • 右键单击图层蒙版,然后选择“ 删除图层蒙版
  • 现在,您剩下的图像没有Alpha蒙版了。

还有一个有关如何执行此操作的youtube剪辑


罗伯托:是的,您找到了答案。那正是我们想要的,而且是免费的!我将使用您发布的视频作为其他任何询问该问题的人的答案(直到现在只有通过无限复制PS中的层才能实现此目的)

1

这似乎令人难以置信。如果我正确理解了原始问题及其各种说明,那么问题是要拍摄任意包含透明性的图像并使之完全不透明,然后将原始alpha值用作蒙版以重新创建原始外观。

如果这是问题,那是一个非常简单的答案,如果有点乏味的话。

  1. 复制图层10次。透明度将“填充”在合成图像中。

  2. 合并所有副本(但合并原始图层,这是最后一步所需要的)。

  3. 对合并的图层重复步骤1和2,然后再次进行。此时,所有透明度小于100%的像素现在都是100%不透明的(如果存在一些杂散,只需重复该过程直到没有)。那就是尽可能多的图像信息。

  4. Ctl / Cmd单击原始图层缩略图以加载其透明度。

  5. 选择新的不透明图层后,单击“图层面板”中的图层蒙版图标。


0

好的,这实际上很简单(您必须忽略行进的蚂蚁)

制作一个新层,并用您使用的任何颜色完全填充(如果采样是从第一张图像的死点开始进行的)

在此处输入图片说明

在此处输入图片说明

然后拍摄第一张图片,然后按住CTRL键并单击图层缩略图,您应该会看到以下版本: 在此处输入图片说明

就像我之前说过的:忽略行进中的蚂蚁,羽化在CS5中自动生效。

然后确保已选择填充层,然后单击遮罩按钮:

在此处输入图片说明

然后,只需隐藏最底层,您便应该完成操作,得到的效果完全相同:)

在此处输入图片说明

这就是在CS5中反向工程应用的蒙版的方法。CS5图层选择功能非常先进,因此大多数时候它们都忽略了行进中的蚂蚁,因为它们无法正确显示选择中会出现的任何羽化现象:)

希望可以帮助你。


感谢您的回答,但这不是我想要的-正如所解释的,恒定的红色仅用于此示例!它可以是任何图像(不仅是恒定的填充颜色),而且我没有可用的原始不透明图像
Mat

好吧,您应该在问题中张贴自己的形象。如果您发布了一个常量填充,我们将根据常量填充进行回答。但是,尝试使用此处的技术,CS5​​的选择非常先进,可能会让您感到惊讶。做到了
凯尔

我当然知道那些选择技巧!问题在于如何仅访问RGB透明层的一部分
Mat

在图层上方,有三个选项卡,单击通道。那里有红色,绿色,蓝色和图层蒙版。也许这就是你所追求的?
凯尔

但一个层如neo.cycovery.com/alpha_prob2.jpg不显示alpha通道-相反它只是显示用透明性的RG和B通道已经应用

0

您想要做的事情很容易通过插件完成,例如Photofreebies的“删除透明度”插件。首先,命令单击图层以选择透明像素,然后将该透明度信息保存在新通道中以保持其透明度。然后应用“删除透明度”滤镜,然后看到图层中的“隐藏”像素变为不透明(非常有趣,以了解Photoshop如何设置100%透明像素BTW)。多年来,我真的希望它是本机内置于Photoshop中的,但是a,我想这太先进了。

不幸的是,我找不到适用于Mac的此类插件的Photoshop CS6兼容版本,所以我现在陷入困境。GraphicConverter也可以做到这一点(删除Alpha通道)。


0

答案如下:

  1. 使用图像中所需的内容制作一个图层。

  2. 选择所需的Alpha通道。

  3. 将所选内容设置为图像图层的“图层蒙版”。

  4. 右键单击图层蒙版,然后单击“应用图层蒙版”。

现在魔术开始了:

  1. 转到“图层”,然后在底部:“消光”,然后选择“删除黑色遮罩”。

别客气!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.