Сохранение в картинки из Delphi / C++ Builder / Lazarus

10.08.2020

BMP, JPEG, TIFF, GIF – самые разнообразные форматы растровых изображений. Давайте-ка разберемся, когда и что лучше использовать.

1. BMP

Прежде всего следует знать, что он не настолько популярен среди пользователей Интернета, так как BMP – это старый формат картинок, с помощью которого сохраняются только растровые изображения, а векторные не поддерживаются.

Размеры формата bmp могут быть разными, в зависимости от качества изображения картинок.

Несмотря на то, что пользователи считают BMP формат устаревшим, его активно используют во многих сферах деятельности. Например, все интерфейсы Windows были созданы на основе этого формата. Почему именно он? Потому что его удобно использовать при создании картинок, которые не теряют качества после их изменений. Зачастую BMP используется в Фотошопе при редактировании картинок, так же подобные изображения легко загружаются в социальные сети и на различные сайты.

Конечно, лучше использовать современные форматы картинок, поскольку они многослойные и способны без технических проблем загрузится на любой сайт. Вместе с тем, они имеют много возможностей для редактирования изображений, да и у них меньший объем файла.

2. JPEG

Формат картинки, который сохраняет в себе запись графического изображения.
Он имеет хорошее качество сжатия для просмотра картинок.
Достоинства данного формата не малы, ведь у пользователя есть некоторые преимущества, такие как: возможность изменения качества и размеров файла, легкость открытия в любом браузере, редакция в любых графических программах, а также маленький вес, который не так много занимает место на компьютерах и прочих носителях. Если не сильно сжимать картинку в формате jpg, её качество полностью не потеряется.

У этого формата есть недостатки, их немного:

А) Нет прозрачности, как например в формате PNG.
Б) Если сильно сжать (изменить размеры картинки) изображение jpg, будет заметно искажение картинки или ее полная потеря.
В) Не рекомендуется редактировать восстановленный файл jpg после сжатия, так как он может потерять качество просмотра.

Несмотря на недостатки формата, его считают наиболее популярным форматом картинок в Интернете и люди им пользуются.

3. TIFF

Известный растровый формат, поддерживающий практически все известные цветовые пространства. Вариант без сжатия практически стал стандартом в полиграфии. Возможно применение различных алгоритмов сжатия без потерь и с потерями.

В файле формата TIFF изображение может храниться в цветовых моделях CMYK, RGB, Lab в режиме индексированных цветов, а также в виде оттенков серого (grayscale). Это позволяет использовать формат для хранения самых разных изображений, применяемых как для подготовки web-графики, так и в полиграфии.

Кроме изображения, в TIFF-файле могут сохраняться каналы прозрачности, позволяющие сохранять прозрачные области изображения или выделения объектов между сеансами работы.

Еще одна особенность формата TIFF — возможность сохранения нескольких изображений, имеющих собственные наборы атрибутов и свойств (тегов) в одном файле. Это делает TIFF похожим на формат GIF, но без возможности создания анимированных изображений.

Распространенность этого формата позволяет легко переносить изображения между программами и аппаратными платформами.

4. GIF

Этот формат файлов обладает небольшим размером и поддерживает простейшую анимацию, т.е. смена кадров в одном файле.

GIF имеет распространение в сфере создания баннеров, а также графической оболочки видеоконтента.

Основным преимуществом считается сжатие данных без явной потери качества при глубине до 256 цветов. Анимированные изображения состоят из некоторого числа статичных кадров и данных о требуемом времени демонстрации того или иного кадра.

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

С помощью Gif-формата можно уменьшить объем картинки, что он очень хорошо влияет например, на скорость загрузки страниц сайта в Интернете.

5. SVG

Это уже векторный формат изображения. Если коротко, то при его помощи верстаются сайты. Он представляет собой текстовый файл XML, который наполнен тегами.

Данный формат не теряет качество изображения при масштабировании и кадрировании.

Более подробно о плюсах и минусах SVG разрешения, а также о его сохранении из Delphi можно посмотреть тут.

Теперь мы знаем,  при каких условиях лучше использовать конкретный формат.

А как же можно будет сохранить эти форматы на Delphi / Lazarus?

Легко! Понятно, что это не первоочередная задача, вариантов множество. Для нас интересна возможность с FastReport VCL, потому что мы можем подготовить документ, афишу, баннер - благо, визуальный дизайнер содержит в том числе графические примитивы и множество объектов с эффектами. Можно сразу посмотреть, и, если что, изменить/подправить документ перед сохранением в нужный формат изображения.

Итак, нам нужно создать/сохранить/экспортировать из нашего известного Delphi файл будь то BMP или же GIF?
Для начала нам нужно создать документ. Обычный или сложный - без разницы.

Теперь после того, как набросали объект, который хотим перевести в иллюстрацию, запускаем и смотрим.

Вызвав предпросмотр выбираем нужный нам формат сохранения отчета.

Допустим, требуется экспорт в BMP image. Выбираем и нажимаем.

