Главная » 2025 » Ноябрь » 23 » Чтение и запись графических файлов .uimage
19:54
Чтение и запись графических файлов .uimage

Чтение и запись графических файлов с расширением .uimage

Библиотека UImage поддерживает свой собственный формат хранения изображения в файлах с расширением .uimage. Этот формат позволяет сохранить изображения, содержащие один, три или четыре канала, в несжатом виде. Все строки двумерной матрицы выстраиваются в одну строку. Порядок следования каналов: G, RGB или RGBA в зависимости от количества каналов. Каждый компонент цвета кодируется одним байтом.

Минус несжатого формата очевиден — это большой размер файла. Но есть и огромный плюс. Несжатый вид позволяет читать и записывать изображения любым языком программирования, поддерживающим бинарные данные.

Для изображений с одним каналом формат .uimage почти аналогичен бинарному формату PGM. Для изображений с тремя каналами формат .uimage почти аналогичен бинарному формату PPM. А вот для изображений с четырьмя каналами из стандартных форматов знаю лишь RAW RGBA из библиотеки .ImageMagick. Но этот формат ничего не знает ни о ширине изображения, ни о его высоте. Файл формата .uimage хранит всю необходимую информацию и даже теоретически данные можно сжать.. Но на данный момент это не реализовано.

Формат файла .uimage

Файл .uimage имеет следующий формат:

  • name — в первых шести байтах записывается название формата — строка UImage (регистр символов не имеет значения);
  • width — в следующих двух байтах хранится ширина изображения (число от 1 до 8000). Порядок выравнивания в Python: width.to_bytes(2, "big");
  • height — следующие два байта кодируют высоту изображения (число от 1 до 8000). Порядок выравнивания в Python: height.to_bytes(2, "big");
  • num_channels — последующий байт хранит количество каналов изображения в виде числа 1, 3 или 4;
  • type_img — следующий байт сейчас хранит только число 1, которое означает, что последующие данные кодируются одним байтом;
  • data — последующие байты кодируют пиксели изображения. Длина данных высчитывается по формуле:
if type_img == 1:
    data_len = width * height * num_channels

Для сохранения изображения в файл .uimage в библиотеке UImage предназначены методы save_uimage_rgba(), save_uimage_rgb() и save_uimage_gray() объекта изображения. Загрузить изображение из файла .uimage позволяет метод load_uimage(). Пример:

from unicross_image.uimagergb import UImageRGB

img = UImageRGB.load("foto.jpg")
if img:
    print(img) # UImageRGB(width=500, height=333)
    # Сохранение .uimage
    img.save_uimage_rgb("foto2.uimage")
else:
    print("Не удалось загрузить изображение")

# Загрузка .uimage
img = UImageRGB.load_uimage("foto2.uimage")
if img:
    print(img) # UImageRGB(width=500, height=333)
else:
    print("Не удалось загрузить изображение")

Формат файла определяется по расширению файла, поэтому можно просто использовать методы load() и save() без явного указания типа файла:

from unicross_image.uimagergb import UImageRGB

img = UImageRGB.load("foto.jpg")
if img:
    print(img) # UImageRGB(width=500, height=333)
    # Сохранение .uimage
    img.save("foto2.uimage")
else:
    print("Не удалось загрузить изображение")

# Загрузка .uimage
img = UImageRGB.load("foto2.uimage")
if img:
    print(img) # UImageRGB(width=500, height=333)
else:
    print("Не удалось загрузить изображение")

Сохранение изображения PIL в файл .uimage

Класс UHelperPIL предназначен для выполнения загрузки и сохранения файла с расширением .uimage для библиотеки PIL. Инструкция импорта:

from unicross_image.uhelper_pil import UHelperPIL

Обратите внимание, если библиотека PIL недоступна, то подключение модуля приведет к исключению.

Сохранить изображение PIL в формате .uimage позволяет статический метод save_uimage(). Формат метода:

save_uimage(img_pil, <Название файла с расширением .uimage>)

В первом параметре указывается объект Image из библиотеки PIL, а во втором параметре — название файла с расширением .uimage. Если объект Image в форматах "RGBA", "RGB" или  "L", то формат сохраняется. В противном случае производится преобразование формата в "RGBA". Если операция успешно выполнена, то метод вернет значение True, а в противном случае — значение False. Пример:

from PIL import Image
from unicross_image.uhelper_pil import UHelperPIL

img = Image.open("foto.jpg")
print(img.size)                                     # (500, 333)
print(img.mode)                                     # RGB
print(UHelperPIL.save_uimage(img, "foto.uimage"))   # True
# Добавление альфа-канала
img2 = img.convert("RGBA")
print(img2.mode)                                    # RGBA
print(UHelperPIL.save_uimage(img2, "foto2.uimage")) # True
# Преобразование в оттенки серого
img3 = img.convert("L")
print(img3.mode)                                    # L
print(UHelperPIL.save_uimage(img3, "foto3.uimage")) # True

Загрузка изображения из файла .uimage

Загрузить изображение из файла в формате .uimage и преобразовать его в объект Image из библиотеки PIL позволяет статический метод load_uimage(). Формат метода:

load_uimage(<Название файла с расширением .uimage>)

В качестве параметра указывается название файла с расширением .uimage. Если операция успешно выполнена, то метод вернет объект Image из библиотеки PIL, а в противном случае — значение None. Пример:

from unicross_image.uhelper_pil import UHelperPIL

img = UHelperPIL.load_uimage("foto.uimage")
if img is not None:
    print(img.size)                     # (500, 333)
    print(img.mode)                     # RGB

img2 = UHelperPIL.load_uimage("foto2.uimage")
if img2 is not None:
    print(img2.size)                     # (500, 333)
    print(img2.mode)                     # RGBA

img3 = UHelperPIL.load_uimage("foto3.uimage")
if img3 is not None:
    print(img3.size)                     # (500, 333)
    print(img3.mode)                     # L

Класс входит в состав графической библиотеки UImage для Python 3. Описание библиотеки UImage

Категория: UImage | Просмотров: 5 | Добавил: unicross | Теги: UImage, UHelperPIL, PIL | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Категории раздела
Списки слов [10]
Списки слов и словари
OCR [4]
Оптическое распознавание символов
UImage [18]
Графическая библиотека для Python
Программы [4]
Полезные программы
Прочее [3]
Другие темы
Календарь
«  Ноябрь 2025  »
Пн Вт Ср Чт Пт Сб Вс
     12
3456789
10111213141516
17181920212223
24252627282930
Архив записей