【问题标题】:PIL paste image with alpha appears faded带有 alpha 的 PIL 粘贴图像出现褪色
【发布时间】:2013-09-04 20:51:56
【问题描述】:

我正在处理多个图像,我想将它们堆叠在一起以创建单个图像。但是,在与他们合作时,我注意到如果图像已经具有透明度(alpha != 255),则图像的该部分会出现褪色。如果没有透明度,一切都很好。

我将我正在使用的一张图片保存为 PNG,并创建了一小段代码来复制问题。本质上,我正在创建一个具有透明背景的新图像,然后将图像粘贴到顶部:

from PIL import Image

img=Image.new('RGBA', (946,627), (0,0,0,0))
overlayImage = Image.open('drawing.png')
img.paste(overlayImage, (0,0), overlayImage)
img.save('drawing-pasted.png')

完成后,drawing-pasted.png 如下所示:

但原图(drawing.png)看起来像这样:

(手动裁剪图像以显示细节。)原始图像圆圈填充颜色的 alpha 值为 179。

有没有其他人遇到过这种情况,我做错了什么?

非常感谢。

【问题讨论】:

    标签: python python-imaging-library


    【解决方案1】:
    image = Image.open(file_path)
    img1 = Image.open(file_path)
    cords = (233.22)
    image.paste(img1, cords, mask=img1)
    image.save(path_where_you_want_to_save_final_image)
    

    只需使用这段代码

    【讨论】:

      【解决方案2】:

      您创建的背景是黑色且完全透明的,原件是蓝色的,但 alpha 为 179,因此您有 2 个像素 (0,0,0,0) 和 (0,0,255,179) 假设 100% 蓝色 - 由于您将图像粘贴在其中,因此将在背景上超过,因此将使用允许 (255-179)/255 或大约 30% 黑色的新图像的 alpha。 (注意,背景的 alpha 没有区别,因为它位于新图像的后面)

      您可以使用overlayImage.putalpha 将 alpha 设置为 255,从您的图像而不是黑色背景开始。

      【讨论】:

      • 不确定我理解你的意思。如果我在图像上设置 255 的 alpha,我会得到蓝点,但背景是全黑的,这不是我想要的。我使用了透明图像,因为这是复制问题的最少代码量。我的主要目标是从图像(地图)开始,并将这些点叠加在上面,而不改变它们的透明度。但是现在,点图像消失了。
      • 啊!所以你当前的背景是一张地图,覆盖是黑色的蓝点,你需要有一个alpha为0的覆盖,即颜色为(0,0,0,0),除了点应该在哪里只是点是,即它们的颜色应该是 (0, 0, 255. 255)。您可以通过掩码生成来做到这一点,或者,因为您可能通过设置颜色和 alpha 从代码中生成点。
      • 嗯,点是 (0, 0, 255, 179),图像的其余部分是透明背景。所以,我有那个图像(这是上面的第二个图像),但是当我将它粘贴到我的地图图像顶部(使用点图像作为遮罩)时,点上的 alpha 会“消失”。
      • 正如我上面所说,如果你不希望这些点“褪色”,你需要它们在透明层上不透明,否则它们会随着背景的显示而降低强度。
      • 所以,如果我明白你在说什么,我应该在另一层完全不透明(alpha = 255)上绘制圆圈,然后将该层的整体 alpha 设置为 179?问题在于,即使在此示例中,填充颜色的 alpha 值为 179,但线条颜色的 alpha 值高于此值,以进行强调。其他图像的每个点可能具有不同程度的 alpha。通过更改单个 alpha 并设置图层 alpha,我会失去这些差异,对吗?
      猜你喜欢
      • 2013-11-02
      • 1970-01-01
      • 1970-01-01
      • 2019-05-18
      • 1970-01-01
      • 2021-01-13
      • 2021-09-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多