Современный веб и мобильный мир активно переходят на новые, более эффективные форматы изображений, такие как AVIF и HEIC. AVIF (AV1 Image File Format) предлагает превосходное качество при меньшем размере файла по сравнению с JPEG, а HEIC (High Efficiency Image Container) широко используется на устройствах Apple для хранения фотографий и видео, обеспечивая значительную экономию места. Однако, поддержка этих форматов в классических инструментах разработки, особенно в среде Lazarus и Delphi, зачастую оставляет желать лучшего.
Эта статья посвящена возможности работы с AVIF и HEIC в Lazarus, а также ознакомит с новым компонентом, упрощающим эту задачу.
Проблема: Отсутствие встроенной поддержки
Стандартные библиотеки Object Pascal, используемые в Lazarus и Delphi, не содержат встроенной поддержки для декодирования и кодирования AVIF и HEIC. Это означает, что для работы с этими форматами необходимо использовать внешние библиотеки или API. Прямая работа с бинарными данными формата может быть сложной и трудоемкой, требующей глубокого понимания спецификаций этих форматов.
Решение: Компонент ImageCodec
К счастью, разработаны компоненты, которые решают эту проблему. Один из таких – ImageCodec, который предоставляет удобный интерфейс для работы с различными форматами изображений, включая AVIF и HEIC. Этот компонент является оберткой над библиотеками libavif (для AVIF) и libheif (для HEIC), что позволяет использовать их функциональность из Object Pascal кода.
Установка и настройка ImageCodec
Установка ImageCodec обычно включает в себя следующие шаги:
Установка libavif и libheif: Эти библиотеки необходимо установить отдельно. Способ установки зависит от вашей операционной системы. Например, в Linux можно использовать менеджер пакетов (apt, yum, etc.), а в Windows – скачав предварительно скомпилированные библиотеки. Важно убедиться, что библиотеки доступны в системе и находятся в пути, доступном для компилятора.
Подключение ImageCodec в Lazarus: Скачайте исходный код компонента ImageCodec (обычно доступен на GitHub или других ресурсах). Добавьте файлы компонента в ваш проект Lazarus. В настройках проекта укажите пути к заголовочным файлам и библиотекам libavif и libheif.
Настройка uses: В вашем коде добавьте uses ImageCodec;
Пример использования ImageCodec для чтения AVIF изображения:
uses
System.SysUtils,
System.Classes,
ImageCodec;
procedure ReadAVIFImage(const FileName: string; var Image: TBitmap);
var
AVIFDecoder: TAVIFDecoder;
begin
AVIFDecoder := TAVIFDecoder.Create;
try
if AVIFDecoder.LoadFromFile(FileName) then
begin
Image := AVIFDecoder.GetBitmap;
end
else
begin
// Обработка ошибки
ShowMessage('Не удалось загрузить AVIF изображение: ' + FileName);
end;
finally
AVIFDecoder.Free;
end;
end;
// Пример использования
procedure TForm1.Button1Click(Sender: TObject);
var
MyBitmap: TBitmap;
begin
ReadAVIFImage('my_image.avif', MyBitmap);
if MyBitmap <> nil then
begin
Image1.Bitmap.Assign(MyBitmap);
MyBitmap.Free;
end;
end;
Пример использования ImageCodec для записи HEIC изображения:
uses
System.SysUtils,
System.Classes,
ImageCodec;
procedure WriteHEICImage(const FileName: string; const Image: TBitmap);
var
HEICEncoder: THEICEncoder;
begin
HEICEncoder := THEICEncoder.Create;
try
if HEICEncoder.EncodeBitmap(Image, FileName) then
begin
// Успешная запись
end
else
begin
// Обработка ошибки
ShowMessage('Не удалось сохранить HEIC изображение: ' + FileName);
end;
finally
HEICEncoder.Free;
end;
end;
// Пример использования
procedure TForm1.Button2Click(Sender: TObject);
var
MyBitmap: TBitmap;
begin
MyBitmap := TBitmap.Create;
try
MyBitmap.LoadFromFile('my_image.bmp'); // Загрузка изображения для сохранения
WriteHEICImage('my_image.heic', MyBitmap);
finally
MyBitmap.Free;
end;
end;
Альтернативные решения:
Хотя ImageCodec является удобным решением, существуют и альтернативные подходы:
Использование сторонних библиотек напрямую: Можно работать с libavif и libheif напрямую, используя C++ API и Foreign Function Interface (FFI) в Object Pascal. Этот подход предоставляет больше контроля, но требует более глубоких знаний C++ и Object Pascal FFI.
Использование графических библиотек, поддерживающих AVIF/HEIC: Некоторые графические библиотеки, такие как Gdk (используемая в GTK) или Qt, могут иметь встроенную поддержку AVIF и HEIC. Однако, интеграция таких библиотек в Lazarus/Delphi проект может быть сложной.
Использование онлайн API: Можно использовать онлайн API для конвертации изображений из AVIF/HEIC в другие форматы, такие как JPEG или PNG. Этот подход позволяет избежать необходимости установки внешних библиотек, но требует подключения к интернету и может быть платным.
Заключение
Работа с современными форматами изображений, такими как AVIF и HEIC, в Lazarus и Delphi становится все более важной. Компонент ImageCodec предоставляет удобный и эффективный способ интеграции этих форматов в ваши приложения. Альтернативные решения также существуют, но требуют больше усилий и знаний. Выбор оптимального подхода зависит от ваших конкретных потребностей и уровня опыта. Надеемся, что эта статья поможет вам успешно работать с AVIF и HEIC в ваших проектах на Object Pascal.
Статья посвящена работе с современными форматами изображений AVIF и HEIC в среде Lazarus и Delphi, представляя компонент ImageCodec как удобное решение для упрощения этой задачи.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.