Из чего состоит файл изображения

Обновлено: 19.05.2024

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

Любое изображение, хранящееся на компьютере, имеет свой графический формат. Каждый из графических форматов имеет свои свойства и своё предназначение. На сегодняшний день существует огромное количество графических форматов. Большую часть графических форматов, мы будем рассматривать на основе одного из самых популярных графических редакторов Adobe Photoshop. Почему именно фотошоп, все просто, этот графический редактор обладает наибольшим количеством форматов.

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

Итак, приступим:

PSD – это собственный формат программы Adobe Photoshop, он позволяет сохранять всю проделанную работу над изображением. А именно прозрачность, режимы смешивания слоев, тени, слои, маски слоя и все остальные мелочи работы проделанной с изображением. Этот формат обычно используется, если работа над изображением до конца не завершена. Так же его часто используют для разработки макета сайта, так как производить верстку с данного файла удобно видя все слои и элементы. А во всех остальных случаях его использование нет смысла, так как он имеет значительно большой размер файла по отношению к другим форматам.

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

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

JPEG – это самый широко используемый формат. Он получил широкое использование в цифровой технике (фотоаппаратах). Причина столь широкого использования это довольно не плохое качество и маленький размер файла. Но маленький размер говорит о том, что значительно теряется качество изображения. Все дело в алгоритме сжатия изображений, он состоит в том что, сжимаясь, изображение значительно теряет точность. Этот формат по этим причинам не желательно использовать в полиграфии. Но плюсом является то, что их удобно посылать по email (электронной почте), выкладывать в Интернете и хранить на дисках.

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

Поддерживает сжатие изображений, как с потерями качества, так и без него. Кроме этого формат JPEG 2000, поддерживает «прогрессивное сжатие», которое по мере загрузки файла позволяет увидеть качественное изображение, изначально представленное как размытое. Расширение файлов: .jp2, .j2k, .jpf, .jpm, .jpg2, .j2c, .jpc.

JPEG XR – формат кодирования изображений, разработанный Microsoft. Сжимает фотографии больше и лучше JPEG 2000 может сжимать без потери качества. Поддерживает прозрачность и различную степень сжатия. JPEG XR достаточно эффективный формат для сжатия изображений, при достаточно большом проценте сжатия, на изображение практически отсутствуют артефакты.

Изображения JPEG XR загружаются быстрее, чем в формате JPEG2000. Формат поддерживает 16bit, что дает возможность хранить картинки с полным охватом цветов размером меньше чем в формате TIFF. Расширение файлов: .jxr, .hdp, .wdp.

GIF – в основном используется для изготовления графики для Интернета. Он не годится для сохранения фотографий, так как имеет ограничение по цветопередаче, по этим же причинам он не годится для полиграфии. Изображение данного графического формата состоит из точек, которые могут включать в себя от 2 до 256 цветов. Ограниченность цветопередачи и поддержка прозрачности делают его незаменимым для хранения изображений с минимум цветов, например логотипов. Еще одна особенность формата это возможность изготовления анимированных изображений. Широко применяют для создания gif (анимированных) баннеров.

EPS – можно назвать наиболее надежным и универсальным форматом. Он в основном предназначен для передачи векторной и растровой графики в издательства, возможность создания и использования данного формата практически всеми графическими редакторами. Использовать данный формат имеет наибольший смысл только в том случае, если вывод осуществляется на PostScript-устройстве.

PICT – это собственный формат Макинтош. Формат способен включать в себя как растровую, так и векторную информацию, текст, а также звук, использует RLE-компрессию. Битовые PICT-изображения могут иметь абсолютно любую глубину битового представления. Векторные же PICT-изображения, которые практически исчезли из использования в наши дни, имели необычные проблемы толщины линии и другие отклонения во время печати.

Формат используется для Макинтош, и при создании определенных презентаций только для Мак. На обычных компьютерах (не мак) PICT – формат представлен с расширением .pic или .pct, считывается определенными программами, работа с этим форматом зачастую бывает не простой.

PDF –формат предложен и разработан компанией Adobe, как формат для электронной документации, различных презентаций и верстки для пересылки его по электронной почте. И его проектная особенность была обеспечить компактный формат. По этим причинам все данные в pdf могут сжиматься, причем особенность в нем такая, что к разного рода информации применяются разные, более подходящие для этих типов данных сжатия: JPEG, RLE, CCITT, ZIP.