У нас всплывает окно, в котором присутствуют настройки экспорта документа. Настраиваем и сохраняем.





Немного о настройках.

Есть возможность сохранения всех страниц, текущей, на которой вы находитесь, ну или же указываете конкретные страницы.

Для сравнения настроек форматов привожу скриншоты:  (TIFF, JPEG,GIF) 

    

В некоторых вариантах некоторые настройки недоступны (особенности форматов):

Monochrome - изображения в оттенках черного;
Crop pages - обрезка страниц;
JPEG quality - настройка качества графического объекта;
Resolution (dpi) - разрешение в точках на дюйм;
Open after export - автоматическое открытие документа сразу же после сохранения.

Есть возможность сохранить файл в памяти ПК, загрузить в облако, передать по электронной почте или же в FTP.

Ну вот мы и освоили простое сохранение отчета в графические форматы из Delphi / C++Builder / Lazarus через интерфейс окна предварительного просмотра.

Но, а как же нам сохранить BMP/JPEG/TIFF/GIF из кода Delphi / C++Builder / Lazarus? 

Вот так!

Экспорт в BMP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
procedure TForm1.Button1Click(Sender: TObject);
begin
 {Формируем отчёт. Перед экспортом отчёт необходимо обязательно сформировать}
 frxReport1.PrepareReport();
 {Устанавливаем диапазон экспортируемых страниц. По умолчанию экспортируются все страницы сформированного отчёта}
 frxBMPExport1.PageNumbers := '2-3';
 {Устанавливаем, нужно ли экспортировать каждую страницу в отдельный файл.}
 {К имени файла будет добавлено .N, где N - порядковый номер страницы}
 frxBMPExport1.SeparateFiles := True;
 {Устанавливаем, нужно ли экспортировать в чёрно-белое изображение}
 frxBMPExport1.Monochrome := False;
 {Устанавливаем, нужно ли обрезать пустые края (поля страницы)}
 frxBMPExport1.CropImages := False;
 {Устанавливаем разрешение, точек/дюйм}
 frxBMPExport1.Resolution := 96;
 {Устанавливаем, нужно ли открывать результирующий файл после экспорта}
 frxBMPExport1.OpenAfterExport := False;
 {Устанавливаем, нужно ли отображать прогресс экспорта
  (показывать, какая страница в данный момент экспортируется)}
 frxBMPExport1.ShowProgress := False;
 {Устанавливаем, нужно ли отображать окно диалога с настройками фильтра экспорта}
 frxBMPExport1.ShowDialog := False;
 {Устанавливаем имя результирующего файла.}
 {Обратите внимание на то, что если не установить имя файла и отключить показ диалогового окна фильтра экспорта,}
 {то всё равно будет отображён диалог выбора имени файла}
 frxBMPExport1.FileName := 'C:\Output\test.bmp';
 {Экспортируем отчёт}
 frxReport1.Export(frxBMPExport1);
end;

 

Экспорт в JPEG
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
procedure TForm1.Button2Click(Sender: TObject);
begin
 {Формируем отчёт. Перед экспортом отчёт необходимо обязательно сформировать}
 frxReport1.PrepareReport();
 {Устанавливаем диапазон экспортируемых страниц. По умолчанию экспортируются все страницы сформированного отчёта}
 frxJPEGExport1.PageNumbers := '2-3';
 {Устанавливаем, нужно ли экспортировать каждую страницу в отдельный файл.}
 {К имени файла будет добавлено .N, где N - порядковый номер страницы}
 frxJPEGExport1.SeparateFiles := True;
 {Устанавливаем, нужно ли экспортировать в чёрно-белое изображение}
 frxJPEGExport1.Monochrome := False;
 {Устанавливаем, нужно ли обрезать пустые края}
 frxJPEGExport1.CropImages := False;
 {Устанавливаем качество JPEG}
 frxJPEGExport1.JPEGQuality := 90;
 {Устанавливаем разрешение, точек/дюйм}
 frxJPEGExport1.Resolution := 96;
 {Устанавливаем, нужно ли открывать результирующий файл после экспорта}
 frxJPEGExport1.OpenAfterExport := False;
 {Устанавливаем, нужно ли отображать прогресс экспорта
  (показывать, какая страница в данный момент экспортируется)}
 frxJPEGExport1.ShowProgress := False;
 {Устанавливаем, нужно ли отображать окно диалога с настройками фильтра экспорта}
 frxJPEGExport1.ShowDialog := False;
 {Устанавливаем имя результирующего файла.}
 {Обратите внимание на то, что если не установить имя файла и отключить показ диалогового окна фильтра экспорта,}
 {то всё равно будет отображён диалог выбора имени файла}
 frxJPEGExport1.FileName := 'C:\Output\test.jpg';
 {Экспортируем отчёт}
 frxReport1.Export(frxJPEGExport1);
end;

 

