UImage: вставка одного изображения в другое
Вставить одно изображение в другое позволяет статический метод paste() из класса UImageChange. Формат метода:
UImageChange.paste(<UImage1>, <UImage2>, <UPoint>, is_overlay=False)
В первых двух параметрах указываются объекты UImage. Третий параметр задает координаты точки вставки изображения <UImage2> в изображение <UImage1> в виде объекта UPoint. Если в параметре is_overlay указано значение False (значение по умолчанию), то производится вставка с заменой пикселей, а если True — то выполняется наложение с учетом альфа-канала. Метод возвращает объект UImage или значение None в случае ошибки. Операция выполняется с помощью библиотеки Pillow. Пример вставки одного изображения в другое:
from unicross_image.uhelper import UPoint
from unicross_image.ucolor import UColor
from unicross_image.uimage import UImage
from unicross_image.uimagechange import UImageChange
img1 = UImage.load("foto.png")
img2 = UImage(50, 50, UColor(255, 0, 0, 128))
img2 = UImageChange.rotate(img2, 45)
img3 = UImageChange.paste(img1, img2, UPoint(50, 50))
if img3:
print(img3)
img3.save("test.png")
else:
print("Ошибка при выполнении операции")
Пример наложения полупрозрачного изображения:
from unicross_image.uhelper import UPoint
from unicross_image.ucolor import UColor
from unicross_image.uimage import UImage
from unicross_image.uimagechange import UImageChange
img1 = UImage.load("foto.png")
img2 = UImage(50, 50, UColor(255, 0, 0, 128))
img2 = UImageChange.rotate(img2, 45)
img3 = UImageChange.paste(img1, img2, UPoint(50, 50), is_overlay=True)
if img3:
print(img3)
img3.save("test.png")
else:
print("Ошибка при выполнении операции")
В параметре <UImage2> можно также передать объект UImageRGB или UImageGray. В этом случае выполняется только вставка (значение параметра is_overlay не учитывается):
from unicross_image.uhelper import UPoint
from unicross_image.ucolor import UColor
from unicross_image.uimage import UImage
from unicross_image.uimagechange import UImageChange
img1 = UImage.load("foto.png")
img2 = UImage(50, 50, UColor(255, 0, 0)).get_uimagergb()
#img2 = UImage(50, 50, UColor(255, 0, 0)).get_uimagegray()
img3 = UImageChange.paste(img1, img2, UPoint(50, 50))
if img3:
print(img3)
img3.save("test.png")
else:
print("Ошибка при выполнении операции")
Если библиотека Pillow недоступна, то метод paste() передает управление статическому методу paste_im(), который выполняет аналогичную операцию с помощью библиотеки ImageMagick. Этот метод можно вызвать непосредственно. Формат метода:
UImageChange.paste_im(<UImage1>, <UImage2>, <UPoint>, is_overlay=False)
В первых двух параметрах указываются объекты UImage. Третий параметр задает координаты точки вставки изображения <UImage2> в изображение <UImage1> в виде объекта UPoint. Если в параметре is_overlay указано значение False (значение по умолчанию), то производится вставка с заменой пикселей, а если True — то выполняется наложение с учетом альфа-канала. Метод возвращает объект UImage или значение None в случае ошибки. Пример вставки одного изображения в другое:
from unicross_image.uhelper import UPoint
from unicross_image.ucolor import UColor
from unicross_image.uimage import UImage
from unicross_image.uimagechange import UImageChange
img1 = UImage.load("foto.png")
img2 = UImage(50, 50, UColor(255, 0, 0, 128))
img2 = UImageChange.rotate(img2, 45)
img3 = UImageChange.paste_im(img1, img2, UPoint(50, 50))
if img3:
print(img3)
img3.save("test.png")
else:
print("Ошибка при выполнении операции")
Пример наложения полупрозрачного изображения:
from unicross_image.uhelper import UPoint
from unicross_image.ucolor import UColor
from unicross_image.uimage import UImage
from unicross_image.uimagechange import UImageChange
img1 = UImage.load("foto.png")
img2 = UImage(50, 50, UColor(255, 0, 0, 128))
img2 = UImageChange.rotate(img2, 45)
img3 = UImageChange.paste_im(img1, img2, UPoint(50, 50), is_overlay=True)
if img3:
print(img3)
img3.save("test.png")
else:
print("Ошибка при выполнении операции")
В параметре <UImage2> можно также передать объект UImageRGB или UImageGray:
from unicross_image.uhelper import UPoint
from unicross_image.ucolor import UColor
from unicross_image.uimage import UImage
from unicross_image.uimagechange import UImageChange
img1 = UImage.load("foto.png")
img2 = UImage(50, 50, UColor(255, 0, 0)).get_uimagergb()
#img2 = UImage(50, 50, UColor(255, 0, 0)).get_uimagegray()
img3 = UImageChange.paste_im(img1, img2, UPoint(50, 50))
if img3:
print(img3)
img3.save("test.png")
else:
print("Ошибка при выполнении операции")
Наложение одного изображения на другое
Статический метод composite_im() позволяет наложить одно изображение на другое в различных режимах с учетом альфа-канала. Операция выполняется с помощью библиотеки ImageMagick. Формат метода:
UImageChange.composite_im(<UImage1>, <UImage2>, <UPoint>,
compose="SrcOver")
В первых двух параметрах указываются объекты UImage. Третий параметр задает координаты точки вставки изображения <UImage2> в изображение <UImage1> в виде объекта UPoint. Параметр compose позволяет указать режим наложения в виде одного из следующих значений:
"SrcOver" (значение по умолчанию), "Atop", "Blend",
"Blur", "Bumpmap", "ChangeMask", "Clear", "ColorBurn",
"ColorDodge", "Colorize", "CopyAlpha", "CopyBlack", "CopyBlue",
"Copy", "CopyCyan", "CopyGreen", "CopyMagenta", "CopyRed",
"CopyYellow", "Darken", "DarkenIntensity", "Difference",
"Displace", "Dissolve", "Distort", "DivideDst", "DivideSrc",
"DstAtop", "Dst", "DstIn", "DstOut", "DstOver", "Exclusion",
"Freeze", "HardLight", "HardMix", "Hue", "In", "Intensity",
"Interpolate", "LightenIntensity", "Lighten", "LinearBurn",
"LinearDodge", "LinearLight", "Luminize", "Mathematics",
"MinusDst", "MinusSrc", "Modulate", "ModulusAdd",
"ModulusSubtract", "Multiply", "Negate", "None", "Out",
"Overlay", "Over", "PegtopLight", "PinLight", "Plus",
"Reflect", "Replace", "RMSE", "Saturate", "Screen",
"SoftBurn", "SoftDodge", "SoftLight", "SrcAtop", "SrcIn",
"SrcOut", "Src", "Stamp", "Stereo", "VividLight", "Xor"
Подробное описание режимов наложения можно найти в документации к библиотеке ImageMagick. Метод возвращает объект UImage или значение None в случае ошибки. Пример:
from unicross_image.uhelper import UPoint
from unicross_image.ucolor import UColor
from unicross_image.uimage import UImage
from unicross_image.uimagechange import UImageChange
img1 = UImage.load("foto.png")
img2 = UImage(50, 50, UColor(255, 0, 0, 128))
img2 = UImageChange.rotate(img2, 45)
img3 = UImageChange.composite_im(img1, img2, UPoint(50, 50),
compose="SrcOver")
if img3:
print(img3)
img3.save("test.png")
else:
print("Ошибка при выполнении операции")
В параметре <UImage2> можно также передать объект UImageRGB или UImageGray:
from unicross_image.uhelper import UPoint
from unicross_image.ucolor import UColor
from unicross_image.uimage import UImage
from unicross_image.uimagechange import UImageChange
img1 = UImage.load("foto.png")
img2 = UImage(50, 50, UColor(255, 0, 0)).get_uimagergb()
#img2 = UImage(50, 50, UColor(255, 0, 0)).get_uimagegray()
img3 = UImageChange.composite_im(img1, img2, UPoint(50, 50))
if img3:
print(img3)
img3.save("test.png")
else:
print("Ошибка при выполнении операции")
Класс входит в состав графической библиотеки UImage для Python 3. Описание библиотеки UImage