PCX – формат растрового изображения. Файлы pcx типа используют стандартную палитру цветов, этот формат был расширен для хранение 24-битных изображений. Этот формат аппаратно зависим. Предназначен хранить информацию в файле в том же виде, что и в видео-плате. Чтобы совместить этот формат со старыми программами необходима поддержка EGA-режима видеоконтроллера. Алгоритм сжатия быстрый и занимает малый объём памяти, но не очень эффективен, не подойдет для сжатия фотографий и детальной компьютерной графики.

ICO – этот формат разработан для хранения значков файлов. Размеры ico файлов могут быть любыми, но наиболее используемые значки со сторонами в 16, 32 и 48 пикселей. Еще используются иконки с размерами 24, 40, 60, 72, 92, 108, 128, 256 пикселей. Данные в значках обычно не сжимаются. Значки бывают в цвете True Color, High Color , или с четко фиксированной палитрой. По своей структуре файлы ICO наиболее близки к BMP формату, но отличаются от bmp присутствием маски, накладываемой на задний план с помощью операции побитового «И», что дает возможность реализовать прозрачность.

RAW – это формат данных, содержащий в себе необработанную информацию (или обработанную в минимальной степени), созданный напрямую поступающей информацией с матрицы фотокамеры (видеокамеры и д.р.). Этим форматом обозначают не только фото данные, но и исходные данные звукозаписи или видео. Данный формат хранит всю информацию о файле и имеет больший потенциал для обработки фотографий, нежели формат JPG. RAW сохраняет максимально возможное качество. Данные в RAW-файлах могут быть несжатыми, сжатыми без потерь или сжатыми с потерями.

SVG – формат масштабируемой векторной графики (Scalable Vector Graphics). Формат создан W3C. В соответствие со спецификацией он создан для описания двумерной векторной и смешанной векторной/растровой графики в XML. Включает в себя три типа объектов: фигуры, изображения и текст. Поддерживает неподвижную, анимированную так и интерактивную графику. Создавать и редактировать можно как в текстовых редакторов посредством правки кода, так и в любом графическом редакторе для векторной графики (Adobe Illustrator, Inkscape, CorelDRAW, Corel SVG Viewer). SVG – это открытый стандарт не является чьей либо собственностью.

По сравнению с PNG изображениями формат WebP имеет вес на 26% меньше без потери качества. По сравнению с изображениями JPEG формата WebP на 25-34% меньше весит, но с потерями качества по индексу структурного сходства.

  • Поддерживает прозрачность (альфа-канал).
  • WebP поддерживается в Chrome, Firefox, Edge, Opera и других инструментах и ​​библиотеках. При разработке сайтов для корректного отображения в браузерах, которые не поддерживают WebP формат, рекомендуется использовать поддержку альтернативных изображений.
  • Включает легкую библиотеку libwebp для кодирования и декодирования.
  • Инструменты командной строки cwebp и dwebp для преобразования изображений в формат WebP и обратно.
  • Инструменты просмотра, мультиплексирования (передача нескольких потоков данных с меньшей скоростью по одному каналу) и анимации изображений WebP.

AVIF – (AV1 Still Image File Format) эффективный формат сжатия изображения с потерей качества, основанный на библиотеке для сжатия кадров кодека AV1. AVIF – бесплатный формат, совместимый с HEIF. Может хорошо обработать изображение, получив небольшой вес файла с высокой детализацией. Обеспечивает быструю загрузку изображений на сайтах в Интернете.

  • Поддерживает прозрачность (альфа-канал).
  • Может хранить несколько изображений.
  • Поддерживает анимацию.
  • Имеет стандарт EXIF (позволяет добавлять к изображению дополнительную информацию). Например, авторство.
  • Поддерживает миниатюры изображения.
  • Имеет преимущества по сжатию: примерно на 20% сжимает лучше WebP и на 50% чем Jpg.

Конвертировать изображение в .avif файл можно в сервисе Squoosh.
Расширение файлов: .avif


В данный момент вы не можете посмотреть или раздать видеоурок ученикам

Чтобы получить доступ к этому и другим видеоурокам комплекта, вам нужно добавить его в личный кабинет, приобрев в каталоге.

Получите невероятные возможности



