Класс UImageGray: загрузка изображения из файла
Загрузить изображение из файла позволяет статический метод load(). Формат метода:
В качестве параметра указывается путь к файлу. Если загрузка выполнена успешно, то метод вернет объект UImageGray, а в противном случае — значение None. Пример:
from unicross_image.uimagegray import UImageGray
img = UImageGray.load("foto.jpg")
if img:
print(img) # UImageGray(width=500, height=333)
else:
print("Не удалось загрузить изображение")
После загрузки изображения из файла производится преобразование в оттенки серого. Способ преобразования зависит от метода загрузки. Если загрузка выполняется с помощью библиотеки PIL, то изображение преобразуется в режим L средствами этой библиотеки. Если загрузка выполняется с помощью библиотеки ImageMagick, то изображение преобразуется в режим LinearGray средствами этой библиотеки. В остальных случаях вычисление выполняется по следующей формуле:
value = int(round(r * 0.298912 + g * 0.586611 + b * 0.114478))
Если нужно, чтобы преобразование всегда выполнялось по этой формуле, то следует загрузить изображение с помощью класса UImageRGB, а затем преобразовать его в оттенки серого с помощью метода get_uimagegray():
from unicross_image.uimagergb import UImageRGB
img = UImageRGB.load("foto.jpg")
if img:
# Преобразование в UImageGray
img_gray = img.get_uimagegray()
if img_gray:
print(img_gray) # UImageGray(width=500, height=333)
else:
print("Не удалось преобразовать в оттенки серого")
else:
print("Не удалось загрузить изображение")
Без сторонних библиотек метод load() может загрузить файлы в следующих форматах:
.uimage — собственный формат файла изображения библиотеки UImage. Если изображение содержит 1 канал, то оно загружается как есть с максимальной скоростью. Если изображение содержит три или четыре канала, то выполняется преобразование в оттенки серого (альфа-канал отбрасывается);
.ppm — бинарный формат (P6) файла PPM. После загрузки изображения из файла выполняется преобразование в оттенки серого;
.pgm — бинарный формат (P5) файла PGM. Изображение загружается как есть с максимальной скоростью.
Если загружаемый файл имеет расширение .uimage, то методы load() и load_im() автоматически передают управление статическому методу load_uimage(). Этот метод можно вызывать непосредственно. Формат метода:
UImageGray.load_uimage(<Путь>)
В качестве параметра указывается путь к файлу с расширением .uimage. Если загрузка выполнена успешно, то метод вернет объект UImageGray, а в противном случае — значение None. Если изображение содержит 1 канал, то оно загружается как есть с максимальной скоростью. Если изображение содержит три или четыре канала, то выполняется преобразование в оттенки серого (альфа-канал отбрасывается). Пример:
from unicross_image.uimagegray import UImageGray
img = UImageGray.load_uimage("foto.uimage")
print(img) # UImageGray(width=500, height=333)
Если загружаемый файл имеет расширение .ppm, то методы load() и load_im() автоматически передают управление статическому методу load_ppm_p6(). Этот метод можно вызывать непосредственно для загрузки бинарного формата (P6) файла PPM. Формат метода:
UImageGray.load_ppm_p6(<Путь>)
В качестве параметра указывается путь к файлу с расширением .ppm. Если загрузка выполнена успешно, то метод вернет объект UImageGray, а в противном случае — значение None. После загрузки изображения из файла выполняется преобразование в оттенки серого. Пример:
img = UImageGray.load_ppm_p6("foto.ppm")
print(img) # UImageGray(width=500, height=333)
Если загружаемый файл имеет расширение .pgm, то методы load() и load_im() автоматически передают управление статическому методу load_pgm_p5(). Этот метод можно вызывать непосредственно для загрузки бинарного формата (P5) файла PGM. Формат метода:
UImageGray.load_pgm_p5(<Путь>)
В качестве параметра указывается путь к файлу с расширением .pgm. Если загрузка выполнена успешно, то метод вернет объект UImageGray, а в противном случае — значение None. Изображение загружается как есть с максимальной скоростью. Пример:
img = UImageGray.load("foto.jpg")
img.save_pgm_p5("foto.pgm")
img = UImageGray.load_pgm_p5("foto.pgm")
print(img) # UImageGray(width=500, height=333)
Загрузка изображения с помощью PIL (PILLOW)
Если доступна библиотека PIL (PILLOW), то с помощью метода load() можно загрузить изображения в форматах PNG, GIF, JPEG, BMP, TIFF и др. Полный список форматов доступен по ссылке:
https://pillow.readthedocs.io/en/stable/handbook/image-file-formats.html
После загрузки изображения из файла производится преобразование в режим L средствами библиотеки PIL.
Установить библиотеку PIL (PILLOW) можно с помощью команды:
Загрузка изображения с помощью ImageMagick
Если библиотека PIL (PILLOW) недоступна, то метод load() пытается загрузить изображение тех же самых форматов с помощью библиотеки ImageMagick. После загрузки изображения из файла производится преобразование в режим LinearGray средствами библиотеки ImageMagick.
Увидеть путь к библиотеке позволяет метод get_image_magick_path() объекта изображения:
img = UImageGray(1, 1)
print(img.get_image_magick_path())
# C:\ImageMagick\magick.exe
Следует учитывать, что взаимодействие с библиотекой ImageMagick выполняется через командную строку и файловую систему. Это не очень эффективно при выполнении простых операций, но позволяет выполнить сложную операцию с помощью компилируемого языка программирования. В результате чего можно даже повысить производительность. С учетом сказанного важно соблюсти следующие требования:
- каталог
unicross_image с файлами библиотеки UImage должен быть доступен для записи и чтения без прав администратора. Кроме того, в пути не должно быть русских букв. Еще раз. Нельзя размещать библиотеку в системных папках и в папках с русским буквами в пути;
- в пути к файлу
magick.exe не должно быть русских букв.
Получить путь к каталогу для временных файлов позволяет метод get_tmp_path(). Пример:
img = UImageGray(1, 1)
print(img.get_tmp_path())
# D:\UImage\unicross_image\tmp
Если библиотека PIL (PILLOW) недоступна, то метод load() автоматически передает управлению методу load_im(), который пытается загрузить файл с помощью библиотеки ImageMagick. Этот метод можно вызывать непосредственно, особенно, если нужно загрузить файл в формате, который не поддерживает библиотека PIL. Формат метода:
UImageGray.load_im(<Путь>, auto_orient_jpg=True)
В качестве первого параметра указывается путь к файлу. Второй параметр позволяет определить ориентацию JPEG-файла и автоматически повернуть изображение в случае необходимости. Значение False отключает этот функционал. Если загрузка выполнена успешно, то метод вернет объект UImageGray, а в противном случае — значение None.
Если загружаемый файл имеет расширение .uimage, то метод load_im() автоматически передаст управление статическому методу load_uimage(). Если загружаемый файл имеет расширение .ppm, то метод load_im() автоматически передаст управление статическому методу load_ppm_p6(). Если загружаемый файл имеет расширение .pgm, то метод load_im() автоматически передаст управление статическому методу load_pgm_p5().
Пример загрузки изображения только с помощью библиотеки ImageMagick:
from unicross_image.uimagegray import UImageGray
img = UImageGray.load_im("foto.jpg")
if img:
print(img) # UImageGray(width=500, height=333)
else:
print("Не удалось загрузить изображение")
Обратите внимание: методы, выполняющие операцию с помощью библиотеки ImageMagick, в конце названия содержат фрагмент "_im".
Загрузка изображения из файла в формате RAW GRAY
Для взаимодействия с библиотекой ImageMagick имеется статический метод load_gray(), позволяющий загрузить изображение из файла в формате RAW GRAY. Этот формат хорошо понимает библиотека ImageMagick. Формат метода:
UImageGray.load_gray(<Ширина>, <Высота>, <Путь>)
Формат RAW GRAY ничего не знает ни о ширине изображения, ни о его высоте. Он содержит только набор байтов. Поэтому в первых двух параметрах нужно явно задать размеры изображения. В третьем параметре указывается путь до файла с расширением .gray. Если загрузка выполнена успешно, то метод вернет объект UImageGray, а в противном случае — значение None. Пример:
from unicross_image.uimagegray import UImageGray
img = UImageGray.load("foto.jpg")
if img:
# Сохранение в формате RAW GRAY
img.save_gray("foto.gray")
# Размеры нужно хранить отдельно
w, h = img.get_size()
# Загрузка из файла в формате RAW GRAY
img2 = UImageGray.load_gray(w, h, "foto.gray")
if img2:
print(img2) # UImageGray(width=500, height=333)
else:
print("Не удалось загрузить изображение")
else:
print("Не удалось загрузить изображение")
При выполнении операции методом load_gray() библиотека ImageMagick не используется. Иными словами, RAW GRAY это еще один формат, который библиотека UImage позволяет загружать без сторонних библиотек.
Класс входит в состав графической библиотеки UImage для Python 3. Описание библиотеки UImage