【问题标题】:add alpha channel to an image with PIL使用 PIL 将 alpha 通道添加到图像
【发布时间】:2022-01-05 16:05:35
【问题描述】:

有一个大小为 (505,503,4) 的透明图像“img_rgb_pil”,我想“圆形”裁剪它。为此,我正在使用此功能:

def to_circular_image(img_rgb_pil): 
   npImage=np.array(img_rgb_pil)
   h,w=img_rgb_pil.size

   # Create same size alpha layer with circle
   alpha = Image.new('L', img_rgb_pil.size,0)
   draw = ImageDraw.Draw(alpha)
   draw.pieslice([0,0,h,w],0,360,fill=255)

   # Convert alpha Image to numpy array
   npAlpha=np.array(alpha)

   # Add alpha layer to RGB
   npImage=np.dstack((npImage,npAlpha))

   # Save with alpha
   return Image.fromarray(npImage) **#<---- TypeError: Cannot handle this data type: (1, 1, 5), |u1**

调用此函数时,我收到此错误 "TypeError: Cannot handle this data type: (1, 1, 5), |u1" 。我知道 PIL 无法将 size(x,y,5) 数组转换为 PIL 图像。但是我不知道如何在透明图像上制作圆形裁剪。

以下是我得到的答案:

输入图片:input transparent image 输出图片:result

有什么帮助吗?

【问题讨论】:

  • 首先,裁剪是指通过完整的垂直或水平切割来缩小图片。您想要的可以描述为给图片一个 Alpha 通道,或者应用一个蒙版。 ——那么,维度为 5 表示您已经拥有具有四个通道的东西……您想用第 4 个通道做什么?丢弃?覆盖?
  • 您的输入图像是 4 通道。是 CMYK 还是 RGBA 还是别的什么?如果是 RGBA,那么就像 Christoph 说的,我们应该如何处理现有的 alpha 通道?
  • 抱歉耽搁了(仍然没有改进)。 @ChristophRackwitz,我不知道如何处理这个频道。但由于我的输入图像是 RGBA(@Mark),显然它有 4 个通道。我认为问题很明确:我的目标是从 RGBA 图像制作圆形图像。我该怎么做?

标签: python image-processing python-imaging-library


【解决方案1】:

不知道为什么你似乎想为此打扰 Numpy。创建一个 alpha 通道并使用Image.putalpha() 将其放入,您的工作就完成了。

开始图片

from PIL import Image, ImageDraw

# Load image, ensuring not palette and discarding any existing alpha
im = Image.open('image.png').convert('RGB')

# Get size
w, h = im.size

# Make circular alpha channel
alpha = Image.new('L', RGBA.size, 0)
draw = ImageDraw.Draw(alpha)
draw.pieslice([0,0,h,w],0,360,fill=255)

# Display it to check then push it into image
alpha.show()
im.putalpha(alpha)

阿尔法

结果图片

【讨论】:

  • 我编辑了我的问题,向您表明您的提议似乎不适用于透明输入图像
  • 请发布您的实际图像 - 而不是带有格子背景的 gnome 屏幕截图。它不起作用的原因正是由于克里斯托夫和我在您的原始帖子下提出的两个问题 - 应该如何处理任何现有的 alpha 通道。似乎丢弃它不是正确的答案 - 它需要与新的结合。
  • 我通过发布我的实际图像进行了编辑。您的意思是将 alpha 图像与输入图像的第 4 通道结合起来?
猜你喜欢
  • 2021-04-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-07
  • 2016-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多