2. Раздавайте видеоуроки в личные кабинеты ученикам.


3. Смотрите статистику просмотра видеоуроков учениками.

Конспект урока "Графические файлы"

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

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

В начале урока давайте узнаем, что такое файл.

Файл – это информация, которая хранится как единое целое и имеет своё название – имя файла. В каждом файле хранится однотипная информация: текстовая, графическая и прочие.

Все картинки и фотографии в компьютере, телефоне и на прочих устройствах хранения информации являются графическими файлами.

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

Рассмотрим пример. Нам дано имя файла «Пальмы.jpg». «Пальмы» – это имя файла, а вот «jpg» – его расширение. Расширение помогает определить, какого типа информация хранится в файле. В нашем случае расширение «jpg» указывает на то, что это графический файл, то есть в нём содержится картинка или фотография.

Существует огромное количество графических расширений. Рассмотрим некоторые из них.

Графические расширения делятся на два типа: растровые и векторные.

Графические изображения, которые имеют растровое расширение, содержат в себе элементы растровой графики. В растровой графике изображение представляется в виде пикселей (точек) разного цвета. При большом увеличении изображения можно увидеть, что оно состоит из клеточек.


Витя: «То есть одна клеточка и есть пиксель?»

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

А сейчас давайте узнаем, какие расширения относятся к растровым.

«BMP». Это расширение было разработано компанией Microsoft. С этим форматом работает огромное количество программ, так как его поддержка уже встроена в операционные системы Windows.

Следующее расширение – «JPG». Оно является одним из самых популярных и используется в основном для хранения фотоизображений и подобных им. Файлы, которые содержат данные «JPG», могут иметь ещё несколько похожих расширений: .jpg; .jpe; .jpf; .jpx; .jp2; .j2c; .j2k; .jpc; .jps.

«PNG». Преимущество этого расширения в том, что оно позволяет сохранять изображения без фона. В то время, как, например, у расширения «JPG» нет таких возможностей.

«GIF». В основном это расширение используется для сохранения изображений с анимацией.

Ну и последнее растровое расширение, которое мы с вами рассмотрим, – «PSD». Это родной формат Photoshop. То есть при сохранении созданного в фотошопе изображения, оно будет иметь именно такое расширение. С его помощью сохраняются все слои изображения, эффекты, которые были применены к слоям, и многое другое.

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

Витя: «А чем же растровые расширения отличаются от векторных?»

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

Витя: «Какие расширения относятся к векторным?»

Рассмотрим несколько таких расширений.

Первое расширение, «CDR», относится к родному формату программы Corel Draw. То есть все изображения, которые создаются в данной программе, автоматически сохраняются в этом формате.

Следующее расширение – «SVG». Такой формат применяется при сохранении изображений для веб-страниц.

Ну и ещё одно расширение – «WMF». Это расширение является универсальным для графических файлов, которые используются в приложениях Windows. Оно также было разработано компанией Microsoft.

А сейчас переходим непосредственно к компьютерной графике.

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

Витя: «Может, для начала познакомимся с историей создания компьютерной графики?»

Давайте так и сделаем.

Компьютерная графика является одним из наиболее «молодых» направлений информатики. Но обо всём по порядку.

Первые вычислительные машины предоставляли информацию в виде длинных колонок чисел. Для того, чтобы структурировать эту информацию, то есть представить в графическом виде, человеку приходилось брать в руки карандаши, линейку и другие чертёжные принадлежности. То есть вручную представлять полученную от компьютера информацию в виде таблиц, графиков и прочего, так как именно в таком виде информация становится более понятной, доступной и наглядной.

Витя: «Но это же очень и очень сложно!»

Вот именно поэтому и возникла идея поручить графическую обработку информации самому компьютеру.

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


В 1951 г. в военном компьютере «Вихрь», встроенном в систему противовоздушной обороны США, впервые был использован монитор как средство отображения визуальной и графической информации. И это стало началом эры компьютерной графики.

В 1957 г. Рассел Кирш создал первый барабанный сканер для компьютера и сделал с его помощью первое цифровое изображение. На нём был запечатлён трёхлетний сын изобретателя. Размер же этого изображения составлял 5х5 см.


В 1961 г. была создана одна из первых цифровых компьютерных игр Spacewar. В качестве дисплея использовался осциллограф.


