Форматы файлов изображений – когда и какой тип файла использовать
Сегодня мы поговорим о форматах изображений и всех этих надоедливых маленьких файлах, которые мы используем для создания визуального контента для печати и Интернета.
Каждый графический объект, который вы видите в сети, представляет собой файл изображения. Чаще всего, то что вы видите напечатанным на бумаге, пластике или футболке, получено из файла изображения. Эти файлы бывают разных форматов, и каждый оптимизирован для конкретного использования.
Использование правильного типа для правильной работы означает, что ваш дизайн будет выглядеть идеально и точно так, как вы хотели. Неправильный формат может означать плохой отпечаток или плохое изображение в сети, гигантскую нагрузку или отсутствующую графику в электронном письме.
Большинство файлов изображений вписываются в одну из двух общих категорий – растровые файлы и векторные файлы – и каждая категория имеет свои собственные конкретные применения.
Это разделение не идеально. Например, некоторые форматы могут фактически содержать элементы обоих типов. Но, это хорошее начало, чтобы начать думать о том, какой формат использовать для ваших проектов.
Различные типы форматов файлов изображений
Форматы растровых файлов
Что такое растровое изображение
Растровые изображения состоят из набора точек, называемых пикселями, где каждому пикселю назначается цвет. В отличие от векторного изображения, растровые изображения зависят от разрешения, то есть они существуют в одном размере. Когда растровое изображение преобразуется, вы растягиваете сами пиксели, что может привести к «пиксельному» или размытому изображению. Когда вы увеличиваете изображение, ваше программное обеспечение по существу угадывает, какие данные изображения отсутствуют, основываясь на окружающих пикселях. Чаще всего результаты плачевны.
Растровые изображения обычно используются для фотографий, цифровых иллюстраций и веб-графики (например, баннерной рекламы, контента в социальных сетях и графики электронной почты).
Adobe Photoshop – это стандартный редактор изображений, который используется для создания, дизайна и редактирования растровых изображений, а также для добавления эффектов, теней и текстур к существующим дизайнам.
CMYK против RGB
Все растровые изображения могут быть сохранены в одной из двух основных цветовых моделей: CMYK и RGB.
CMYK используется для печати и основан на четырех цветах: сyan, мagenta, уellow и keу (black). Эти цвета представляют четыре типа чернила, которые будут комбинироваться в процессе печати. Файлы, сохраненные в этом формате, будут оптимизированы для физической печати.
RGB основан на цветовой модели света, которая включает red, green и blue. Это три основных цвета света, которые объединяются в другие цвета. Файлы, сохраненные в этом формате, будут оптимизированы для Интернета, мобильных телефонов, фильмов и видео – всего, что появляется на экране.
С потерями или без потерь
Каждый файл растрового изображения может быть без потерь или с потерями, в зависимости от того, как формат обрабатывает данные изображения.
Форматы изображений без потерь фиксируют все данные вашего исходного файла. Ничего из исходного файла, фотографии или художественного произведения не будет потеряно – отсюда и термин «без потерь». Файл может быть ещё сжат, но все форматы без потерь смогут восстановить ваше изображение до его первоначального состояния.
Форматы изображений с потерями приблизительно соответствуют виду исходного изображения. Например, изображение с потерями может уменьшить количество цветов в вашем изображении или проанализировать изображение на наличие ненужных данных. Эти умные технические приемы обычно уменьшают размер файла, хотя могут снизить качество вашего изображения.
Как правило, файлы с потерями намного меньше, чем файлы без потерь, что делает их идеальными для использования в Интернете, где жизненно важны размер файла и скорость загрузки.
Формат JPEG / JPG
JPEG – это растровый формат с потерями, обозначающий Joint Photographic Experts Group, техническую команду, которая его разработала. Это один из наиболее широко используемых онлайн-форматов, обычно для фотографий, графики электронной почты и больших веб-изображений, таких как рекламные баннеры. Изображения JPEG имеют скользящую шкалу сжатия, которая значительно уменьшает размер файла, но увеличивает артефакты или пикселизацию, чем больше изображение сжимается.
Вы должны использовать JPEG, когда…
- Вы имеете дело с онлайн-фотографиями и/или художественными работами. JPEG предлагает вам максимальную гибкость благодаря растровому редактированию и сжатию, что делает их идеальными для веб-изображений, которые необходимо быстро загрузить.
- Вы хотите распечатать фотографии и/или произведения искусства
- Вам необходимо отправить изображение быстрого предварительного просмотра клиенту. Изображения JPEG могут быть уменьшены до очень маленьких размеров, что делает их отличным форматом для отправки по электронной почте.
Не используйте JPEG, когда…
- Вам нужна веб-графика с прозрачностью. JPEG не имеет прозрачного канала и будет иметь сплошной цвет фона. GIF и PNG – ваши лучшие варианты для прозрачности.
- Вам нужно многоуровневое редактируемое изображение. JPEG – это плоский формат изображения, означающий, что все изменения сохраняются в один слой и не могут быть отменены. Рассмотрите PSD (Photoshop) файл для полностью редактируемого изображения.
Формат GIF
GIF – это растровый формат без потерь, который расшифровывается как Graphics Interchange Format. GIF также является широко используемым форматом веб-изображений, обычно для анимированной графики, такой как рекламные баннеры, изображения электронной почты и мемы социальных сетей. Несмотря на то, что GIF – это файлы без потерь, их можно экспортировать в ряде настраиваемых параметров, которые уменьшают количество цветов и информацию об изображении, что, в свою очередь, уменьшает размер файла.
Вы должны использовать GIF, когда…
- Вы хотите создать веб-анимацию. Изображения GIF содержат все кадры анимации и информацию о времени в одном файле. Редакторы изображений, такие как Photoshop, позволяют легко создавать короткие анимации и экспортировать их в формате GIF.
- Вам нужна прозрачность. Изображения GIF имеют «альфа-канал», который может быть прозрачным, поэтому вы можете разместить свое изображение на любом цветном фоне.
- Вам нужен маленький файл. Методы сжатия в формате GIF позволяют значительно уменьшить файлы изображений. Для очень простых иконок и веб-графики GIF является лучшим форматом файлов изображений.
Не используйте GIF, когда…
- Вам нужно фотографическое качество изображения. Хотя GIF-изображения могут иметь высокое разрешение, они имеют ограничение в 256 цветов (если вы не знаете несколько трюков). Фотографии, как правило, имеют тысячи цветов и будут выглядеть плоскими и менее яркими (а иногда странными из-за цветовых полос) при преобразовании в GIF.
- Вам нужно напечатать изображение. Из-за цветового ограничения большинству напечатанных фотографий не хватает глубины. Если вам нужно распечатать фотографии, используйте TIFF, PSD и JPG.
- Вам нужно многоуровневое редактируемое изображение. GIF – это плоский формат изображения, означающий, что все изменения сохраняются в один слой изображения и не могут быть отменены.
Формат PNG
PNG – это растровый формат без потерь, который обозначает Portable Network Graphics. Думайте о PNG как о GIF следующего поколения. Этот формат имеет встроенную прозрачность, но также может отображать более высокую глубину цвета, что выражается в миллионах цветов. PNG являются веб-стандартом и быстро становится одним из самых распространенных форматов изображений, используемых в Интернете.
Вы должны использовать PNG, когда…
- Вам нужна качественная прозрачная веб-графика. Изображения PNG имеют переменный «альфа-канал», который может иметь любую степень прозрачности (в отличие от GIF-файлов, которые имеют только прозрачность вкл/выкл). Кроме того, с большей глубиной цвета у вас будет более яркое изображение, чем с GIF.
- У вас есть иллюстрации с ограниченными цветами. Хотя любое изображение будет работать, файлы PNG лучше всего использовать с небольшой цветовой палитрой.
- Вам нужен маленький файл
Не используйте PNG, когда…
- Вы работаете с фотографиями или произведениями искусства. Благодаря высокой глубине цвета PNG формат легко обрабатывает фотографии с высоким разрешением. Однако, поскольку это веб-формат без потерь, размеры файлов, как правило, становятся очень большими. Если вы работаете с фотографиями в Интернете, используйте JPEG.
- Вы имеете дело с печатным проектом. PNG графика оптимизирована для экрана. Вы можете определенно распечатать PNG, но вам лучше использовать файл JPEG (с потерями) или TIFF.
Формат TIFF / TIF
TIFF – это растровый формат без потерь, обозначающий тегированный формат файла изображения. Из-за его чрезвычайно высокого качества, формат, в основном, используется в фотографии и настольных издательских системах. Скорее всего, вы столкнетесь с файлами TIFF при сканировании документа или фотосъемке с помощью профессиональной цифровой камеры. Обратите внимание, что файлы TIFF также можно использовать в качестве «контейнера» для изображений JPEG. Эти файлы будут намного меньше, чем традиционные файлы TIFF, которые обычно очень большие.
Вы должны использовать TIFF, когда…
- Вам нужна качественная печатная графика. Наряду с RAW, файлы TIFF относятся к числу графических форматов самого высокого качества. Если вы печатаете фотографии, особенно огромных размеров, используйте этот формат.
- Вы делаете высококачественное сканирование. Использование TIFF для сканирования ваших документов, фотографий и иллюстраций обеспечит вам наилучший исходный файл для работы.
Не используйте в TIFF, когда…
- Вы работаете с веб-графикой. Хотя многие веб-браузеры поддерживают его, файлы TIFF оптимизированы для печати. Используйте JPEG или PNG, когда вам нужно отображать высококачественные изображения онлайн.
Формат RAW
RAW содержит необработанные данные, полученные цифровой камерой или датчиком сканера. Обычно изображения обрабатываются (с поправкой на цвет, баланс белого, экспозицию и т.д.), а затем преобразуются и сжимаются в другой формат (например, JPEG или TIFF).
Необработанные изображения хранят необработанные и обработанные данные в двух отдельных файлах, поэтому у вас остается максимально возможное качество изображения, которое вы можете редактировать без разрушения с помощью приложения для редактирования фотографий, такого как Photoshop. Существуют десятки «сырых» форматов, но некоторые типичные форматы: CRW (Canon), NEF (Nikon) и DNG (Adobe).
Вы должны использовать RAW, когда…
- Вы снимаете и редактируете фотографии. Убедитесь, что ваша камера настроена на сохранение в RAW, чтобы вы могли делать самые разнообразные снимки. Затем используйте совместимое приложение для редактирования фотографий, чтобы настроить изображение.
Не используйте RAW, когда…
- Вы работаете с веб-графикой. RAW построен для редактирования фотографий. Когда вы будете готовы представить свои фотографии для Интернета, конвертируйте их в JPEG.
- Вы готовитесь распечатать свои фотографии. Многие принтеры не принимают необработанные форматы, поэтому сначала преобразуйте их в JPEG или TIFF.
Формат PSD
PSD – это запатентованный многослойный формат изображений, обозначающий PhotoShop Document. Это оригинальные файлы дизайна, созданные в Photoshop и полностью редактируемые с несколькими слоями и настройками изображения.
PSD, в основном, используется для создания и редактирования растровых изображений, но этот уникальный формат также может содержать векторные слои, что делает его чрезвычайно гибким для ряда различных проектов. PSD можно экспортировать в любое количество форматов файлов изображений, включая все перечисленные выше растровые форматы.
Вы должны использовать PSD, когда…
- Пришло время ретуши фотографий. Нужно покрасить фото? Или добавить слой текста? PSD = фотографии.
- Вам нужно отредактировать обложку для цифровых или печатных изданий. Это может быть фотография, картина, рисунок или что-то ещё. Photoshop – это правильный инструмент, чтобы убедиться, что каждая линия, тень и текстура на месте.
- Вам нужны цифровые изображения для Интернета, такие как изображения в социальных сетях, рекламные баннеры, заголовки сообщений электронной почты, видео и т.д. Создание этих изображений в Photoshop обеспечит их правильный размер и оптимизацию для Интернета.
- Вы должны создать макет веб-сайта или приложения. Слои позволяют легко перемещать элементы пользовательского интерфейса.
- Вы хотите начать рабоут с анимацией и видео. Фотошоп позволяет легко нарезать простые видеоклипы и добавлять графику, фильтры, текст, анимацию и многое другое.
Не используйте PSD, когда…
- Вам необходимо опубликовать фотографию в Интернете или отправить предварительный просмотр клиенту. Сеть поддерживает формат JPEG. Сначала преобразуйте, чтобы убедиться, что ваша аудитория увидит ваше изображение (загрузка не займет несколько минут).
- Вы готовитесь распечатать свои фотографии. Многие принтеры не принимают формат PSD, поэтому сначала конвертируйте в JPEG или TIFF.
Векторные форматы файлов
Что такое векторное изображение
Векторные изображения представляют собой цифровые изображения, в которых точки, линии и кривые рассчитываются компьютером. По сути, это гигантские математические уравнения, и каждому «уравнению» можно присвоить цвет, обводку или толщину (среди других стилей), чтобы превратить фигуры в искусство.
В отличие от растровых изображений, векторные изображения имеют не зависят от разрешения. Когда вы уменьшаете или увеличиваете векторное изображение, ваши фигуры становятся больше, но вы не потеряете ни детали, ни пикселизацию. Поскольку ваше изображение всегда будет отображаться одинаково, независимо от его размера, не существует такого понятия, как векторное изображение с потерями или без потерь.
Векторные изображения обычно используются для логотипов, иконок, текста и цифровых иллюстраций.
Adobe Illustrator – это стандартный редактор изображений, который используется для создания, дизайна и редактирования векторных изображений (хотя он также может обрабатывать растровые изображения).
Формат PDF
PDF расшифровывается как Portable Document Format и представляет собой формат изображения, используемый для правильного отображения документов и графики независимо от устройства, приложения, операционной системы или веб-браузера.
По своей сути, файлы PDF имеют мощную основу в форме векторной графики, но также могут отображать всё, от растровой графики до полей формы и электронных таблиц. Поскольку это почти универсальный стандарт, PDF-файлы часто являются форматом файлов, который запрашивают принтеры для отправки окончательного проекта в производство.
Как Adobe Photoshop, так и Illustrator могут экспортировать напрямую в PDF, что облегчает публикацию и подготовку к печати.
Вы должны использовать PDF, когда…
- Вы готовите к печати. Как мы уже упоминали, многие принтеры предпочитают PDF в качестве основного формата. Проверьте ваш принтер, какой формат файла для него будет оптимален.
- Вы хотите отображать документы в Интернете. Не стоит использовать PDF для иконки или логотипа, но он отлично подходит для плакатов, листовок, журналов и буклетов. PDF-файлы будут хранить весь ваш дизайн в одной упаковке, что позволяет легко просматривать, загружать или распечатывать.
Не используйте PDF, когда…
- Вам нужно отредактировать свой дизайн. PDF-файлы являются отличными контейнерами, но для использования элементов нужны отдельные приложения. Вы можете редактировать растровые изображения в Photoshop, а векторную графику – в Illustrator. Когда вы закончите, вы можете объединить их в PDF для удобства просмотра.
Формат EPS
EPS – это формат изображения, обозначающий Encapsulated PostScript. Хотя он используется, в основном, в качестве векторного формата, файл EPS может включать в себя как векторные, так и растровые данные изображения. Как правило, файл EPS включает в себя один элемент дизайна, который можно использовать в более крупном проекте.
Вы должны использовать EPS, когда…
- Вам необходимо отправить векторный логотип клиенту, дизайнеру или принтеру. С файлом EPS вам не нужно беспокоиться о том, где будет размещен или напечатан логотип. Независимо от размера, он всегда будет отображаться с правильным разрешением.
Не используйте EPS, когда…
- Вы имеете дело с фотографиями или произведениями искусства. EPS может обрабатывать растровые изображения, но этот тип файла изображения предназначен для векторов. Работайте с PSD, TIF или JPEG, когда у вас есть фотопроект.
- Вам необходимо отобразить изображение онлайн. Сначала экспортируйте в JPEG, PNG или GIF.
Формат AI
AI – это собственный векторный формат изображений, который обозначает Adobe Illustrator. Формат основан на стандартах EPS и PDF, разработанных Adobe. Как и эти форматы, AI-файлы являются векторным форматом, хотя они могут также включать встроенные или связанные растровые изображения.
AI-файлы могут быть экспортированы как в PDF, так и в EPS-файлы (для удобства просмотра и печати), а также в JPEG, PNG, GIF, TIFF и PSD (для использования в Интернете и дальнейшего редактирования).
Вы должны использовать ИИ, когда…
- Вам нужно отредактировать векторный дизайн. AI-файлы позволяют перемещать и изменять каждый элемент в вашем дизайне одним или двумя щелчками мыши.
- Вам необходимо создать логотип, значок или фирменный талисман. Каждая векторная форма и линия, созданные в Illustrator, могут быть разнесены до любого размера, что делает его идеальным для изображений, которые необходимо использовать по-разному.
- Вы готовите к печати часть страницы. Illustrator идеально подходит для постеров, визиток, листовок и заметок, которые можно комбинировать с другими растровыми изображениями.
- Вам нужно добавить текст к логотипу. Функции набора текста в Illustrator невероятно мощны, позволяют растягивать, перегибать и преобразовывать любой текст любым удобным для способом.
Не используйте AI, когда…
- Вам нужно отредактировать изображения. Если в композиции используется растровое изображение (фотография или рисунок), Illustrator предоставляет ограниченное количество инструментов для непосредственного редактирования этого изображения. Photoshop (PSD-файлы) позволяют выполнять более сложные настройки, такие как цвет, контраст и яркость.
Сохранение изображений. Форматы файлов изображений.
В статье об HDR-фотографии говорилось о возможности расширения интервала яркостей объекта, которые могут быть запечатлены на фотоснимке для цифровой фотографии. В принципе использование RAW-формата изображения для объектов съемки с не очень большим интервалом яркостей позволяет в некоторой степени затемнять слишком светлые участки снимка и высветлять темные (тени) в RAW-конвертере. Особенно хорошо это удается при использовании программы обработки Adobe Ligtroom, но тут многое зависит от того, какой камерой сделан снимок, от ее возможностей по части шумов в тенях.
Что же такое формат RAW и какие еще форматы файлов изображений в цифровой фотографии существуют и используются? Рассмотрим наиболее распространенные и используемые из них.
Те, кто работает на компьютере с информацией, наверняка сталкивались с программами-архиваторами файлов. При большом объеме информации, обрабатываемой и хранимой, возникает необходимость уменьшения занимаемого ею пространства на носителях. Этой цели служит сжатие данных с помощью архиваторов, таких, как WinZip, WinRar и другие. Сжатие — это уменьшение объема информации, хранящейся в файле, путем кодирования, при котором удаляется избыточная информация. Текстовую информацию можно сжать без проблем. Её сжатие производится без потерь, т. е. при восстановлении из архива она воспроизводится совершенно идентично первоначальной.
Сложнее дело с изображениями. Во-первых файлы изображений обычно имеют гораздо большие размеры и информация в них организована сложнее. И все же сжатие информации в файлах изображений производят, иначе хранение ее в компьютере, а особенно в фотокамере (карты памяти фотоаппаратов не столь вместимы, довольно ограничены по объему хранимой информации) было бы проблематично.
Существую разные форматы представления данных в файлах изображений, связанные с разными способами сжатия информации и с разной степенью сжатия. Для того, чтобы ориентироваться в цифровой фотографии, необходимо иметь общее представление об этих форматах. Рассмотрим некоторые из них, наиболее распространенные.
RAW-формат.
Многие современные фотоаппараты (однако не все!) имеют возможность сохранения изображений в этом формате. В этом формате сохраняется информация об изображении, получаемая матрицей фотоаппарата в чистом виде, необработанная, и поэтому без потерь. Формат RAW содержит наибольший объем информации и предоставляет широкие возможности для обработки изображений, сохраняя при этом высокое качество снимка. Но, повторяю не все фотоаппараты оснащены такой функцией.
JPEG-формат.
Самый распространенный формат сжатия данных. Формат JPEG (Joint Photographic Experts Group — объединенная группа экспертов в области фотографии) производит сжатие информации с определенными потерями. При использовании этого алгоритма сжатия потери происходят при каждом сохранении одного и того же файла. Однако в программах для редактирования изображений, в частности в такой всеми нами любимой, как фотошоп, имеется возможность сохранения с минимальной степенью сжатия, которая заметно не ухудшает качество изображения.
Окно сохранения файла в формате JPEG в программе фотошоп.
На фото показан выбор максимального размера изображения с наилучшим качеством. При этом потери информации практически не заметны.
К достоинствам, которые и привели к широкому его распространению, следует отнести безусловно небольшой размер файлов изображений ( в 10 раз меньше некоторых других), а также возможность чтения любой прикладной программой, на любом компьютере. В настоящее время этот формат поддерживается практически всем фотокамерами.
Кроме того у этого формата есть еще одна очень полезная особенность. Он хранит информацию о том, когда сделан снимок, об экспозиции при фотосъемке (выдержке и диафрагме), величине фокусного расстояния. Для хранения этих метаданных служит формат JPEG EXIF (Exchangeable Image Format). Информация из этого формата может извлекаться либо специальными программами, прилагаемыми к фотокамере, либо обрабатывающими редакторами, в частности фотошопом.
TIFF — формат.
Данный формат файлов изображений является одним из наиболее универсальных и потому распространенных. Формат TIFF (Tagged Image File Format – самодокументируемый формат файлов изображений).
Этот формат читается как компьютерами PC, так и Macintosh. Он позволяет сохранять цветовые модели RGB, CMYK, LAB и другие, поддерживается многими графическими редакторами, благодаря чему используется в полиграфии. При сохранении этого формата в программе фотошоп сохраняется информация о слоях.
PSD – формат.
Это рабочий формат программы Photoshop. Он позволяет сохранять растровые изображения с многими слоями, с любой глубиной цвета. Обычно он используется как промежуточный формат при обработке изображений, которые затем окончательно сохраняются в формате JPEG. Он создает сжатый файл без потерь качества, однако имеет большой размер из-за наличия дополнительного объема информации, для постоянного хранения практически не используется.
GIF — формат.
Формат, разработанный компанией CompuServe был предназначен для передачи информации в сети. GIF {Graphics Interchange Format – формат графического обмена) до сих пор распространен в интернете. Он использует алгоритм сжатия Лемпеля-Зива-Уэлша (LZW), который служил для сжатия текстовых файлов, поэтому изображения, имеющие ряд одинаковых пикселей по горизонтали (наподобие текста) могут сжиматься значительно лучше изображений, имеющих вертикальные ряды. Этот формат отображает только 8-ми разрядные цвета, он больше используется для небольших значков и отображения линий.
GIF-формат обеспечивает чересстрочный графический обмен, при котором изображение отображается на экране монитора постепенно с все большей детализацией. Примерно так ̶ сначала отображается, скажем, каждая 8-я строка изображения, а затем постепенно заполняются все оставшиеся. К слову сказать, возможность чересстрочной развертки имеется теперь в программе фотошоп и для формата JPEG.
Окно сохранения изображения в файл в формате JPEG.
GIF также используется для анимации. При этом в формате хранится ряд изображений, которые при быстрой смене их последовательного показа создают эффект движения (как в кино).
PNG – формат.
Формат PNG создан для улучшения формата GIF и замены его форматом, который не требует лицензии для широкого использования. В отличие от GIF формат PNG может хранить альфа-каналы при обработке в фотошопе, а также неограниченное количество цветов.
PNG сжимает данные без потерь, поэтому сохраняет качество фотографии, что делает его очень удобным для хранения фотоснимков.
BMP — формат.
Это один из самых первых форматов файлов изображений. Он свободно читается любой программой, работающей с графикой, может сохранять информацию об изображении с глубиной цвета до 48 бит. Сейчас почти не используется.
Друзья! Если Вам показался интересным материал, поделитесь с друзьями.
Поделиться в соц. сетях
Об авторе
Я живу в г Новосибирске. Образование высшее — НГТУ, физикотехнический факультет. В настоящее время на пенсии. Семья: жена, две дочери, две внучки. Работал в последнее время в электронной промышленности в ОКБ по разработке и производству приборов ночного видения. Люблю музыку- классику, джаз, оперу, балет. Главное увлечение — любительская фотография.
Распространенные форматы файлов изображений — Круглосуточная служба технической поддержки заказчиков Shutterstock
Выбор изображений — это не просто поиск красивых картинок. Чтобы не только выбрать изображение, но и понять, какой тип изображений подходит под ваши потребности, требуются и творческие, и технические навыки. Поэтому мы подготовили это руководство, которое поможет определить грань между успехом и провалом для вашего проекта.
Нужны изображения для проекта? Внушительная коллекция Shutterstock из 70 миллионов изображений может помочь! Посмотрите нашу коллекцию.
Типы изображений
Изображения делятся на две основных категории: растровые и векторные.
Растровые изображения
Растровые изображения — это фотографии и сканированные документы.
Качество растровых изображений определяется разрешением. Разрешение измеряется в ppi (количестве пикселей на дюйм) или dpi (количестве точек на дюйм). PPI — это количество пикселей на экране, а dpi — количество капель чернил на печатной странице. Чем выше ppi и dpi, тем выше качество.
Обычно dpi выражается одним числом (большинство фотографий имеют разрешение минимум 300dpi), а ppi записывается как соотношение размеров (400x1080ppi).
Для коммерческой печати таких проектов, как книги или маркетинговые материалы, требуются изображения с высоким разрешением 300 dpi или более. В веб-приложениях и мобильных приложениях требуется гораздо более низкое разрешение. Поскольку файлы изображений с высоким разрешением имеют больший размер, в веб- и мобильных приложениях используют изображения с более низким разрешением для уменьшения времени загрузки.
Если увеличить размеры растрового изображения, его качество снизится. При уменьшении размера качество повышается.
Пример.
Если вы в два раза увеличите изображение размером два дюйма на два дюйма с разрешением 300dpi, его качество станет 150dpi. Если вы в два раза уменьшите его, то качество станет 600dpi.
С такими изображениями гораздо сложнее работать, чем с векторными.
Цветовые режимы, доступные для растровых изображений, различаются, но наиболее распространенными являются CMYK, RGB и Index.
Наиболее популярной программой для работы с растровой графикой является Photoshop.
Векторные изображения
Векторные изображения наиболее часто встречаются в коммерческой печати и хорошо подходят для иллюстраций, логотипов, графики с большим количеством текста, диаграмм и графиков.
В отличие от растровых изображений, качество векторных изображений не зависит от разрешения. Они сохраняют качество при любом размере, поэтому их часто используют для широкоформатной печати.
Типы файлов.
Windows Bitmap (BMP): растровое изображение
Формат разработан компанией Microsoft для своей операционной системы. Это изображения в высоком качестве без сжатия, поэтому размер файлов в этом формате обычно велик, и они не подходят для веб-приложений. Они не подходят для размещения в Интернете, и их качество меняется, если их увеличивать или уменьшать.
Joint Photographic Expert Group (JPG): растровое изображение
Самый распространенный формат, большинство фотоаппаратов сохраняют снимки в формате jpg. В данном формате применяется сжатие. Это означает, что каждый раз при изменении и сохранении изображения качество будет ухудшаться.
Graphic Interchange Format (GIF): растровое изображение
Этот формат является прародителем Интернет-графики. Он был изобретен в 1989 году. Размер файлов таких изображений мал, он поддерживает прозрачность и анимацию, поэтому его часто применяют в веб-разработке. В последнее время популярны анимированные gif-изображения из известных фильмов от Уилла Фаррела и других. Этот формат ограничен 256 цветами, поскольку в нем используется 8-битная цветовая палитра. Возможность чересстрочного сохранения означает более быструю загрузку в Интернете. Изображение будет быстро загружено в низком качестве, но после полной загрузки станут видны все детали.
Tagged Image File Format (TIF) растровое изображение
Довольно старый формат файлов, разработанный в 2009 году компанией Aldus для использования в высококачественной печати. Также распространен в коммерческой печати и приложениях для сканирования и отправки факсов. Он позволяет не терять качество, как при использовании jpg, и поддерживает различные методы сжатия. Несмотря на гибкость, формат не подходит для веб-графики.
Encapsulated Postscript (EPS): растровые и векторные изображения
Четкие линии этого формата прекрасно подходят для текста, инфографики и линейных чертежей. Позволяет с легкостью изменять векторные изображения и применять цветовую модель PANTONE и др. в приложениях для коммерческой печати. Исключением являются файлы EPS, создаваемые в программе Photoshop. Это простой TIF-файл с расширением EPS.
RAW: растровое изображение
Отлично подходит для фотографии, поскольку позволяет сохранить большинство данных, получаемых камерой, и тем самым получать лучшие изображения. Один из недостатков заключается в том, что варианты управления форматами фотографий ограничены возможностями Photoshop и программного обеспечения, поставляемого с камерой.
Portable Network Graphics (PNG): растровое изображение
Файлы небольшого размера отлично подходят для работы в Интернете. Поддерживает прозрачность и позволяет использовать только индексированные цвета.
Portable Document Format (PDF): растровые и векторные изображения
Хотя PDF не является форматом исключительно изображений, сегодня это универсальный формат файлов для настоящих профессионалов. Файл в формате PDF обычно создается в другом формате, и затем конвертируется в PDF. Пользователи в большинстве случаев не могут редактировать содержимое такого файла, поэтому он подходит для электронных книг, форм и крупных изображений. Качество изображения может быть высоким или низким в зависимости от способа создания файла.
10 способов изменить формат фото на компьютере
Многие пользователи сталкиваются с необходимостью изменить формат фото: перевести фотографию из одного формата в другой графический формат, например из формата «PNG» в «JPG» («JPEG»), или наоборот. В некоторых случаях, требуется использовать определенный графический формат, а в наличии у пользователя есть другой формат фотографии.
Графические файлы сохраняются в различных форматах, различающихся способами хранения информации и свойствами. В зависимости от формата к имени файла добавляется расширение, при помощи которого определяется тип хранящейся информации: изображение, видео, аудио, текст и т. п. Расширение файла отделяется от основного имени файла точкой. У одного формата может быть несколько расширений имен файлов.
Разные типы графических файлов отличаются по своим особенностям, поэтому бывает необходимо изменить формат изображения, для дальнейшего использования в конкретной программе, на удаленном сервисе, или для уменьшения размера файла. После изменения формата файла изменится его расширение.
Изображения бывают растровыми и векторными. В этой статье мы рассматриваем растровые форматы, в которых сохраняются изображения: фотография, картинка, скриншот (снимок экрана).
Сейчас наиболее популярны следующие форматы изображений:
- JPEG (JPG) — самый популярный формат фотографий с поддержкой большого количества цветов, в формате используется высокая степень сжатия.
- PNG — популярный формат рисунков с сжатием без потери качества, с поддержкой прозрачности.
- BMP — графический формат, созданный для Windows, фотографии хранятся в несжатом виде и занимают много места.
- TIFF (TIF) — формат использующий сжатие без потери качества с поддержкой огромного количества цветов.
- GIF — формат, используемый для создания анимированных изображений, часто используется в интернете, имеет ограниченное количество цветов.
Из-за обилия графических форматов и разницы их использования, перед пользователем встает вопрос, как изменять формат фото для уменьшения размера, изменения качества и т. п. Файлы некоторых графических форматов занимают довольно много места на диске, другие графические форматы нецелесообразно использовать, например, для хранения схем или чертежей, из-за нечетких деталей.
Нужна программа, чтобы изменить формат фотографии или другого изображения на компьютере. В этом руководстве вы найдете инструкции о том, как изменить формат фото на компьютере при помощи различных программ, входящих в состав Windows, или приложений от сторонних производителей. Использование онлайн сервисов для изменения формата фотографий мы рассмотрим в другой статье.
Как изменить формат картинки в Paint — 1 способ
Пользователь может изменить формат фото бесплатно на своем ПК при помощи программы Paint, которая входит в состав операционной системы Windows разных версий.
Сейчас мы посмотрим, как изменить формат фото с «PNG» на «JPG» помощью встроенной, стандартной программы Paint.
Выполните следующие действия:
- Войдите в меню «Пуск», найдите стандартные программы, а затем оттуда запустите программу Paint.
- Войдите в меню «Файл», нажмите «Открыть», выберите нужное изображение на компьютере.
Другой способ для открытия файла в Paint: щелкните по файлу правой кнопкой мыши, нажмите на пункт контекстного меню «Открыть с помощью», а затем выберите Paint.
- Снова войдите в меню «Файл», нажмите на «Сохранить как».
В окне «Сохранить как» предлагается выбор форматов изображений: «PNG», «JPEG», «BMP», «GIF», «Другие форматы» («TIFF» и «HEIC»).
- Нажмите на пункт «Изображение в формате JPEG», так как на этом примере, нам нужен данный формат для фотографии.
- В окне Проводника дайте имя файлу, выберите место для сохранения изображения.
Как изменить формат изображения на компьютере в программе Фотоальбом — 2 способ
Бесплатная программа Фотоальбом входит в состав пакета программ «Основные компоненты Windows Live». В настоящее время Microsoft прекратила развитие программы и распространение основных компонентов, но программу Фотоальбом можно скачать и установить на свой компьютер.
Для изменения формата изображения, пройдите следующие шаги:
- Откройте фотографию в программе Фотоальбом.
- В меню «Файл» нажмите на пункт «Создать копию…».
- В окне Проводника присвойте имя файлу, а в поле «Тип файла:» выберите подходящий формат: «JPG», «PNG», «TIFF», «WMPHOTO».
- Сохраните файл на компьютере.
Подробнее о работе в Фотоальбоме Windows Live смотрите тут.
Как изменить формат фотографии в FastStone Image Viewer — 3 способ
Программа для просмотра и обработки изображений FastStone Image Viewer позволяет сохранять файлы в другие графические форматы.
Выполните следующее:
- В окне программы FastStone Image Viewer выберите фотографию на своем ПК.
- На панели инструментов нажмите на кнопку «Сохранить как…», или из меню «Файл» выберите пункт «Сохранить как…».
- В окне «Сохранить как» выберите местоположение и нужный формат.
В FastStone Image Viewer поддерживается сохранение изображений в следующих форматах: «BMP», «GIF», «JPEG», «JPEG2000», «PCX», «PNG», «PPM», «TGA», «TIFF», «PDF».
Перейдя по ссылке на страницу сайта, вы найдете обзор программы FastStone Image Viewer.
Изменение типа формата файла фото в XnView — 4 способ
Бесплатная программа-просмотрщик XnView поддерживает огромное количество графических форматов файлов. С помощью этого приложения исходный формат можно перевести в другой подходящий графический формат.
Пройдите шаги:
- Откройте фотографию в программе XnView.
- В меню «Файл» нажмите на пункт «Сохранить как», или нажмите на кнопку «Сохранить как», находящуюся на панели инструментов.
- В окне «Сохранить файл» выберите нужный формат, а затем сохраните изображение на компьютере.
Подробнее о программе XnView написано здесь.
Изменяем формат фотографии в IrfanView — 5 способ
Бесплатный просмотрщик изображений IrfanView помимо других возможностей, может сохранять исходные файлы в других графических форматах.
Пройдите следующие шаги:
- Откройте фото в программе IrfanView
- Нажмите на кнопку «Сохранить как» панели инструментов, или войдите в меню «Файл» и нажмите там на пункт «Сохранить как».
- Выберите один из поддерживаемых форматов, например, чтобы изменить формат фото с «JPG» на «PNG».
- Сохраните картинку на своем компьютере.
Статья про программу IrfanView находится здесь.
Изменение формата фото в Paint.NET — 6 способ
Сейчас мы изменим формат графического файла в бесплатном графическом редакторе Paint.NET. В этом графическом редакторе можно выполнять различные операции с изображениями, имеется поддержка работы со слоями.
Проделайте следующее:
- Запустите программу Paint.NET на компьютере, а затем откройте фотографию.
- В окне программы войдите в меню «Файл», щелкните по «Сохранить как…».
- Выберите подходящий формат, а затем сохраните фото на ПК.
Как изменить формат фотографии в Adobe Photoshop — 7 способ
В этой статье нельзя обойти без внимания самое мощное средство для редактирования фотографий — программу Adobe Photoshop. В Фотошопе можно поменять формат изображения, выбрав другой тип графического формата.
В программе Adobe Photoshop проделайте следующее:
- Откройте нужную фотографию в Фотошопе.
- Войдите в меню «Файл», выберите пункт «Сохранить как…».
- В окне «Сохранение» выберите один из поддерживаемых графических форматов, а затем сохраните файл на компьютере.
Сохраняем изображение в другом формате при помощи Word — 8 способ
В программе Microsoft Word имеется способ для сохранения изображения в другом формате. Текстовый процессор поддерживает вставку картинок, которые затем можно сохранить в других поддерживаемых форматах.
Необходимо пройти шаги:
- Вставьте изображение в текстовый редактор Word.
- Кликните по изображению правой кнопкой мыши, а в контекстном меню нажмите на «Сохранить как рисунок…».
- В окне Проводника выберите подходящий формат, а потом сохраните файл в нужном месте.
В программе Word поддерживаются графические форматы: «PNG», «JPEG», «GIF», «TIFF», «BMP».
Конвертирование фото в другой формат в Format Factory — 9 способ
Бесплатная программа Format Factory (Фабрика Форматов) — конвертер между разными мультимедийными форматами файлов, в том числе файлов графических форматов.
Потребуется пройти следующие шаги:
- В окне «Фабрика Форматов» нажмите на раздел «Фото», а затем выберите подходящий формат для преобразования.
- В открывшемся окне нажмите на кнопку «Открыть файл», для добавления в программу исходного файла.
- В главном окне программы Format Factory нажмите на кнопку «Старт».
В программе Фабрика Форматов поддерживается преобразование между следующими графическими форматами: «WebP», «JPG», «PNG», «ICO», «BMP», «GIF», «TIF», «TGA».
На моем сайте есть подробная статья про Format Factory.
Преобразование фото в другой формат в Movavi Video Converter — 10 способ
Программа Movavi Video Converter, помимо конвертирования видео, поддерживает преобразование изображений некоторых форматов между разными типами файлов.
Проделайте следующие действия:
- В окне программы Movavi Видео Конвертер нажмите на кнопку «Добавить файлы», а затем на кнопку «Добавить изображения».
В Movavi Video Converter поддерживаются графические форматы: «JPG», «GIF», «PNG», «BMP», «TIFF», а также форматы для публикаций в социальных сетях LiveJournal и Tumblr.
- Добавьте нужный файл в программу со своего ПК.
- В разделе «Изображения» выберите подходящий формат.
- Нажмите на кнопку «Старт».
Программа Мовави Видео Конвертер поддерживает пакетное конвертирование изображений.
Выводы статьи
Некоторым пользователям, при работе с фотографиями, требуется изменить формат графического файла, преобразовать его в файл другого формата. В результате, у пользователя появится новый графический файл: фото, изображение или картинка. Выполнить эту операцию можно при помощи программ на компьютере, используя встроенное приложение Windows или стороннее программное обеспечение.
Похожие публикации:
Форматы файлов для фотосъемки
Современные цифровые фотоаппараты, начиная с продвинутых моделей, предлагают пользователю на выбор несколько форматов файлов, в которых может производиться запись фотографий на карту памяти. Чаще всего это форматы JPEG и RAW, иногда к ним добавляется и формат TIFF. В этой статье я расскажу об особенностях этих трех форматов и помогу вам определиться с выбором формата для съемки. Чтобы понять, как образуется тот или иной формат в фотоаппарате, давайте кратко рассмотрим основные этапы формирования изображения, от экспонирования матрицы до записи готового результата на карту памяти.
Свет, попадая на матрицу, изменяет величину электрического заряда элемента (который впоследствии станет пикселем изображения). Величины заряда со всех элементов матрицы фиксируются и проходят оцифровку аналого-цифровым преобразователем, а затем кодируются в специальный формат, который получил общее название RAW (от англ. «сырой). Строго говоря, это не формат, а название множества форматов необработанных данных с сенсора камеры. У каждого производителя свой формат данных, поэтому при выходе новой модели камеры программы для обработки RAW –файлов не могут открыть изображение до тех пор, пока не будет выпущено обновление, куда включены данные о формате файлов новых фотокамер.
Затем набор данных обрабатывается компьютером камеры. При этом происходит исправление баланса белого, яркости, контрастности, удаление шумов, повышение резкости, уменьшение глубины цвета до 8 бит. То есть камера делает все за нас, по одному ей ведомому алгоритму, без учета индивидуальных особенностей изображения. Часть исходной информации, заложенной в формате RAW, теряется при таких преобразованиях, но значительного ухудшения качества не происходит, так как используется алгоритм сжатия без потерь. В некоторых моделях камер можно записать изображение на карту памяти после этой стадии обработки. Это будет формат TIFF.
Далее производится сжатие информации об изображении. При этом используется алгоритм сжатия с потерями, то есть, происходит необратимое ухудшение качества изображения. Такой файл будет занимать значительно меньше места, но в нем будет содержаться всего 30-40% от исходной информации, зафиксированной сенсором камеры.
Теперь подробнее о каждом формате, его достоинствах и недостатках
Формат JPEG.
Самый распространенный формат изображений – JPEG ( Joint Photografic Experts Group — группа экспертов в области фотографии, разработавшая этот алгоритм кодирования). Он позволяет получать изображения хорошего качества при небольшом размере файла.
Достоинства формата: малый размер файла, высокая совместимость со всеми устройствами (изображения можно просмотреть на любом компьютере или мобильном устройстве), полная поддержка всеми интернет-браузерами.
Недостатки формата: вызваны использованием алгоритма сжатия с потерями. При высокой степени сжатия объем файла уменьшается, но качество изображения значительно ухудшается, появляются блочные артефакты сжатия.
Изображение в формате JPEG нежелательно повторно редактировать и сохранять, так как каждое пересохранение – это новое сжатие изображения с соответствующими потерями. Если вам нужно продолжать работу над изображением, сохраняйте его в формате TIFF или PSD. Эти форматы используют алгоритмы сжатия данных без потерь, поэтому ухудшения качества при многократном пересохранении не происходит
Формат TIFF
TIFF (Tagged Image File Format) также является распространенным форматом изображений. Он использует алгоритмы сжатия без потерь, а также может сохранять данные и без сжатия. Файлы формата TIFF по объему значительно больше, чем файлы JPEG. Так как сжатие происходит без потерь либо не происходит вовсе, данный формат обеспечивает более высокое качество изображения и часто применяется для качественной подготовки изображений к печати, особенно большим форматом.
Достоинства формата: высокое качество изображения, использование сжатия данных без потерь
Недостатки формата: очень большой объем файлов, в 8-10 раз больше, чем изображений в формате JPEG. Если используется глубина цвета 16 бит, объем файла увеличивается еще вдвое.
Формат RAW
Файл формата RAW, как мы уже говорили, представляет собой данные с матрицы фотокамеры, оцифрованные процессором и «упакованные» с помощью специального алгоритма в стандартизованный производителем камеры формат и сжатые без потерь, без какой-либо обработки. При этом формат RAW занимает значительно меньше места, чем TIFF, но больше, чем JPEG, и содержит 10 – 16 разрядные данные, в зависимости от модели камеры.
Вообще, все цифровые камеры снимают в формате RAW, даже самые простые компактные. Просто не во всех камерах этот формат является доступным для пользователя. В тех случаях, когда камера поддерживает съемку в формате RAW, к ней обязательно прилагается программное обеспечение, позволяющее производить элементарную коррекцию в этом формате и конвертировать его в другие, например, JPEG и TIFF.
Файл в формате RAW невозможно испортить неумелой обработкой – он непосредственно не редактируется и всегда остается в неизменном виде. Вся обработка записывается в небольшой файлик-инструкцию, который используется программой для считывания информации об обработке и визуализации извлеченного из RAW –файла изображения с учетом примененных корректировок. Кроме того, формат RAW позволяет редактировать многие параметры с минимальными потерями качества, например, исправлять баланс белого, восстанавливать казалось бы, потерянные детали в светлых или темных областях, исправлять искажения оптики и многое другое. Чтобы лучше показать преимущества формата RAW, я записал небольшой видеоролик, в котором показываю восстановление засвеченных областей изображения.
Достоинства формата RAW: широчайшие возможности редактирования изображения с минимальными потерями качества, невозможность испортить исходный файл неумелой обработкой.
Недостатки формата RAW: большой объем файла, требуются специальные программы для просмотра и редактирования.
В каком формате снимать?
Выбор формата изображения для съемки зависит от многих факторов. Многие начинающие фотографы совершают большую ошибку, снимая только в формате RAW, игнорируя формат JPEG как ущербный. Действительно, в тех случаях, когда позволяет ситуация, лучше всего использовать формат RAW. Но в репортажной или спортивной съемке, к примеру, пренебрежение форматом JPEG может стоить вам пропущенных удивительных кадров. Все дело в том, что формат RAW требует большого буферного объема памяти в камере, а также быстрого процессора. При съемке длинной серии в формате RAW вас не спасут даже быстрые карты памяти – буфер камеры все равно заполнится и камера не сможет снимать до тех пор, пока он не освободится. Это время занимает порядка нескольких секунд, вполне достаточно, чтобы пропустить хороший кадр. Формат JPEG в этом случае позволит не ограничивать себя и снимать сколь угодно длинные серии кадров. В условиях студии или при постановочной фотосъемке, а также при любых условиях, когда не требуется быстрая серийная съемка, лучше использовать формат RAW.
Формат TIFF для съемки использовать нецелесообразно — он занимает очень много места на карте памяти, а данных в нем записывается меньше, чем в формате RAW.
JPEG — Википедия
JPEG (произносится «джейпег»[1], англ. Joint Photographic Experts Group, по названию организации-разработчика) — один из популярных растровых графических форматов, применяемый для хранения фотографий и подобных им изображений. Файлы, содержащие данные JPEG, обычно имеют расширения (суффиксы) .jpg, .jfif, .jpe или .jpeg. Однако .jpg является самым популярным из них на всех платформах. MIME-тип — image/jpeg.
Фотография заката в формате JPEG с уменьшением степени сжатия слева направоАлгоритм JPEG позволяет сжимать изображение как с потерями, так и без потерь (режим сжатия lossless JPEG). Поддерживаются изображения с линейным размером не более 65535 × 65535 пикселов.
В 2010 году с целью сохранения для потомков информации о популярных в начале XXI века цифровых форматах учёные из проекта PLANETS заложили инструкции по чтению формата JPEG в специальную капсулу, которую поместили в специальное хранилище в швейцарских Альпах[2][3].
Алгоритм JPEG наиболее эффективен для сжатия фотографий и картин, содержащих реалистичные сцены с плавными переходами яркости и цвета. Наибольшее распространение JPEG получил в цифровой фотографии и для хранения и передачи изображений с использованием Интернета.
Формат JPEG в режиме сжатия с потерями малопригоден для сжатия чертежей, текстовой и знаковой графики, где резкий контраст между соседними пикселами приводит к появлению заметных артефактов. Такие изображения целесообразно сохранять в форматах без потерь, таких как JPEG-LS, TIFF, GIF, PNG, либо использовать режим сжатия Lossless JPEG.
JPEG (как и другие форматы сжатия с потерями) не подходит для сжатия изображений при многоэтапной обработке, так как искажения в изображения будут вноситься каждый раз при сохранении промежуточных результатов обработки.
JPEG не должен использоваться и в тех случаях, когда недопустимы даже минимальные потери, например при сжатии астрономических или медицинских изображений. В таких случаях может быть рекомендован предусмотренный стандартом JPEG режим сжатия Lossless JPEG (который, однако, не поддерживается большинством популярных кодеков) или стандарт сжатия JPEG-LS.
При сжатии изображение преобразуется из цветового пространства RGB в YCbCr. Следует отметить, что стандарт JPEG (ISO/IEC 10918-1) никак не регламентирует выбор именно YCbCr, допуская и другие виды преобразования (например, с числом компонентов[4], отличным от трёх), и сжатие без преобразования (непосредственно в RGB), однако спецификация JFIF (JPEG File Interchange Format, предложенная в 1991 году специалистами компании C-Cube Microsystems, и ставшая в настоящее время стандартом де-факто) предполагает использование преобразования RGB->YCbCr.
После преобразования RGB->YCbCr для каналов изображения Cb и Cr, отвечающих за цвет, может выполняться «прореживание» (subsampling[5]), которое заключается в том, что каждому блоку из 4 пикселей (2х2) яркостного канала Y ставятся в соответствие усреднённые значения Cb и Cr (схема прореживания «4:2:0»[6]). При этом для каждого блока 2х2 вместо 12 значений (4 Y, 4 Cb и 4 Cr) используется всего 6 (4 Y и по одному усреднённому Cb и Cr). Если к качеству восстановленного после сжатия изображения предъявляются повышенные требования, прореживание может выполняться лишь в каком-то одном направлении — по вертикали (схема «4:4:0») или по горизонтали («4:2:2»), или не выполняться вовсе («4:4:4»).
Пример изображения в формате jpg.Стандарт допускает также прореживание с усреднением Cb и Cr не для блока 2х2, а для четырёх расположенных последовательно (по вертикали или по горизонтали) пикселей, то есть для блоков 1х4, 4х1 (схема «4:1:1»), а также 2х4 и 4х2 (схема «4:1:0»). Допускается также использование различных типов прореживания для Cb и Cr, но на практике такие схемы применяются исключительно редко.
Далее яркостный компонент Y и отвечающие за цвет компоненты Cb и Cr разбиваются на блоки 8х8 пикселей. Каждый такой блок подвергается дискретному косинусному преобразованию (ДКП). Полученные коэффициенты ДКП квантуются (для Y, Cb и Cr в общем случае используются разные матрицы квантования) и пакуются с использованием кодирования серий и кодов Хаффмана. Стандарт JPEG допускает также использование значительно более эффективного арифметического кодирования, однако из-за патентных ограничений (патент на описанный в стандарте JPEG арифметический QM-кодер принадлежит IBM) на практике оно используется редко. В популярную библиотеку libjpeg последних версий включена поддержка арифметического кодирования, но с просмотром сжатых с использованием этого метода изображений могут возникнуть проблемы, поскольку многие программы просмотра не поддерживают их декодирование.
Матрицы, используемые для квантования коэффициентов ДКП, хранятся в заголовочной части JPEG-файла. Обычно они строятся так, что высокочастотные коэффициенты подвергаются более сильному квантованию, чем низкочастотные. Это приводит к огрублению мелких деталей на изображении. Чем выше степень сжатия, тем более сильному квантованию подвергаются все коэффициенты.
При сохранении изображения в JPEG-файле указывается параметр качества, задаваемый в некоторых условных единицах, например, от 1 до 100 или от 1 до 10. Большее число обычно соответствует лучшему качеству (и большему размеру сжатого файла). Однако даже при использовании наивысшего качества (соответствующего матрице квантования, состоящей из одних только единиц) восстановленное изображение не будет в точности совпадать с исходным, что связано как с конечной точностью выполнения ДКП, так и с необходимостью округления значений Y, Cb, Cr и коэффициентов ДКП до ближайшего целого. Режим сжатия Lossless JPEG, не использующий ДКП, обеспечивает точное совпадение восстановленного и исходного изображений, однако его малая эффективность (коэффициент сжатия редко превышает 2) и отсутствие поддержки со стороны разработчиков программного обеспечения не способствовали популярности Lossless JPEG.
Стандарт JPEG предусматривает два основных способа представления кодируемых данных.
Наиболее распространённым, поддерживаемым большинством доступных кодеков, является последовательное (sequential JPEG) представление данных, предполагающее последовательный обход кодируемого изображения разрядностью 8 бит на компоненту (или 8 бит на пиксель для чёрно-белых полутоновых изображений) поблочно слева направо, сверху вниз. Над каждым кодируемым блоком изображения осуществляются описанные выше операции, а результаты кодирования помещаются в выходной поток в виде единственного «скана», то есть массива кодированных данных, соответствующего последовательно пройденному («просканированному») изображению. Основной или «базовый» (baseline) режим кодирования допускает только такое представление (и хаффмановское кодирование квантованных коэффициентов ДКП). Расширенный (extended) режим наряду с последовательным допускает также прогрессивное (progressive JPEG) представление данных, кодирование изображений разрядностью 12 бит на компоненту/пиксель (сжатие таких изображений спецификацией JFIF не поддерживается) и арифметическое кодирование квантованных коэффициентов ДКП.
В случае progressive JPEG сжатые данные записываются в выходной поток в виде набора сканов, каждый из которых описывает изображение полностью с всё большей степенью детализации. Это достигается либо путём записи в каждый скан не полного набора коэффициентов ДКП, а лишь какой-то их части: сначала — низкочастотных, в следующих сканах — высокочастотных (метод «spectral selection» то есть спектральных выборок), либо путём последовательного, от скана к скану, уточнения коэффициентов ДКП (метод «successive approximation», то есть последовательных приближений). Такое прогрессивное представление данных оказывается особенно полезным при передаче сжатых изображений с использованием низкоскоростных каналов связи, поскольку позволяет получить представление обо всём изображении уже после передачи незначительной части JPEG-файла.
Обе описанные схемы (и sequential, и progressive JPEG) базируются на ДКП и принципиально не позволяют получить восстановленное изображение абсолютно идентичным исходному. Однако стандарт допускает также сжатие, не использующее ДКП, а построенное на основе линейного предсказателя (lossless, то есть «без потерь», JPEG), гарантирующее полное, бит-в-бит, совпадение исходного и восстановленного изображений. При этом коэффициент сжатия для фотографических изображений редко достигает 2, но гарантированное отсутствие искажений в некоторых случаях оказывается востребованным. Заметно большие степени сжатия могут быть получены при использовании не имеющего, несмотря на сходство в названиях, непосредственного отношения к стандарту JPEG ISO/IEC 10918-1 (ITU T.81 Recommendation) метода сжатия JPEG-LS, описываемого стандартом ISO/IEC 14495-1 (ITU T.87 Recommendation).
Файл JPEG содержит последовательность маркеров, каждый из которых начинается с байта 0xFF, свидетельствующего о начале маркера, и байта-идентификатора. Некоторые маркеры состоят только из этой пары байтов, другие же содержат дополнительные данные, состоящие из двухбайтового поля с длиной информационной части маркера (включая длину этого поля, но за вычетом двух байтов начала маркера, то есть 0xFF и идентификатора) и собственно данных. Такая структура файла позволяет быстро отыскать маркер с необходимыми данными (например, с длиной строки, числом строк и числом цветовых компонентов сжатого изображения).
Маркер | Байты | Длина | Назначение | Комментарии |
---|---|---|---|---|
SOI | 0xFFD8 | нет | Начало изображения | |
SOF0 | 0xFFC0 | переменный размер | Начало фрейма (базовый, ДКП) | Показывает, что изображение кодировалось в базовом режиме с использованием ДКП и кода Хаффмана. Маркер содержит число строк и длину строки изображения (двухбайтовые поля со смещением соответственно 5 и 7 относительно начала маркера), количество компонентов (байтовое поле со смещением 9 относительно начала маркера), число бит на компонент — строго 8 (байтовое поле со смещением 4 относительно начала маркера), а также соотношение компонентов (например, 4:2:0). |
SOF1 | 0xFFC1 | переменный размер | Начало фрейма (расширенный, ДКП, код Хаффмана) | Показывает, что изображение кодировалось в расширенном (extended) режиме с использованием ДКП и кода Хаффмана. Маркер содержит число строк и длину строки изображения, количество компонентов, число бит на компонент (8 или 12), а также соотношение компонентов (например, 4:2:0). |
SOF2 | 0xFFC2 | переменный размер | Начало фрейма (прогрессивный, ДКП, код Хаффмана) | Показывает, что изображение кодировалось в прогрессивном режиме с использованием ДКП и кода Хаффмана. Маркер содержит число строк и длину строки изображения, количество компонентов, число бит на компонент (8 или 12), а также соотношение компонентов (например, 4:2:0). |
DHT | 0xFFC4 | переменный размер | Содержит таблицы Хаффмана | Задает одну или более таблиц Хаффмана. |
DQT | 0xFFDB | переменный размер | Содержит таблицы квантования | Задает одну или более таблиц квантования. |
DRI | 0xFFDD | 4 байта | Указывает длину рестарт-интервала | Задает интервал между маркерами RST n в макроблоках. При отсутствии DRI появление в потоке кодированных данных маркеров RSTn недопустимо и считается ошибкой. Если при кодировании маркеры RST n не применяются, маркер DRI либо не используется вовсе, либо интервал повторений в нём указывается равным 0. |
SOS | 0xFFDA | переменный размер | Начало сканирования | Начало первого или очередного скана изображения с направлением обхода слева направо сверху вниз. Если использовался базовый режим кодирования, используется один скан. При использовании прогрессивных режимов используется несколько сканов. Маркер SOS является разделяющим между информативной (заголовком) и закодированной (собственно сжатыми данными) частями изображения. |
RSTn | 0xFFDn | нет | Перезапуск | Маркеры перезапуска используются для сегментирования кодированных энтропийным кодером данных. В каждом сегменте данные декодируются независимо, что позволяет распараллелить процедуру декодирования. При повреждении кодированных данных в процессе передачи или хранения JPEG-файла использование маркеров перезапуска позволяет ограничить потери (макроблоки из неповреждённых сегментов будут восстановлены правильно). Вставляется в каждом r-м макроблоке, где r — интервал перезапуска DRI маркера. Не используется при отсутствии DRI маркера. n, младшие 3 бита маркера кода, циклы от 0 до 7. |
APPn | 0xFFEn | переменный размер | Задаётся приложением | Например, в EXIF JPEG-файла используется маркер APP1 для хранения метаданных, расположенных в структуре, основанной на TIFF. |
COM | 0xFFFE | переменный размер | Комментарий | Содержит текст комментария. |
EOI | 0xFFD9 | нет | Конец закодированной части изображения. |
К недостаткам сжатия по стандарту JPEG следует отнести появление на восстановленных изображениях при высоких степенях сжатия характерных артефактов: изображение рассыпается на блоки размером 8×8 пикселей (этот эффект особенно заметен на областях изображения с плавными изменениями яркости), в областях с высокой пространственной частотой (например, на контрастных контурах и границах изображения) возникают артефакты в виде шумовых ореолов. Следует отметить, что стандарт JPEG (ISO/IEC 10918-1, Annex K, п. K.8) предусматривает использование специальных фильтров для подавления блоковых артефактов, но на практике подобные фильтры, несмотря на их высокую эффективность, практически не используются.
Однако, несмотря на недостатки, JPEG получил очень широкое распространение из-за достаточно высокой (относительно существовавших во время его появления альтернатив) степени сжатия, поддержке сжатия полноцветных изображений и относительно невысокой вычислительной сложности.
Для ускорения процесса сжатия по стандарту JPEG традиционно используется распараллеливание вычислений, в частности — при вычислении ДКП. Исторически одна из первых попыток ускорить процесс сжатия с использованием такого подхода описана в опубликованной в 1993 году статье Касперовича и Бабкина[8], в которой предлагалась оригинальная аппроксимация ДКП, делающая возможным эффективное распараллеливание вычислений с использованием 32-разрядных регистров общего назначения процессоров Intel 80386. Появившиеся позже более производительные вычислительные схемы использовали SIMD-расширения набора инструкций процессоров архитектуры x86. Значительно лучших результатов позволяют добиться схемы, использующие вычислительные возможности графических ускорителей (технологии NVIDIA CUDA и AMD FireStream) для организации параллельных вычислений не только ДКП, но и других этапов сжатия JPEG (преобразование цветовых пространств, run-level, статистическое кодирование и т. п.), причём для каждого блока 8х8 кодируемого или декодируемого изображения. В статье[9] была представлена реализация распараллеливания всех стадий алгоритма JPEG по технологии CUDA, что значительно повысило скорость сжатия и декодирования по стандарту JPEG.
Как устроен формат JPEG / Habr
Изображения формата JPEG встречаются повсюду в нашей цифровой жизни, но за этим покровом осведомлённости скрываются алгоритмы, устраняющие детали, не воспринимаемые человеческим глазом. В итоге получается высочайшее визуальное качество при наименьшем размере файла – но как конкретно всё это работает? Давайте посмотрим, чего именно не видят наши глаза!
Легко принять, как само собой разумеющееся, возможность отправить фотку другу, и не волноваться по поводу того, какое устройство, браузер или операционную систему он использует – однако так было не всегда. К началу 1980-х компьютеры умели хранить и показывать цифровые изображения, однако по поводу наилучшего способа для этого существовало множество конкурирующих идей. Нельзя было просто отправить изображение с одного компьютера на другой и надеяться, что всё заработает.
Для решения этой проблемы в 1986 году был собран комитет экспертов со всего мира под названием «Объединённая группа экспертов по фотографии» (Joint Photographic Experts Group, JPEG), основанный в рамках совместной работы Международной организации по стандартизации (ISO) и Международной электротехнической комиссии (IEC) – двух международных организаций по стандартизации, штаб-квартира которых расположена в Женеве (Швейцария).
Группа людей под названием JPEG создала стандарт сжатия цифровых изображений JPEG в 1992 году. Любой человек, использовавший интернет, вероятно, встречался с изображениями в кодировке JPEG. Это самый распространённый способ кодирования, отправки и хранения изображений. От веб-страниц до емейла и соцсетей, JPEG используется миллиарды раз в день – практически каждый раз, когда мы смотрим изображение онлайн или отправляем его. Без JPEG веб был бы менее ярким, более медленным, и, вероятно, в нём было бы меньше фоток котиков!
Эта статья – о том, как декодировать JPEG изображение. Иначе говоря, о том, что требуется для преобразования сжатых данных, хранящихся на компьютере, в изображение, появляющееся на экране. Об этом стоит знать не только потому, что это важно для понимания технологии, которую мы используем ежедневно, но и потому, что раскрывая уровни сжатия, мы лучше узнаём восприятие и зрение, а также то, к каким деталям наши глаза восприимчивей всего.
Кроме того, играться с изображениями таким способом очень интересно.
Заглядывая внутрь JPEG
На компьютере всё хранится в виде последовательности двоичных чисел. Обычно эти биты, нули и единицы, группируются по восемь, составляя байты. Когда вы открываете JPEG изображение на компьютере, что-то (браузер, операционка, ещё что-то) должно декодировать байты, восстановив изначальное изображение в виде списка цветов, которые можно показать.
Если вы скачаете эту умильную фотографию кота и откроете её в текстовом редакторе, вы увидите кучу бессвязных символов.
Здесь я использую Notepad++ для изучения содержимого файла, поскольку обычные текстовые редакторы, типа Notepad из Windows, испортят двоичный файл после сохранения, и он перестанет удовлетворять формату JPEG.
Открывая изображение в текстовом редакторе, вы сбиваете компьютер с толку, точно так же, как вы сбиваете с толку свой мозг, когда потрёте глаза и начинаете видеть цветные пятна!
Эти пятна, которые вы видите, известны, как фосфены, и не являются результатом воздействия светового стимула или галлюцинациями, порождёнными разумом. Они возникают, потому что ваш мозг считает, что любые электрические сигналы в глазных нервах передают информацию о свете. Мозгу необходимо делать такие предположения, поскольку никак нельзя узнать, является ли сигнал звуком, видением или чем-то ещё. Все нервы в теле передают абсолютно одинаковые электрические импульсы. Давя на глаза, вы отправляете сигналы, не являющиеся зрительными, но активирующие рецепторы глаза, что ваш мозг интерпретирует – в данном случае, неверно – как нечто зрительное. Вы буквально способны видеть давление!
Забавно думать о том, насколько компьютеры похожи на мозг, однако это также является полезной аналогией, иллюстрирующей, насколько сильно значение данных – передаваемых по телу нервами, или хранящихся на компьютере – зависит от их интерпретации. Все двоичные данные состоят из нулей и единиц, базовых компонентов, способных передавать информацию любого вида. Ваш компьютер часто догадывается, как интерпретировать их при помощи подсказок, например, расширений файлов. А сейчас мы заставляем его интерпретировать их как текст, поскольку именно этого ожидает текстовый редактор.
Чтобы понять, как декодировать JPEG, нам нужно увидеть сами изначальные сигналы – двоичные данные. Это можно сделать при помощи шестнадцатеричного редактора, или же прямо на веб-странице оригинала статьи! Там есть изображение, рядом с которым в текстовом поле приведены все его байты (кроме заголовка), представленные в десятичном виде. Вы можете менять их, и скрипт перекодирует и выдаст новое изображение на лету.
Можно узнать многое, просто играясь с этим редактором. К примеру, можете ли вы сказать, в каком порядке хранятся пиксели?
В этом примере странно то, что изменение некоторых чисел вообще не влияет на изображение, а, например, если заменить число 17 на 0 в первой строке, то фотка полностью испортится!
Другие изменения, например, замена 7 на строке 1988 на число 254 изменяет цвет, но только последующих пикселей.
Возможно, наиболее странным будет то, что некоторые числа меняют не только цвет, но и форму изображения. Измените 70 в строке 12 на 2 и посмотрите на верхний ряд изображения, чтобы увидеть, что я имею в виду.
И вне зависимости от того, какое JPEG изображение вы используете, вы всегда будете находить эти загадочные шахматные последовательности при редактировании байтов.
Играясь с редактором, тяжело понять, как воссоздаётся фотка из этих байтов, поскольку JPEG сжатие состоит из трёх различных технологий, применяющихся последовательно по уровням. Мы изучим каждую из них отдельно, чтобы раскрыть наблюдаемое нами загадочное поведение.
Три уровня JPEG сжатия:
- Цветовая субдискретизация.
- Дискретное косинусное преобразование и дискретизация.
- Кодирование длин серий, дельта и Хаффмана
Дабы вы могли представить себе масштабы сжатия, обратите внимание, что изображение, приведённое выше, представляет 79 819 чисел, то есть, около 79 Кб. Если бы мы хранили его без сжатия, для каждого пикселя потребовалось бы по три числа – для красной, зелёной и синей составляющей. Это составило бы 917 700 чисел, или ок. 917 Кб. В результате JPEG сжатия итоговый файл уменьшился больше чем в 10 раз!
На самом деле, это изображение можно сжать гораздо сильнее. Снизу приведены два изображения рядом – фотка справа была ужата до 16 Кб, то есть в 57 раз меньше, чем несжатая версия!
Если присмотреться, будет видно, что эти изображения не идентичны. Оба они – картинки с JPEG сжатием, однако правая гораздо меньше по объёму. Также она выглядит чуть похуже (посмотрите на квадраты цветов фона). Поэтому JPEG ещё называют сжатием с потерями; в процессе сжатия изображение меняется и теряет некоторые детали.
1. Цветовая субдискретизация
Вот изображение с применением только первого уровня сжатия.
(Интерактивная версия – в оригинале статьи). Удаление одного числа рушит все цвета. Однако если удалить ровно шесть чисел, это практически не влияет на изображение.
Теперь числа чуть проще расшифровать. Это почти что простой список цветов, у которого каждый байт изменяет ровно один пиксель, но при этом он уже в два раза меньше несжатого изображения (которое занимало бы ок. 300 Кб в таком уменьшенном размере). Догадаетесь, почему?
Можно видеть, что эти числа не обозначают стандартные красную, зелёную и синюю компоненты, поскольку если заменить все числа нулями, мы получим зелёное изображение (а не белое).
Это потому, что эти байты обозначают Y (яркость),
Cb (относительная голубизна),
и Cr (относительная краснота) картинки.
Почему не использовать RGB? Ведь именно так работает большинство современных экранов. Ваш монитор может демонстрировать любой цвет, включая красный, зелёный и синий цвета с разной интенсивностью для каждого пикселя. Белый получается включением всех трёх на полную яркость, а чёрный – их отключением.
Это также очень похоже на работу человеческого глаза. Цветовые рецепторы наших глаз называются «колбочки», и делятся на три типа, каждый из которых более чувствителен либо к красному, либо к зелёному, либо к синему цветам [колбочки S-типа чувствительны в фиолетово-синей (S от англ. Short — коротковолновый спектр), M-типа — в зелено-желтой (M от англ. Medium — средневолновый), и L-типа — в желто-красной (L от англ. Long — длинноволновый) частях спектра. Наличие этих трёх видов колбочек (и палочек, чувствительных в изумрудно-зелёной части спектра) даёт человеку цветное зрение. / прим. перев.]. Палочки, другой тип фоторецепторов в наших глазах, способны улавливать только изменения в яркости, однако они гораздо более чувствительные. В наших глазах есть около 120 млн палочек и всего 6 млн колбочек.
Поэтому наши глаза гораздо лучше замечают изменения в яркости, чем изменения в цвете. Если отделить цвет от яркости, можно убрать немного цвета, и никто ничего не заметит. Цветовая субдискретизация – это процесс представления цветовых компонентов изображения в меньшем разрешении по сравнению с компонентами яркости. В примере выше у каждого пикселя ровно один компонент Y, а у каждой отдельной группы из четырёх пикселей есть ровно одна компонента Cb и одна Cr. Поэтому изображение содержит в четыре раза меньше цветовой информации, чем было у оригинала.
Цветовое пространство YCbCr используется не только в JPEG. Его изначально придумали в 1938 году для телепередач. Не у всех есть цветной телевизор, поэтому разделение цвета и яркости позволило всем получать один и тот же сигнал, а телевизоры без цвета просто использовали только компонент яркости.
Поэтому удаление одного числа из редактора полностью рушит все цвета. Компоненты хранятся в виде Y Y Y Y Cb Cr (на самом деле, не обязательно в таком порядке – порядок хранения задаётся в заголовке файла). Удаление первого числа приведёт к тому, что первое значение Cb будет воспринято, как Y, Cr как Cb, и в целом получится эффект домино, переключающий все цвета картинки.
Спецификация JPEG не обязывает вас использовать YCbCr. Но в большинстве файлов она используются, поскольку она даёт изображения лучшего качества после субдискретизации по сравнению с RGB. Но вам не обязательно верить мне на слово. Посмотрите сами в табличке ниже, как будет выглядеть субдискретизация каждого отдельного компонента как в RGB, так и в YCbCr.
(Интерактивная версия – в оригинале статьи).
Удаление синего не так заметно, как красного или зелёного. Всё потому, что из шести миллионов колбочек в ваших глазах около 64% чувствительны к красному, 32% к зелёному и 2% к синему.
Субдискретизация компонента Y (слева внизу) видна лучше всего. Заметно даже небольшое изменение.
Преобразование изображения из RGB в YCbCr не уменьшает размер файла, но облегчает поиск менее заметных деталей, которые можно удалить. Сжатие с потерями происходит на втором этапе. В её основе лежит идея представления данных в более сжимаемом виде.
2. Дискретное косинусное преобразование и дискретизация
Этот уровень сжатия по большей части и определяет суть JPEG. После преобразования цветов в YCbCr компоненты сжимаются по отдельности, поэтому далее мы можем сконцентрироваться только на компоненте Y. И вот как выглядят байты компонента Y после применения этого уровня.
(Интерактивная версия – в оригинале статьи). В интерактивной версии клик на пикселе прокручивает редактор на строчку, которая его обозначает. Попробуйте поудалять числа с конца или добавить несколько нулей к определённому числу.
На первый взгляд, выглядит, как очень плохое сжатие. В изображении 100 000 пикселей, и для обозначения их яркости (Y-компоненты) требуется 102 400 чисел — это хуже, чем если вообще ничего не сжимать!
Однако обратите внимание на то, что большинство этих чисел равны нулю. Более того, все эти нули в конце строк можно удалять, не меняя изображение. Остаётся порядка 26 000 чисел, а это уже почти в 4 раза меньше!
На этом уровне находится секрет шахматных узоров. В отличие от других эффектов, которые мы видели, появление этих узоров не является глюком. Они – строительные блоки всего изображения. В каждой строчке редактора содержится ровно 64 числа, коэффициенты дискретного косинусного преобразования (DCT), соответствующие интенсивностям 64-х уникальных узоров.
Эти узоры формируются на основе графика косинуса. Вот, как выглядят некоторые из них:
8 из 64 коэффициентов
Ниже – изображение, демонстрирующее все 64 узора.
(Интерактивная версия – в оригинале статьи).
Эти узоры имеют особое значение, поскольку они формируют базис изображений размера 8х8. Если вы незнакомы с линейной алгеброй, то это означает, что любое изображение размера 8х8 можно получить из этих 64-х узоров. DCT – это процесс разбиения изображений на блоки 8х8 и преобразования каждого блока в комбинацию из этих 64 коэффициентов.
То, что любое изображение можно составить из 64 определённых узоров, кажется волшебством. Однако это то же самое, что сказать, что любое место на Земле можно описать двумя числами – широтой и долготой [с указанием полушарий / прим. перев.]. Мы часто считаем поверхность Земли двумерной, поэтому нам требуются всего два числа. Изображение 8х8 имеет 64 измерения, поэтому нам требуются 64 числа.
Пока непонятно, как это помогает нам в смысле сжатия. Если нам нужно 64 числа для представления изображения 8х8, почему этот способ будет лучше, чем просто хранить 64 компоненты яркости? Мы делаем это по той же причине, по которой мы превратили три числа RGB в три числа YCbCr: это позволяет нам удалить незаметные детали.
Сложно увидеть, какие именно детали удаляются на этом этапе, поскольку JPEG применяет DCT к блокам 8х8. Однако никто не запрещает нам применить его к целой картинке. Вот, как выглядит DCT по компоненте Y в применении к целой картинке:
С конца можно удалить более 60 000 чисел практически без заметных изменений на фотке.
Однако отметьте, что если мы обнулим первые пять чисел, разница будет очевидной.
Числа в начале обозначают изменения низкой частоты в изображении, и наши глаза улавливают их лучше всего. Числа ближе к концу обозначают изменения высоких частот, которые сложнее заметить. Чтобы «увидеть то, что не видно глазом», мы можем изолировать эти детали высокой частоты, обнулив первые 5000 чисел.
Мы видим все области изображения, в которых происходит наибольшее изменение от пикселя к пикселю. Выделяются глаза кота, его усы, махровое одеяло и тени в нижнем левом углу. Можно пойти и дальше, обнулив первые 10 000 чисел:
20 000:
40 000:
60 000:
Эти высокочастотные детали JPEG и удаляет на этапе сжатия. Преобразование цветов в коэффициенты DCT не несёт потерь. Потери образуются на шаге дискретизации, где удаляются величины высокой частоты или близкие к нулю. Когда вы понижаете качество сохранения JPEG, программа увеличивает порог количества удаляемых значений, что даёт уменьшение размера файла, но делает картинку более пикселизированной. Поэтому изображение в первом разделе, которое было в 57 раз меньше, так выглядело. Каждый блок 8х8 представлялся гораздо меньшим количеством коэффициентов DCT по сравнению с более качественной версией.
Можно сделать такой крутой эффект, как постепенная потоковая передача изображений. Можно вывести размытую картинку, которая становится всё более детализированной по мере скачивания всё большего количества коэффициентов.
Вот, просто для интереса, что получится при использовании всего 24 000 чисел:
Или всего 5000:
Очень размыто, но как будто узнаваемо!
3. Кодирование длин серий, дельта и Хаффмана
Пока что все этапы сжатия шли с потерями. Последний этап, наоборот, идёт без потерь. Он не удаляет информацию, однако значительно уменьшает размер файла.
Как можно сжать что-либо, не отбрасывая информацию? Представьте, как бы мы описали простой чёрный прямоугольник 700 х 437.
JPEG использует для этого 5000 чисел, но можно достичь гораздо лучшего результата. Можете представить себе схему кодирования, которая бы описывала подобное изображение как можно меньшим количеством байт?
Минимальная схема, которую смог придумать я, использует четыре: три для обозначения цвета, и четвёртый – сколько пикселей имеет такой цвет. Идея представления повторяющихся значений таким сжатым способом называется кодирование длин серий. Она не имеет потерь, поскольку мы можем восстановить закодированные данные в первозданном виде.
Размер файла JPEG с чёрным прямоугольником гораздо больше 4 байт – вспомните, что на уровне DCT сжатие применяется к блокам 8х8 пикселей. Поэтому как минимум нам нужен один коэффициент DCT на каждые 64 пикселя. Один нам нужен потому, что вместо того, чтобы хранить один DCT-коэффициент, за которым идёт 63 нуля, кодирование длин серий позволяет нам хранить одно число и обозначить, что «все остальные – нули».
Дельта-кодирование – это техника, при которой каждый байт содержит отличие от какого-то значения, а не абсолютную величину. Поэтому редактирование определённых байтов изменяет цвет всех остальных пикселей. К примеру, вместо того, чтобы хранить
12 13 14 14 14 13 13 14
Мы могли бы начать с 12, а потом просто обозначать, сколько надо прибавить или отнять, чтобы получить следующее число. И эта последовательность в дельта-кодировании приобретает вид:
12 1 1 0 0 -1 0 1
Преобразованные данные не получаются меньше исходных, но сжимать их уже легче. Применение дельта-кодирования перед кодированием длин серий может сильно помочь, оставаясь при этом сжатием без потерь.
Дельта-кодирование – одна из немногих техник, применяемых вне блоков 8х8. Из 64 коэффициентов DCT один – просто постоянная волновая функция (сплошной цвет). Он представляет среднюю яркость каждого блока для компонент яркости, или среднюю голубизну для компонентов Cb, и так далее. Первое значение каждого DCT-блока называется DC-значением, и каждое DC-значение проходит дельта-кодирование по отношению к предыдущим. Поэтому изменение яркости первого блока повлияет на все блоки.
Остаётся последняя загадка: как изменение единственного числа полностью портит всю картинку? Пока таких свойств у уровней сжатия не было. Ответ лежит в заголовке JPEG. Первые 500 байт содержат метаданные об изображении – ширину, высоту, и проч., и пока мы с ними не работали.
Без заголовка практически невозможно (ну, или очень сложно) декодировать JPEG. Это будет выглядеть так, будто я пытаюсь описать вам картину, и начинаю изобретать слова для того, чтобы передать своё впечатление. Описание будет, вероятно, весьма сжатым, поскольку я могу изобретать слова именно с тем значением, которое я хочу передать, однако для всех остальных они не будут иметь смысла.
Звучит глупо, но именно так это и происходит. Каждое изображение JPEG сжимается с кодами, специфичными именно для него. Словарь кодов хранится в заголовке. Эта техника называется «код Хаффмана», а словарь – таблицей Хаффмана. В заголовке таблица отмечена двумя байтами – 255 и потом 196. У каждого цветового компонента может быть своя таблица.
Изменения таблиц радикально повлияют на любое изображение. Хороший пример – поменять на 15-й строке 1 на 12.
Это происходит потому, что в таблицах указывается, как нужно читать отдельные биты. Пока что мы работали только с двоичными числами в десятичном виде. Но это скрывает от нас тот факт, что если вы хотите хранить число 1 в байте, то оно будет выглядеть, как 00000001, поскольку в каждом байте должно быть ровно восемь бит, даже если нужен из них всего один.
Потенциально это большая трата места, если у вас есть много мелких чисел. Код Хаффмана – это техника, позволяющая нам ослабить это требование, по которому каждое число должно занимать восемь бит. Это значит, что если вы видите два байта:
234 115
То, в зависимости от таблицы Хаффмана, это могут быть три числа. Чтобы их извлечь, вам надо сначала разбить их на отдельные биты:
11101010 01110011
Затем обращаемся к таблице, чтобы понять, как их группировать. К примеру, это могут быть первые шесть битов, (111010), или 58 в десятичной системе, за которыми идут пять битов (10011), или 19, и наконец последние четыре бита (0011), или 3.
Поэтому очень сложно разобраться в байтах на этом этапе сжатия. Байты не представляют то, что кажется. Не буду углубляться в детали работы с таблицей в данной статье, но материалов по этому вопросу в сети достаточно.
Один из интересных трюков, которые можно проделать, зная это – отделить заголовок от JPEG и хранить его отдельно. По сути, получится, что файл сможете прочесть только вы. Facebook проделывает это, чтобы ещё сильнее уменьшать файлы.
Что ещё можно сделать – совсем немного изменить таблицу Хаффмана. Для других это будет выглядеть, как испорченная картинка. И только вы будете знать волшебный вариант её исправления.
Подведём итоги: так что же нужно для декодирования JPEG? Необходимо:
- Извлечь таблицу (таблицы) Хаффмана из заголовка и декодировать биты.
- Извлечь коэффициенты дискретного косинусного преобразования для каждого компонента цвета и яркости для каждого блока 8х8, проведя обратные преобразования кодирования длин серий и дельты.
- Скомбинировать косинусы на основе коэффициентов, чтобы получить значения пикселей для каждого блока 8х8.
- Масштабировать компоненты цветов, если проводилась субдискретизация (эта информация есть в заголовке).
- Преобразовать полученные значения YCbCr для каждого пикселя в RGB.
- Вывести изображение на экран!
Серьёзная работа для простого просмотра фотки с котиком! Однако, что мне в этом нравится – видно, насколько технология JPEG человекоцентрична. Она основана на особенностях нашего восприятия, позволяющих достичь гораздо лучшего сжатия, чем обычные технологии. И теперь, понимая, как работает JPEG, можно представить, как эти технологии можно перенести в другие области. К примеру, дельта-кодирование в видео может дать серьёзное уменьшение размера файла, поскольку там часто есть целые области, не меняющиеся от кадра к кадру (к примеру, фон).
Код, использованный в статье, открыт, и содержит инструкции по замене картинок на свои собственные.