【发布时间】: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