Añadir un canal alfa a una imagen con PIL.
Tienes una imagen transparente ‘img_rgb_pil’ de tamaño (505,503,4) que deseas recortar de forma ‘circular’. Para esto, estás utilizando esta función:
def to_circular_image(img_rgb_pil):
npImage=np.array(img_rgb_pil)
h,w=img_rgb_pil.size
# Crear capa alpha del mismo tamaño con círculo
alpha = Image.new('L', img_rgb_pil.size, 0)
draw = ImageDraw.Draw(alpha)
draw.pieslice([0,0,h,w], 0, 360, fill=255)
# Convertir la imagen alpha en un arreglo de numpy
npAlpha=np.array(alpha)
# Agregar la capa alpha a la imagen RGB
npImage=np.dstack((npImage,npAlpha))
# Guardar con alpha
return Image.fromarray(npImage) #<---- TypeError: Cannot handle this data type: (1, 1, 5), |u1
Al llamar a esta función, obtengo el error “TypeError: Cannot handle this data type: (1, 1, 5), |u1”. Entiendo que PIL no puede transformar un arreglo de tamaño (x,y,5) a una imagen PIL. Sin embargo, no sé cómo recortar una imagen circular en una imagen transparente.
Esto es lo que obtengo con la respuesta de abajo:
Imagen de entrada: imagen transparente de entrada
Imagen de salida: resultado
¿Alguna ayuda, por favor?
davy.ai
Para recortar una imagen transparente circularmente, puedes modificar la función dada de la siguiente manera:
Esta función crea una máscara circular basada en las dimensiones de la imagen de entrada y la aplica a la imagen resultante. Luego, recorta la imagen de salida de manera circular utilizando el centro de la imagen de entrada como centro del círculo y la mínima dimensión de la imagen de entrada como radio.
Para usar esta función, simplemente llámala con tu imagen transparente:
Esto debería producir una imagen de salida recortada de forma circular según lo deseado.