Класс UImageRGB: загрузка изображения из файла
Загрузить изображение из файла позволяет статический метод load(). Формат метода:
В качестве параметра указывается путь к файлу. Если загрузка выполнена успешно, то метод вернет объект UImageRGB, а в противном случае — значение None. Пример:
from unicross_image.uimagergb import UImageRGB
img = UImageRGB.load("foto.jpg")
if img:
print(img) # UImageRGB(width=500, height=333)
else:
print("Не удалось загрузить изображение")
Без сторонних библиотек метод load() может загрузить файлы в следующих форматах:
.uimage — собственный формат файла изображения библиотеки UImage. Если изображение содержит 3 канала, то оно загружается как есть с максимальной скоростью. Если изображение содержит один или четыре канала, то выполняется преобразование в формат RGB (альфа-канал отбрасывается);
.ppm — бинарный формат (P6) файла PPM. Изображение загружается как есть с максимальной скоростью.
Если загружаемый файл имеет расширение .uimage, то методы load() и load_im() автоматически передают управление статическому методу load_uimage(). Этот метод можно вызывать непосредственно. Формат метода:
UImageRGB.load_uimage(<Путь>)
В качестве параметра указывается путь к файлу с расширением .uimage. Если загрузка выполнена успешно, то метод вернет объект UImageRGB, а в противном случае — значение None. Если изображение содержит 3 канала, то оно загружается как есть с максимальной скоростью. Если изображение содержит один или четыре канала, то выполняется преобразование в формат RGB (альфа-канал отбрасывается). Пример:
img = UImageRGB.load_uimage("foto.uimage")
print(img) # UImageRGB(width=500, height=333)
Если загружаемый файл имеет расширение .ppm, то методы load() и load_im() автоматически передают управление статическому методу load_ppm_p6(). Этот метод можно вызывать непосредственно для загрузки бинарного формата (P6) файла PPM. Формат метода:
UImageRGB.load_ppm_p6(<Путь>)
В качестве параметра указывается путь к файлу с расширением .ppm. Если загрузка выполнена успешно, то метод вернет объект UImageRGB, а в противном случае — значение None. Пример:
img = UImageRGB.load_ppm_p6("foto.ppm")
print(img) # UImageRGB(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
Если изображение не в формате RGB, то выполняется преобразование.
Установить библиотеку PIL (PILLOW) можно с помощью команды:
Загрузка изображения с помощью ImageMagick
Если библиотека PIL (PILLOW) недоступна, то метод load() пытается загрузить изображение тех же самых форматов с помощью библиотеки ImageMagick. Увидеть путь к библиотеке позволяет метод get_image_magick_path() объекта изображения:
img = UImageRGB(1, 1)
print(img.get_image_magick_path())
# C:\ImageMagick\magick.exe
Следует учитывать, что взаимодействие с библиотекой ImageMagick выполняется через командную строку и файловую систему. Это не очень эффективно при выполнении простых операций, но позволяет выполнить сложную операцию с помощью компилируемого языка программирования. В результате чего можно даже повысить производительность. С учетом сказанного важно соблюсти следующие требования:
- каталог
unicross_image с файлами библиотеки UImage должен быть доступен для записи и чтения без прав администратора. Кроме того, в пути не должно быть русских букв. Еще раз. Нельзя размещать библиотеку в системных папках и в папках с русским буквами в пути;
- в пути к файлу
magick.exe не должно быть русских букв.
Получить путь к каталогу для временных файлов позволяет метод get_tmp_path(). Пример:
img = UImageRGB(1, 1)
print(img.get_tmp_path())
# D:\UImage\unicross_image\tmp
Если библиотека PIL (PILLOW) недоступна, то метод load() автоматически передает управлению методу load_im(), который пытается загрузить файл с помощью библиотеки ImageMagick. Этот метод можно вызывать непосредственно, особенно, если нужно загрузить файл в формате, который не поддерживает библиотека PIL. Формат метода:
UImageRGB.load_im(<Путь>, auto_orient_jpg=True)
В качестве первого параметра указывается путь к файлу. Второй параметр позволяет определить ориентацию JPEG-файла и автоматически повернуть изображение в случае необходимости. Значение False отключает этот функционал. Если загрузка выполнена успешно, то метод вернет объект UImageRGB, а в противном случае — значение None.
Если загружаемый файл имеет расширение .uimage, то метод load_im() автоматически передаст управление статическому методу load_uimage(). Если загружаемый файл имеет расширение .ppm, то метод load_im() автоматически передаст управление статическому методу load_ppm_p6().
Пример загрузки изображения только с помощью библиотеки ImageMagick:
from unicross_image.uimagergb import UImageRGB
img = UImageRGB.load_im("foto.png")
if img:
print(img) # UImageRGB(width=500, height=333)
else:
print("Не удалось загрузить изображение")
Обратите внимание: методы, выполняющие операцию с помощью библиотеки ImageMagick, в конце названия содержат фрагмент "_im".
Загрузка изображения из файла в формате RAW RGB
Для взаимодействия с библиотекой ImageMagick имеется статический метод load_rgb(), позволяющий загрузить изображение из файла в формате RAW RGB. Этот формат хорошо понимает библиотека ImageMagick. Формат метода:
UImageRGB.load_rgb(<Ширина>, <Высота>, <Путь>)
Формат RAW RGB ничего не знает ни о ширине изображения, ни о его высоте. Он содержит только набор байтов в формате RGB. Поэтому в первых двух параметрах нужно явно задать размеры изображения. В третьем параметре указывается путь до файла с расширением .rgb. Если загрузка выполнена успешно, то метод вернет объект UImageRGB, а в противном случае — значение None. Пример:
from unicross_image.uimagergb import UImageRGB
img = UImageRGB.load("foto.jpg")
if img:
# Сохранение в формате RAW RGB
img.save_rgb("foto.rgb")
# Размеры нужно хранить отдельно
w, h = img.get_size()
# Загрузка из файла в формате RAW RGB
img2 = UImageRGB.load_rgb(w, h, "foto.rgb")
if img2:
print(img2) # UImageRGB(width=500, height=333)
else:
print("Не удалось загрузить изображение")
else:
print("Не удалось загрузить изображение")
При выполнении операции методом load_rgb() библиотека ImageMagick не используется. Иными словами, RAW RGB это еще один формат, который библиотека UImage позволяет загружать без сторонних библиотек.
Класс входит в состав графической библиотеки UImage для Python 3. Описание библиотеки UImage