В 1963 г Айвен Сазерленд написал компьютерную программу «Альбом».


С помощью этой программы и специального светового пера можно было рисовать на дисплее векторные фигуры и сохранять их. Также электронные чертежи можно было изменять так, как угодно пользователю, копировать их и сохранять. Ещё одним важнейшим изобретением «Альбома» были инструменты автоматического рисования геометрических фигур. Например, для рисования квадрата было достаточно указать его местоположение и размеры.

В 1964 г. Эдвард Зейджек создал первую компьютерную анимацию – движение спутника вокруг Земли.

А вот в 1968 г. Николай Николаевич Константинов, советский и российский математик, создал компьютерную математическую модель движения кошки. То есть изначально была написана специальная программа для машины БЭСМ-4. Эта машина выполняла все команды программы, в результате чего рисовался мультфильм. Для визуализации использовался алфавитно-цифровой принтер. То есть при помощи принтера на бумагу выводилось каждое движение кошки, после чего все рисунки собирались кадр за кадром в ленту и получался мультик.

Витя: «Ух ты! Как интересно!»

А ещё в 1964 г. появляется возможность запоминать изображения и выводить их на экран.

А сейчас давайте вернёмся в наше время и ответим на вопрос: в каких сферах применяется компьютерная графика?

Витя: «В фильмах, мультфильмах, играх. Да вообще много где!»

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

Давайте более подробно рассмотрим области применения компьютерной графики.

А начнём мы с вами с операционной системы. При загрузке компьютера у нас загружается графический интерфейс, который помогает пользователю общаться с компьютером. Для создания графического интерфейса и использовалась компьютерная графика. Без него было бы очень сложно пользоваться компьютером.

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

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

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

Без дизайна в наши дни не обходится ни одна сфера деятельности. Промышленный дизайн, графический дизайн, дизайн интерьеров, web-дизайн, game-дизайн, рекламный дизайн. И все они не обходятся сегодня без компьютерной графики.

Витя: «При рисовании на компьютере тоже используется компьютерная графика?»

Да. Для творческого самовыражения человека также можно использовать компьютерную графику. К примерам относятся цифровые фотографии, живопись, компьютерная анимация и прочие.

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

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

Бесспорно, видеоигры – хороший способ провести свободное время, однако они ещё используются и для более серьёзных целей. Так, например, существуют специальные тренажёры, с помощью которых имитируется, например, полёт на самолёте в различных погодных условиях или вождение автомобиля. Таким образом, с помощь тренажёров можно получить очень много полезных навыков.

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

А сейчас пришла пора подвести итоги урока.

Сегодня мы с вами узнали, что относится к графическим файлам и какие бывают расширения изображений.

Формат графического файла определяет способ хранения графической информации в файле (растровый или векторный), а также форму хранения информации (используемый алгоритм сжатия для уменьшения объёма файла).

Растровые форматы используются для хранения растровых данных. Файлы этого типа особенно хорошо подходят для хранения реальных изображений, например фотографий и видеоизображений.

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

Наиболее распространенные растровые форматы — это BMP, GIF, TIFF, JPEG и PSD.

— формат хранения растровых изображений, разработанный компанией Microsoft.

С форматом BMP работает огромное количество программ, так как его поддержка интегрирована в операционные системы Windows и OS/2.

Формат BMP поддерживается всеми графическими редакторами, работающими под ее управлением, способен хранить как индексированный (до 256 цветов), так и RGB-цвет ( 16,7 млн. оттенков).

Имена файлов BMP используют расширения *.bmp, *.dib и *.rle

— стандартный растровый формат представления изображений в WWW.
Формат GIF позволяет хорошо сжимать файлы, в которых много однородных заливок (логотипы, надписи, схемы), записывать изображение "через строчку" (Interlaced mode), благодаря чему, имея только часть файла, можно увидеть изображение целиком, но с меньшим разрешением.
Применяется для хранения рисунков и анимации в Интернете.

Имена файлов GIF используют расширение *.jpg .

TIFF используется в полиграфии, при печати изображений.

TIFF может сохранять векторную графику программы Photoshop, Alpha-каналы для создания масок в видеоклипах Adobe Premiere и др.
Имена файлов TIFF используют расширение *.tiff и *.tif.

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

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