Экспорт в TIFF
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
procedure TForm1.Button3Click(Sender: TObject);
begin
 {Формируем отчёт. Перед экспортом отчёт необходимо обязательно сформировать}
 frxReport1.PrepareReport();
 {Устанавливаем диапазон экспортируемых страниц. По умолчанию экспортируются все страницы сформированного отчёта}
 frxTIFFExport1.PageNumbers := '2-3';
 {Устанавливаем, нужно ли экспортировать каждую страницу в отдельный файл.}
 {К именифайла будет добавлено .N, где N - порядковый номер страницы}
 frxTIFFExport1.SeparateFiles := True;
 {Устанавливаем, нужно ли экспортировать в чёрно-белое изображение}
 frxTIFFExport1.Monochrome := False;
 {Устанавливаем, нужно ли обрезать пустые края}
 frxTIFFExport1.CropImages := False;
 {Устанавливаем разрешение, точек/дюйм}
 frxTIFFExport1.Resolution := 96;
 {Устанавливаем, нужно ли открывать результирующий файл после экспорта}
 frxTIFFExport1.OpenAfterExport := False;
 {Устанавливаем, нужно ли отображать прогресс экспорта
  (показывать, какая страница в данный момент экспортируется)}
 frxTIFFExport1.ShowProgress := False;
 {Устанавливаем, нужно ли отображать окно диалога с настройками фильтра экспорта}
 frxTIFFExport1.ShowDialog := False;
 {Устанавливаем имя результирующего файла.}
 {Обратите внимание на то, что если не установить имя файла и отключить показ диалогового окна фильтра экспорта,}
 {то всё равно будет отображён диалог выбора имени файла}
 frxTIFFExport1.FileName := 'C:\Output\test.tif';
 {Экспортируем отчёт}
 frxReport1.Export(frxTIFFExport1);
end;

 

Экспорт в GIF
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
procedure TForm1.Button4Click(Sender: TObject);
begin
 {Формируем отчёт. Перед экспортом отчёт необходимо обязательно сформировать}
 frxReport1.PrepareReport();
 {Устанавливаем диапазон экспортируемых страниц. По умолчанию экспортируются все страницы сформированного отчёта}
 frxGIFExport1.PageNumbers := '2-3';
 {Устанавливаем, нужно ли экспортировать каждую страницу в отдельный файл.}
 {К имени файла будет добавлено .N, где N - порядковый номер страницы}
 frxGIFExport1.SeparateFiles := True;
 {Устанавливаем, нужно ли экспортировать в чёрно-белое изображение}
 frxGIFExport1.Monochrome := False;
 {Устанавливаем, нужно ли обрезать пустые края}
 frxGIFExport1.CropImages := False;
 {Устанавливаем разрешение, точек/дюйм}
 frxGIFExport1.Resolution := 96;
 {Устанавливаем, нужно ли открывать результирующий файл после экспорта}
 frxGIFExport1.OpenAfterExport := False;
 {Устанавливаем, нужно ли отображать прогресс экспорта
  (показывать, какая страница в данный момент экспортируется)}
 frxGIFExport1.ShowProgress := False;
 {Устанавливаем, нужно ли отображать окно диалога с настройками фильтра экспорта}
 frxGIFExport1.ShowDialog := False;
 {Устанавливаем имя результирующего файла.}
 {Обратите внимание на то, что если не установить имя файла и отключить показ диалогового окна фильтра экспорта,}
 {то всё равно будет отображён диалог выбора имени файла}
 frxGIFExport1.FileName := 'C:\Output\test.gif';
 {Экспортируем отчёт}
 frxReport1.Export(frxGIFExport1);
end;

Посмотрев как можно создавать и производить экспорт таких форматов, приходим к выводу, что это совершенно не сложно! Большая просьба - не злоупотреблять этими возможностями! Очень часто (например, многие программные продукты для формирования налоговой отчетности, декларации 3 НДФЛ) позволяют результаты работы сохранить только в некий закрытый формат, отправить на принтер или сохранить в TIFF - к сожалению, такой вариант не выдерживает никакой критики с точки зрения дальнейшего использования. На него можно будет только полюбоваться и распечатать. Ведь ничего не стоит добавить сохранение этих же документов в PDF (если необходимо - PDF/A) , ODS, ODT, RTF, DOCX, XLSX - с полной поддержкой соответствующих стандартов, но гораздо более удобных для работы с ними в качестве текст-содержащих документов. 

20 ноября 2024

Локализация и смена языков в FastReport VCL

FastReport VCL поддерживает 40 языков для локализации интерфейса и позволяет изменять язык на лету через меню или код, без перекомпиляции.
1 ноября 2024

Новые возможности редактора отчетов FastReport VCL

Рассматриваем новые возможности редактора отчетов: выносные линии, подсветка пересекающихся объектов, обновлённые деревья отчетов и данных.
30 октября 2024

Использование стилей при создании отчетов в FastReport VCL

В статье подробно рассматривается одна из новых возможностей FastReport VCL – применение стилей и страниц стилей.