#python #python-imaging-library #png #alpha
#python #python-imaging-library #png #альфа
Вопрос:
Я хочу сделать видимую часть изображения более прозрачной, но также не изменять альфа-уровень полностью прозрачного фона.
и я делаю это так:
from PIL import Image
img = Image.open('image_with_transparent_background.png')
img.putalpha(128)
img.save('half_transparent_image_with_preserved_background.png')
И вот что я получаю: half_transparent_image_with_preserved_background.png
Как мне добиться именно того, чего я хочу — так, без изменения фона?
Ответ №1:
Я думаю, вы хотите сделать альфа-128 везде, где он в настоящее время ненулевой:
from PIL import Image
# Load image and extract alpha channel
im = Image.open('moth.png')
A = im.getchannel('A')
# Make all opaque pixels into semi-opaque
newA = A.point(lambda i: 128 if i>0 else 0)
# Put new alpha channel back into original image and save
im.putalpha(newA)
im.save('result.png')
Если вам нравится делать это с помощью Numpy, вы можете сделать:
from PIL import Image
import numpy as np
# Load image and make into Numpy array
im = Image.open('moth.png')
na = np.array(im)
# Make alpha 128 anywhere is is non-zero
na[...,3] = 128 * (na[...,3] > 0)
# Convert back to PIL Image and save
Image.fromarray(na).save('result.png')
Комментарии:
1. Я попробовал ваш пример и, похоже, работает .. единственная проблема — это качество, в 512×512 оно сильно искажается