JPEG не подходит для сжатия изображений при многоступенчатой обработке, так как искажения в изображения будут вноситься каждый раз при сохранении промежуточных результатов обработки.

Имена файлов JPEG используют расширения: .jpg, .jfif, .jpg, .JPG, или .JPE.

— формат фирмы Adobe Photoshop с неразрушаемым сжатием.

Формат PSD обеспечивает хранение полноцветных изображений со всеми их особенностями, каналами, масками, различными слоями, векторными фигурами, контурами, эффектами и т.п., известными и понятными только этой программе. Особо рекомендуется использовать при работе с Photoshop.

Имена файлов PSD используют расширение *.psd.

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

Векторные изображения различных форматов различает способ их создания и принципы кодирования графических объектов.

Наиболее распространенных векторных форматов — WMF и CDR.




Файловая система . На каждом носителе информации (гибком, жестком или лазерном диске) может храниться большое количество файлов. Порядок хранения файлов на диске определяется используемой файловой системой.

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

Для дисков с небольшим количеством файлов (до нескольких десятков) может использоваться одноуровневая файловая система , когда каталог (оглавление диска) представляет собой линейную последовательность имен файлов (табл. 1.2). Такой каталог можно сравнить с оглавлением детской книжки, которое содержит только названия отдельных рассказов.

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

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

Например, в корневом каталоге могут находиться два вложенных каталога 1-го уровня (Каталог_1, Каталог_2) и один файл (Файл_1). В свою очередь, в каталоге 1-го уровня (Каталог_1) находятся два вложенных каталога второго уровня (Каталог_1.1 и Каталог_1.2) и один файл (Файл_1.1) - рис. 1.3.

Файловая система - это система хранения файлов и организации каталогов.

Рассмотрим иерархическую файловую систему на конкретном примере. Каждый диск имеет логическое имя (А:, В: - гибкие диски, С:, D:, Е: и так далее - жесткие и лазерные диски).

Пусть в корневом каталоге диска С: имеются два каталога 1-го уровня (GAMES, TEXT), а в каталоге GAMES один каталог 2-го уровня (CHESS). При этом в каталоге TEXT имеется файл proba.txt, а в каталоге CHESS - файл chess.exe (рис. 1.4).

Рис. 1.4. Пример иерархической файловой системы

Путь к файлу . Как найти имеющиеся файлы (chess.exe, proba.txt) в данной иерархической файловой системе? Для этого необходимо указать путь к файлу. В путь к файлу входят записываемые через разделитель "\" логическое имя диска и последовательность имен вложенных друг в друга каталогов, в последнем из которых содержится нужный файл. Пути к вышеперечисленным файлам можно записать следующим образом:

Путь к файлу вместе с именем файла называют иногда полным именем файла.

Пример полного имени файла:

Представление файловой системы с помощью графического интерфейса . Иерархическая файловая система MS-DOS, содержащая каталоги и файлы, представлена в операционной системе Windows с помощью графического интерфейса в форме иерархической системы папок и документов. Папка в Windows является аналогом каталога MS-DOS

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

В Windows на вершине иерархии папок находится папка Рабочий стол. Следующий уровень представлен папками Мой компьютер, Корзина и Сетевое окружение (если компьютер подключен к локальной сети) - рис. 1.5.

Рис. 1.5. Иерархическая структура папок

Если мы хотим ознакомиться с ресурсами компьютера, необходимо открыть папку Мой компьютер.

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

Предупреждение: Эта статья является результатом сбора разрозненных данных о структуре популярного графического формата JPG и практического анализа структуры JFIF и не основана на стандартах CCITT. Автор не несет ответственности, если приемы, описанные в этой статье не позволят получить корректную информацию о структуре графических файлов JFIF. Однако во всех известных автору случаях, описанный здесь метод позволяет получить совершенно достоверные данные из корректно созданного файла.

В отличие от форматов BMP и GIF, структура графических файлов JPG (JFIF) мягко говоря, значительно сложнее. При работе с такими файлами предполагается его полное считывание, анализ и лишь затем загрузка изображения. Именно так поступают декодировщики JPG. Но мне, наоборт, хочется быстренько узнать размеры графического изображения файла, считав десяток-другой байт (условно). Именно этому вопросу данная статья и посвящается.

