libpng

Официальная эталонная библиотека для работы с изображениями в формате PNG (Portable Network Graphics). Она предоставляет полный набор функций для чтения, записи и обработки PNG-изображений, обеспечивая поддержку всех возможностей формата, включая альфа-канал, палитры, различные цветовые пространства и метаданные. Библиотека широко используется в графических приложениях, веб-браузерах и операционных системах благодаря своей надежности и строгому соответствию стандартам PNG.

Особенности

  • полная поддержка спецификации PNG (Portable Network Graphics) и всех её расширений;
  • возможность чтения и записи изображений с различными цветовыми типами (grayscale, RGB, palette, alpha channel);
  • поддержка прогрессивной развертки (interlacing) для постепенной загрузки изображений;
  • работа с метаданными (текстовые блоки, временные метки, цветовые профили ICC, sRGB);
  • высокопроизводительные алгоритмы сжатия и распаковки с использованием zlib.

Основные компоненты

libpng предоставляет два основных интерфейса: простой (simple) для базовых операций и расширенный (advanced) для полного контроля над процессом чтения/записи (подробнее с документацией можно ознакомиться здесь).

Инициализация и управление структурой PNG

Библиотека использует структуры png_struct и png_info для управления состоянием чтения или записи PNG-файла. Эти структуры содержат всю необходимую информацию об изображении и параметрах обработки.

Основные функции инициализации:

  • png_create_read_struct() и png_create_write_struct() — создание структур для чтения и записи;
  • png_create_info_struct() — создание структуры информации об изображении;
  • png_destroy_read_struct() и png_destroy_write_struct() — освобождение ресурсов;
  • png_init_io() — связывание структур PNG с файловым потоком (FILE*);
  • png_set_read_fn() и png_set_write_fn() — использование пользовательских функций ввода-вывода.

Чтение PNG-изображений

Библиотека предоставляет функции для чтения заголовка PNG, получения информации об изображении и декодирования пиксельных данных. Поддерживается как построчное чтение, так и чтение всего изображения сразу.

Функции чтения изображений:

  • png_read_info() — чтение заголовка и подготовка к декодированию данных;
  • png_read_image() — чтение всего изображения в память (массив строк);
  • png_read_rows() — чтение изображения построчно (для потоковой обработки);
  • png_read_end() — завершение чтения после обработки всех данных;
  • png_get_IHDR() — получение основных параметров изображения (ширина, высота, глубина цвета, тип цвета);
  • png_get_valid() — проверка наличия дополнительных блоков (например, альфа-канала).

Запись PNG-изображений

libpng позволяет создавать PNG-файлы с полным контролем над параметрами изображения. Поддерживается настройка формата данных, сжатия и дополнительных блоков.

Функции записи изображений:

  • png_set_IHDR() — установка основных параметров изображения;
  • png_write_info() — запись заголовка PNG;
  • png_write_image() — запись всего изображения;
  • png_write_rows() — запись изображения построчно;
  • png_write_end() — завершение записи и добавление конечного маркера;
  • png_set_compression_level() — установка уровня сжатия (0–9).

Преобразование форматов и цветовых пространств

Библиотека предоставляет широкие возможности для преобразования данных изображения во время чтения или записи. Это включает изменение глубины цвета, добавление или удаление альфа-канала, преобразование палитровых изображений в RGB и другие преобразования.

Функции преобразования:

  • png_set_expand() — расширение палитровых изображений до RGB и grayscale до 8 бит;
  • png_set_gray_to_rgb() — преобразование grayscale в RGB;
  • png_set_rgb_to_gray() — преобразование RGB в grayscale;
  • png_set_strip_alpha() — удаление альфа-канала;
  • png_set_add_alpha() — добавление альфа-канала;
  • png_set_packing() и png_set_packswap() — упаковка и изменение порядка бит для изображений с глубиной менее 8 бит;
  • png_set_swap() и png_set_bgr() — изменение порядка байт и каналов.

Работа с метаданными и дополнительными блоками

PNG поддерживает различные типы дополнительных блоков (chunks), которые могут содержать метаданные. libpng предоставляет API для чтения и записи этих блоков, включая текстовую информацию, цветовые профили и временные метки.

Функции работы с метаданными:

  • png_get_text() и png_set_text() — чтение и запись текстовых блоков (tEXt, zTXt, iTXt);
  • png_get_tIME() и png_set_tIME() — работа с временными метками;
  • png_get_iCCP() и png_set_iCCP() — чтение и запись ICC-профилей;
  • png_get_sRGB() и png_set_sRGB() — работа с информацией о цветовом пространстве sRGB;
  • png_get_pHYs() и png_set_pHYs() — получение и установка физических размеров пикселя (разрешение);
  • png_get_hIST() и png_set_hIST() — работа с гистограммой для палитровых изображений.

Обработка ошибок и диагностика

libpng включает развитую систему обработки ошибок, которая позволяет приложениям корректно реагировать на проблемы при чтении или записи PNG-файлов. Библиотека также предоставляет средства для отладки и получения диагностической информации.

Функции обработки ошибок и диагностики:

  • Установка пользовательских функций обработки ошибок через png_set_error_fn();
  • png_get_error_ptr() — получение указателя на пользовательские данные для обработки ошибок;
  • png_set_benign_errors() — игнорирование некритичных ошибок (например, неизвестных блоков);
  • png_get_copyright(), png_get_header_version(), png_get_libpng_ver() — получение информации о версии библиотеки.

Интеграция с другими библиотеками

libpng часто используется в сочетании с другими библиотеками обработки изображений, такими как libjpeg, libtiff, и графическими интерфейсами, такими как GTK, Qt, SDL.

Точки интеграции:

  • Использование в графических редакторах (GIMP, Photoshop) и просмотрщиках изображений;
  • Интеграция с веб-браузерами для отображения PNG-изображений;
  • Поддержка в языках программирования через обертки (Python через Pillow, Java через ImageIO, Perl, Ruby и др.);
  • Использование в игровых движках для загрузки текстур.

Использование в проекте

Документация по использованию Conan-пакетов для разработки приложений для ОС Аврора.

На сервере Conan библиотеки заранее собраны и размещены под различные версии ОС Аврора 4 и ОC Аврора 5. Для данных версий представлены архитектуры armv7hl, aarch64 и x84_64.

Библиотеку можно использовать в проекте с помощью данного conanfile.py

from conan import ConanFile

class Application(ConanFile):
    settings = "os", "compiler", "arch", "build_type"
    generators = "PkgConfigDeps"

    requires = (
        "libpng/1.6.44@aurora",
    )    

Процесс локальной сборки описан в документации.

libpng

libpng is the official PNG file format reference library.
Лицензия
libpng-2.0
Версия
Домашняя страница
Скачать
armv7
217.64 Kb
MD5: a9645394705058c62da123c2654689fd
Updated: 03.09.2025, 18:12:36
x86_64
236.92 Kb
MD5: 6cb0016911f1733a3d46d7d05f5e1533
Updated: 03.09.2025, 18:12:40
armv8
226.32 Kb
MD5: d0ec7a75a80af59df21679a071aa7372
Updated: 03.09.2025, 18:12:29
Использование в проекте

Мы используем cookies для персонализации сайта и его более удобного использования. Вы можете запретить cookies в настройках браузера.

Пожалуйста ознакомьтесь с политикой использования cookies.