UImage: удаление прозрачности и альфа-канала
Сделать полупрозрачное изображение непрозрачным не удаляя альфа-канал позволяет статический метод alpha_remove_im() из класса UImageChange. Формат метода:
UImageChange.alpha_remove_im(<UImage>, bgcolor=UColor("white"))
В качестве первого параметра указывается объект UImage. Параметр bgcolor задает цвет основы, на которую будет наложено полупрозрачное изображение, в виде объекта UColor (альфа-канал объекта цвета игнорируется). Метод возвращает объект UImage или значение None в случае ошибки. Операция выполняется с помощью библиотеки ImageMagick. Пример:
from unicross_image.ucolor import UColor
from unicross_image.uimage import UImage
from unicross_image.uimagechange import UImageChange
img = UImage.load("foto.png")
img = UImageChange.rotate(img, 45)
print(img.is_transparent()) # True
img2 = UImageChange.alpha_remove_im(img, UColor("green"))
if img2:
print(img2) # UImage(width=590, height=591)
print(img2.is_transparent()) # False
img2.save("test.png")
else:
print("Ошибка при выполнении операции")
Преобразовать объект UImage в объект UImageRGB позволяет метод get_uimagergb(bgcolor=None) из класса UImage. Если параметр bgcolor не задан, то альфа-канал при выполнении операции просто отбрасывается. В случае ошибки метод вернет значение None. Пример:
from unicross_image.uimage import UImage
from unicross_image.ucolor import UColor
img = UImage(3, 2, UColor(255, 0, 0, 128))
img2 = img.get_uimagergb()
print(img2) # UImageRGB(width=3, height=2)
print(img2.arr)
# [255, 0, 0, 255, 0, 0, 255, 0, 0,
# 255, 0, 0, 255, 0, 0, 255, 0, 0]
Если нужно учесть значения из альфа-канала, то можно выполнить наложение на цветную непрозрачную основу. Для этого в параметре bgcolor указывается непрозрачный цвет основы в виде объекта UColor (альфа-канал объекта цвета игнорируется). Операция выполняется с помощью библиотеки Pillow. Если библиотека Pillow недоступна, то производится попытка выполнить операцию с помощью библиотеки ImageMagick. Если библиотека ImageMagick недоступна, то альфа-канал просто отбрасывается. Если возникла ошибка, то метод вернет значение None. Пример наложения на белую основу:
from unicross_image.uimage import UImage
from unicross_image.ucolor import UColor
img = UImage(3, 2, UColor(255, 0, 0, 128))
img2 = img.get_uimagergb(UColor("white"))
print(img2) # UImageRGB(width=3, height=2)
print(img2.arr)
# [255, 127, 127, 255, 127, 127, 255, 127, 127,
# 255, 127, 127, 255, 127, 127, 255, 127, 127]
Сделать полупрозрачное изображение непрозрачным и удалить альфа-канал позволяет статический метод alpha_off_im() из класса UImageChange. Формат метода:
UImageChange.alpha_off_im(<UImage>, bgcolor=UColor("white"))
В качестве первого параметра указывается объект UImage. Параметр bgcolor задает цвет основы, на которую будет наложено полупрозрачное изображение, в виде объекта UColor (альфа-канал объекта цвета игнорируется). Метод возвращает объект UImageRGB или значение None в случае ошибки. Операция выполняется с помощью библиотеки ImageMagick. Пример:
from unicross_image.ucolor import UColor
from unicross_image.uimage import UImage
from unicross_image.uimagechange import UImageChange
img = UImage.load("foto.png")
img = UImageChange.rotate(img, 45)
print(img.is_transparent()) # True
img2 = UImageChange.alpha_off_im(img, UColor("green"))
if img2:
print(img2) # UImageRGB(width=590, height=591)
print(img2.is_transparent()) # False
img2.save("test.png")
else:
print("Ошибка при выполнении операции")
Класс входит в состав графической библиотеки UImage для Python 3. Описание библиотеки UImage