Во-первых, определимся, что файлы, имеющие расширение JPG, JPEG, JPE являются файлами JFIF (JPEG File Interchange Format) , а JPEG обозначает метод сжатия изображения.
Алгоритм сжатия изображения JPEG очень сложен. Если файлы BMP или GIF сохраняют изображение без потери качества, то алгоритм JPEG при каждом новом сохранении теряет часть малозначительной информации, чтобы достичь максимального сжатия изображения. На глаз такой потери незаметно, однако с каждым новым сохранением файла с использованием кодировщиков (например Photoshop или ACDSee) качество файла ухудшается.
К сожалению, структура файла JFIF такова, что в нем мы не найдем нужных данных по заранее определенным адресам. Однако, давайте посмотрим, что же мы можем сделать, исходя из практического применения некоторой известной информации.
Данные в файле JFIF хранится в сегментах. Начало того, или иного сегмента обозначается маркером. Иными словами, данные записываются в виде потоков, которые идентифицируются маркерами. Приблизительная структура JFIF-файла представлена в таблице 1 (в качестве примера использован файл "photo.jpg" с графическим размером изображения 1197x1165, сжатый с помощью Photoshop до размеров файла 232 kb и включенный в исходник примера):

Таблица 1. Начало файла JFIF.

Первые два байта любого потока JPEG имеют значение маркера SOI (Start Of Image) - FF D8. Именно этими двумя байтами начинается любой файл JFIF. Также однозначно, что любой поток, как и сам файл заканчивается двумя байтами FF D9 - EOI (End Of Image). Таких потоков в файле может быть несколько.

За маркером SOI сразу же следует маркер сегмента приложения APP0 (APPlication 0, т.е. Приложение 0), представляющий собой два байта FF E0.

За ним следуют два байта длины (сначала старший байт, затем младший), которая представляет собой полную длину поля APP0, включая длину самого поля "длина" (2 байта), но без длины маркера APP0. В нашем случае это байты 00 10 или 16 в десятеричной системе (если значение меньше 16, то этот сегмент не JFIF).
После мы видим пять байт, которые представляют буквы JFIF0, заканчивающиеся нулем, которые идентифицируют файл, как JPG - 4A 46 49 46 00.

Следующие два байта имеют значение версии (всегда должно быть 01) и подверсии (от 0 до 2). В нашем случае это 01 02.

Далее следуют следующие значения:
- Единицы измерения плотности (1 байт) (0 - безразмерный (коэффициент), 1 - точки на дюйм, 2 - точки на сантиметр)
- Плотность пикселей по-горизонтали (2 байта)
- Плотность пикселей по-вертикали (2 байта)

Некоторые графические редакторы (например Photoshop) иногда вставляют в тело файла уменьшенное графическое изображение картинки для быстрого получения пользователем информации о содержимом файла (присутствуют только в версиях 1.02 и возможно выше). Но реально большинство кодировщиков ее не используют. Однако следующие байты могут хранить именно информацию об этих превьюшках:
- количество пикселов превью по-горизонтали (2 байта)
- количество пикселов превью по-вертикали (2 байта)
- значения RGB пикселов для превьюшки (3*количество пикселов превью по-горизонтали*количество пикселов превью по-вертикали байт).

Однако в нашем случае файл превью не содержит, поэтому последние 2 байта поля APP0 содержат нули. Однако очень часто уменьшенных графических изображений может быть несколько. Тогда далее бы шли байты для второго уменьшенного графического изображения, а именно, еще бы одно поле APP0, которое имело бы вид:
- маркер APP0 (2 байта)
- длина (2 байта)
- идентификатор JFIF0 (5 байт)
- код расширения (1 байт) - (10 - кодировка методом JPEG, 11 - 1 байт на пиксель, 12 - 3 байта на пиксель)
Затем идет сжатое изображение превьюшки.
Размер поля APP0 не может превышать 64 kb (теоретически).

Будем рассматривать JFIF файл, как неожиданую последовательность сегментов. Каждый сегмент начинается макером, состоящим из двух байт, первый из которого FF, а второй определяет тип сегмента. Далее в двух байтах идет размер сегмента (причем, еще раз обрати внимание, порядок считывания их прямой, а не как в файлах GIF или BMP) - сначала старший, потом младший байт. И только по маркеру можно опредилить, что за сегмент находится в этой области файла. Обычно поддерживаемые маркеры могут идентифицировать следующие сегменты:

