UImage: обрезка изображения
Статический метод crop() из класса UImageChange считывает прямоугольную область из исходного изображения. Формат метода:
UImageChange.crop(<UImage>, <URect>)
В качестве первого параметра указывается объект UImage. Второй параметр задает координаты и размеры прямоугольной области в виде объекта URect. Метод возвращает объект UImage или значение None в случае ошибки. Размеры изображения будут соответствовать размерам области пересечения, а не точным размерам объекта URect. Если пересечения нет, то метод вернет значение None. Операция выполняется с помощью библиотеки Pillow. Пример:
from unicross_image.uhelper import URect
from unicross_image.uimage import UImage
from unicross_image.uimagechange import UImageChange
img = UImage.load("foto.png")
print(img) # UImage(width=500, height=333)
r = URect(0, 0, 200, 100)
img2 = UImageChange.crop(img, r)
if img2:
print(img2) # UImage(width=200, height=100)
img2.save("test.png")
else:
print("Ошибка при выполнении операции")
Если библиотека Pillow недоступна, то метод crop() передает управление статическому методу crop_im(), который выполняет аналогичную операцию с помощью библиотеки ImageMagick. Этот метод можно вызвать непосредственно. Формат метода:
UImageChange.crop_im(<UImage>, <URect>)
В качестве первого параметра указывается объект UImage. Второй параметр задает координаты и размеры прямоугольной области в виде объекта URect. Метод возвращает объект UImage или значение None в случае ошибки. Операция выполняется с помощью библиотеки ImageMagick. Пример:
from unicross_image.uhelper import URect
from unicross_image.uimage import UImage
from unicross_image.uimagechange import UImageChange
img = UImage.load("foto.png")
print(img) # UImage(width=500, height=333)
r = URect(0, 0, 200, 100)
img2 = UImageChange.crop_im(img, r)
if img2:
print(img2) # UImage(width=200, height=100)
img2.save("test.png")
else:
print("Ошибка при выполнении операции")
Обрезка лишних одноцветных границ
Обрезать лишние одноцветные границы позволяет статический метод trim() из класса UImageChange. Формат метода:
UImageChange.trim(<UImage>, color=None)
В качестве первого параметра указывается объект UImage. Параметр color задает цвет границы в виде объекта UColor. Если параметр не задан или имеет значение None, то цвет границы будет белым. Метод возвращает объект UImage или значение None в случае ошибки. Обрезка изображения производится с помощью метода crop(). Если библиотека Pillow недоступна, то обрезка выполняется с помощью метода crop_im(). Пример:
from unicross_image.ucolor import UColor
from unicross_image.uimage import UImage
from unicross_image.uimagechange import UImageChange
img = UImage.load("foto_border.png")
print(img) # UImage(width=661, height=441)
img2 = UImageChange.trim(img, UColor("white"))
if img2:
print(img2) # UImage(width=500, height=333)
img2.save("test.png")
else:
print("Ошибка при выполнении операции")
Вместо метода trim() можно воспользоваться статическим методом trim_im(), который выполняет аналогичную операцию с помощью библиотеки ImageMagick. Формат метода:
UImageChange.trim_im(<UImage>, color=None, distance=0)
В качестве первого параметра указывается объект UImage. Параметр color задает цвет границы в виде объекта UColor. Если параметр color имеет значение None, то используются цвета из угловых пикселей. Обратите внимание, такая ситуация может привести к неожиданным результатам. При отсутствии границы с какой-либо стороны обрезано будет что-то лишнее, совпадающее с цветом углового пикселя. Лучше явно задавать цвет границы, если, конечно, цвет известен заранее.
Необязательной параметр distance позволяет указать в процентах (от 1 до 50) на сколько цвет может отличаться от указанного цвета в параметре color. Значение 0 (значение по умолчанию) задает точный цвет.
Метод возвращает объект UImage или значение None в случае ошибки. Пример:
from unicross_image.ucolor import UColor
from unicross_image.uimage import UImage
from unicross_image.uimagechange import UImageChange
img = UImage.load("foto_border.png")
print(img) # UImage(width=661, height=441)
img2 = UImageChange.trim_im(img, UColor("white"))
if img2:
print(img2) # UImage(width=500, height=333)
img2.save("test.png")
else:
print("Ошибка при выполнении операции")
Обратите внимание, метод trim(), при отсутствии библиотеки Pillow, не передает управление методу trim_im(). Эти методы не зависят друг от друга и выполняют операцию разными способами. При использовании метода trim() поиск границ выполняется с помощью Python, что может выполняться медленно при больших размерах изображения. При использовании метода trim_im() операция целиком выполняется с помощью библиотеки ImageMagick.
Класс входит в состав графической библиотеки UImage для Python 3. Описание библиотеки UImage