【问题标题】:Pasting image with no black background added with python使用python粘贴没有黑色背景的图像
【发布时间】:2017-02-13 15:54:12
【问题描述】:

我正在尝试截取屏幕截图并将光标粘贴到上面,但是当我运行程序时,结果是光标粘贴了大的黑色背景,有谁知道我怎样才能让黑色背景消失?

这是我的代码:

from PIL import Image

im = Image.open("screenShot.png")
mouse = Image.open(r"C:\Windows\Cursors\aero_arrow.cur")
im.paste(mouse, (40,40)) #Drawing the cursor
im.save("newImage.png")

【问题讨论】:

    标签: python image python-imaging-library paste


    【解决方案1】:

    你需要指定一个遮罩,所以黑色部分不会被渲染。 见docs

    im.paste(图像、框、掩码)

    同上,但只更新掩码指示的区域。你 可以使用“1”、“L”或“RGBA”图像(在后一种情况下, alpha 波段用作掩码)。其中掩码为 255,给定图像为 照原样复制。如果掩码为 0,则保留当前值。 中间值可用于透明效果。

    请注意,如果您粘贴“RGBA”图像,则会忽略 alpha 波段。你 可以通过使用与源图像相同的图像和 面具。

    最后一部分应该是你的情况。

    因此,在您的情况下,您可以使用 im.paste(mouse, (40,40), mouse),因为该图像已经具有 Alpha 通道

    编辑:

    显然问题与.cur 格式有关。如果您输入mouse.getbands(),它将返回(R, G, B),因此返回ValueError。 您可以将 .cur 文件转换为带有 alpha 通道的 .png,但是我还可以使用以下方法:

    mouse_mask = mouse.convert("L")
    im.paste(mouse, (40,40), mouse_mask)
    

    【讨论】:

    • 我之前试过这个但是得到ValueError: bad transparency mask的错误信息
    • 还有一个问题,当我使用这个面具时,鼠标的黑线边框也消失了,我只看到白色鼠标,有什么想法吗?
    • @EyalS 抱歉,但我认为这与 PIL 如何处理这些图像有关,但我不知道。您仍然可以尝试以您想要的所有透明/黑色像素的方式将光标保存为 PNG。由于.cur 是一种特定于 Windows 的文件格式,因此实际上并没有那么多开源支持。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-05
    • 2020-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多