Таблица 2. Используемые маркеры.

Информация о размере графического изображения должна храниться в сегменте, идентифицируемом маркером SOF0 - начало кадра. Структура сегмента показана в таблице 3.

Таблица 3. Сегмент SOF0.

Сегмент начинается с маркера FF C0, прописанного в первых двух байтах.
За ним в двух байтах находится длина сегмента, которая включает длину сегмента за исключением маркера FF C0.
Потом в одном байте лежит точность изображения (то, что вы выставляете при сохранении файла в графическом редакторе, обычно 8).
Далее, начиная с четвертого от маркера байта лежит то, что нам нужно - размер изображения: два байта высота и два байта ширина.

Исходя из описанного выше напрашивается простейший алгоритм определения размера графического изображения файла JFIF: проверить наличие в байтах с 7 по 11 наличие идентификатора JFIF0, чтобы убедится, что это JPG, а затем читать все байты подряд, пока не найдется маркер начала кадра SOF0 (FF CO), и отсчитав от него четыре байта, получить высоту и ширину картинки.
"О, какая фигня", скажешь ты, " все так просто!". Нет, мой пытливый друг. Все далеко не так . просто. Не польются слезы разочарования из наших, покрасневших от монитора глаз. Не зря едят свой хлеб с маслом и черной икрой наши благодетели из C-Cube Microsystems, сотворившие этот популярнейший формат. Ибо, если мы реализуем этот алгоритм, то может и прочтем один файл из ста, где по недосмотру разработчиков графических редакторов все данные оказались именно на тех местах, где им и положено быть. Потому что по своей кривизне и безбашенности JPG превышает все мыслимые пределы.

Хотя то, что ты прочитал выше - в общем-то по большому счету соответствует истине, использовать эту информацию можно, внеся необходимые поправки на вольности обращения с форматом.
Единственное, что можно считать довольно-таки определенным, так это то, что первые два байта файла JPG содержат маркер начала изображения FF D8, а последние два - маркер конца изображения FF D9. Что касается остального, то:

- совершенно необязательно, что как в начале файла, так и в любом другом месте используется маркер сегмента приложения именно APP0. На самом деле он может иметь значения от APP0 до APP14 (кроме APP15, который должен игнорироваться), т.е. два байта маркера могут содержать значения FF E0, FF E1, FF E2, FF E3, FF E4, . , FF EE.

- совершенно необязательно, что в любом сегменте APP? идентификатор файла должен содержать символы JFIF0. В первом сегменте APP? это может быть JFXX0 или Exif0, а возможно и еще какие-нибудь. В последующих сегментах APP? идентификатор может содержать практические любые символы, какие нравились разработчикам графического редактора, создавшего этот файл.

- совершенно необязательно, что первый найденные маркер начала кадра SOF0 (FF C0) будет содержать именно нужные нам данные о высоте и ширине графического изображения. Так как обычно кадров в файле несколько, то в большинстве случаев ты найдешь данные о размере уменьшенного изображения (превью) или вообще непотребные числа.

- совершенно необязательно, что в файле вообще будет присутствовать маркер SOF0 (FF C0). Вместо него могут быть использованы маркеры SOF1 (FF C1), SOF2 (FF C2) хотя считается, что он и другие далее не поддерживаются, SOF3 (FF C3), SOF5 (FF C5), SOF6 (FF C6), SOF7 (FF C7), SOF11 (FF CB), SOF13 (FF CD), SOF14 (FF CE) или SOF15 (FF CF).

Что же нам поможет, кто же нас спасет в этой безнадежной ситуации? Спасение утопающих - дело рук самих утопающих. В каждом сегменте APP? сразу вслед за маркером имеются два байта, которые содержат длину этого сегмента. Вот оно! Исходя из предположения, что кадр главного изображения, т.е. нужный нам маркер SOF? следует где-то за последним маркером APP?, то нам надо по длинам APP? пройти все сегменты приложений, а затем искать SOF?. Можно предложить следующий алгоритм решения нашей задачи:

1. Идентификация файла JPG. Исходя из неоднозначности идентификации, возможно целесообразно проверять файл по пяти признакам: наличия маркера начала кадра в начале файла, наличие маркера конца кадра в конце файла, наличие первого маркера APP?, наличия первых двух символов JF и последнего нуля в идентификаторе в первом маркере APP?, наличия трех последних символов IF0 в идентификаторе файла там же. При получении минимум трех любых совпадений можно с большой долей уверенности утверждать, что это JPG. Однако ты можешь проводить идентификацию более просто (или более сложно, хотя сложнее не знаю как).
2. Определение позиции начала поиска SOF? Исходя из длины каждого сигмента APP? можно найти последний и определить номер байта, с которого надо начинать сканирование в поисках нужного нам (последнего в файле) маркера начала кадра SOF?, т.е. сегмента содержащего данные о размерах изображения.
3. Считывание данных. Считывание и перевод шестнадцатеричных данных размеров изображения в десятичное.

Не смотря на все эти страсти-мордасти, реализовать этот алгоритм довольно-таки просто. Создадим новый exe-проект. Сразу пристроим к нему стандартный модуль, в котором находится код функции ConvertDec(), переводящей шестнадцатеричные строки в десятичные числа. Подробно о ней написано в статье "Шестнадцатеричное представление числа. Перевод из шестнадцатеричной системы счисления в десятичную."

Теперь закроем модуль и забудем про него. Напишем пример простого просмоторщика файлов JPG, который будет загружать картинки в Image1, изменяя размер последнего пропорционально размеру изображения, считанному из файла .jpg.
Установим свойство нашей формы ScaleMode=3 Pixels. Разместим на форме Image1 со свойством Stretch=True. Так же нам понадобятся элементы Drive1, Dir1 и File1 для файла JPG. Размер картинки будем выводить в Label1. Когда все это положим на форму, объявим переменные:

Option Explicit
Dim PathSearch As String 'для определения файла JPG
Dim DiskName As String
Dim b1 As Byte 'для считывания байта
Dim b2 As Byte 'для считывания байта
Dim FileName As String 'имя JPG-файла
Dim IdentFile As String 'вспомог переменная для считывания нескольких байтов
Dim NomerBaita As Long 'Байт, с которого начинаем сканирование
Dim FileW As Long 'ширина изображения
Dim FileH As Long 'высота изображения
Dim x As Long 'переменная для цикла
Dim Kvadrat As Long 'размер Image1 (квадрат)

Затем пишем процедуры Form_Load, Dir1_Change и Drive1_Change. О работе этих процедур подробно написано в части 1 главе 6 самоучителя.

Private Sub Form_Load()
PathSearch = App.Path
Drive1.Drive = PathSearch
Dir1.Path = PathSearch
File1.FileName = PathSearch
Kvadrat = 300
End Sub

Private Sub Dir1_Change()
File1.Path = Dir1.Path
End Sub

Private Sub Drive1_Change()
DiskName = Drive1.Drive
Dir1.Path = DiskName & "\"
File1.Path = Dir1.Path
End Sub

А вот теперь в процедуре File1_Click (чтобы файл открывался при щелчке по файлу) начнем ваять собственно наш код для чтения JPG-файла:

Private Sub File1_Click()
Dim FlagAPP As Boolean 'флаг присутствия сначала маркера APP*, а потом SOF
Dim FlagSOF As Boolean 'флаг начала кадра
Dim StartByte As Long ' начальный байт работы
Dim DlinaAPP0 As Long 'длина APP*
Dim JFIF As Integer 'количества совпадающих признаков JFIF

If Right(File1.Path, 1) = "\" Then
FileName = File1.Path & File1.FileName
Else
FileName = File1.Path & "\" & File1.FileName
End If

Процедура Reading считывает байты высоты и ширины, так же, как это делалось в статьях про файлы BMP и GIF, единственное отличие только в том, что порядок считывания байтов прямой, как они идут, так и читаем. После с помощью функции ConvertDec, которая должна быть у нас в модуле получаем размеры картинки в десятичной системе, меняем размер Image1 и загружаем картинку:

Image1.Picture = LoadPicture()
If FileW >= FileH Then
Image1.Width = Kvadrat
Image1.Height = FileH / (FileW / Kvadrat)
ElseIf FileW < FileH Then
Image1.Width = FileW / (FileH / Kvadrat)
Image1.Height = Kvadrat
End If
Image1.Picture = LoadPicture(FileName)
End Sub

Читайте также: