Чем отличается Jpg от Jpeg на практике
Практически во всех отраслях работы за компьютером требуется использовать изображения – вебмастерство, дизайн, создание презентаций и прочее. И, конечно же, все знают и часто встречают формат изображения Jpeg. Однако, иногда на практике можно увидеть и картинки с похожим форматом jpg. Чем отличается Jpg от Jpeg? Вроде разница только в одной букве, но есть ли отличия на практике? Об этом вы узнаете в данной статье.
Чем отличается Jpg от Jpeg
Не буду тянуть резину, и сразу к делу – отличие межу Jpg и Jpeg заключается только в букве «e». На практике при работе с файлами этих форматов никаких отличий нет. Это абсолютно одинаковые форматы изображений.
Но почему из одного формата возникла два расширения файлов? Всё очень просто. В старых операционных системах нельзя было дать расширению файла значение, содержащее более чем три символа. В связи с этим, расширение Jpeg сократили до Jpg. В новых же версиях операционных систем, расширение может содержать и четыре, и пять символов, и даже больше. Поэтому было решено вернуть картинкам букву «e» и на практике стали применять вариант Jpeg. Однако традиция записывать формат в трёхбуквенном варианте до сих пор осталась, поэтому и сегодня в новых операционных системах всё ещё можно встретить написание Jpg.
Как изменить Jpg на Jpeg и наоборот
Мы выяснили, чем отличается Jpg от Jpeg. Теперь давайте посмотрим, как изменить один формат на другой. В отличие от других случаев, здесь нет необходимости использовать какие-либо специальные конвертеры форматов.
Так как мы установили, что отличие Jpeg от Jpg лишь в дополнительной букве «e», то очевидно, что для изменения одного формата на другой достаточно только дописать в расширение файла букву «e», либо убрать её.
Обычно в Windows по умолчанию отображение расширения файлов скрыто. Включить его можно в свойствах папки, во вкладке «Вид».
Также для просмотра и редактирования расширения файла можно использовать популярный файловый менеджер «Total Commander».
Вы уже открыли магазин в интернете, но недовольны ростом продаж и числом покупателей? Тогда самое время подключать соцсети. Как правильно построить SMM продвижение и использовать контент маркетинг в социальных сетях, узнайте на сайте прайс смм. Идеи, находки, лайфхаки помогут стать популярнее, привлечь подписчиков-покупателей и, конечно, заработать.
При изменении расширения файла будьте внимательны. Убирать и добавлять можно только букву «е», которая находится после буквы «p». Если вы ошибётесь, то вы затруднитесь потом открыть своё изображение.
Похожие статьи:
Чем отличается Jpeg от Jpg: отличия и особенности
Фотографии бывают самых разных форматов: png, jpg, bmp и так далее. Но многие путают формат jpg с jpeg. Некоторые люди даже считают, что это совершенно разные форматы, у которых есть разные свойства, размеры и так далее. На самом деле это не так, поскольку jpg и jpeg — один и тот же формат. Так чем отличается jpeg от jpg, почему многие начали путать эти форматы?
Jpeg и jpg: разница
Чем отличается Jpeg от Jpg? Эти форматы не отличаются вообще ничем. Разница только в отсутствии буквы е, в остальном все одинаковое. Но в чем же тогда их отличие, как возник формат Jpeg?
Все очень просто. Раньше операционные системы не поддерживали четырехзначные окончания, такие как Jpeg и так далее. Максимум можно было использовать трехзначное окончание, именно так и возник jpg. А формат Jpeg появился чуть позже, когда операционные системы стали поддерживать четырехзначные окончания и даже больше.
Но многие уже привыкли к формату Jpg, поэтому даже сейчас, спустя столько времени после появления новых операционных систем, люди все равно продолжают использовать этот формат вместо Jpeg. Некоторые программы сами по себе по традиции записывают именно Jpg, а не новую версию. На самом деле ничего особенного в этом нет, все равно практически везде можно загружать и Jpeg фотографии, и Jpg.
Они имеют одинаковый размер (например, png-фотографии весят больше, чем Jpg или Jpeg, а Jpeg от Jpg не отличается), одинаковый вид, количество пикселей и так далее.
Изменение Jpeg на Jpg или наоборот
Чтобы изменить png-фотографию на Jpeg или Jpg, потребуются отдельные конверторы, но Jpeg и JPG друг от друга не отличаются ничем, так что не нужно использовать дополнительные программы и конверторы, чтобы это сделать. Для изменения формата с Jpeg на Jpg и наоборот нужно:
- Нажать правой кнопкой мыши на фотографию.
- Зайти в «Свойства».
- Изменить окончание (если там Jpeg, нужно удалить букву е, а если Jpg — нужно добавить букву).
Поскольку форматы друг от друга не отличаются вообще ничем, эта буква не играет какой-либо роли, так что можно поменять название и формат прямо со своего рабочего стола, не пользуясь различными сторонними сервисами, которые довольно часто надоедают рекламой, а в некоторых случаях вместе с фотографиями скачиваются вирусы.
Итог
Мы выяснили, чем отличается формат Jpeg от Jpg. Каждый человек, который пользуется персональным компьютером, должен знать такие нюансы. Ничего особенного в этом знании нет, да и, скорее всего, мало где оно может пригодиться, но всегда важно знать, с чем работаешь, какой файл используешь и что будет потом.
Настоящий формат этого файла — Jpeg, поскольку носит название Joint Photographic Experts Group, но из-за старых систем невозможно было прописать полное название. Теперь уже все нормально.
Чем отличается jpg от jpeg
Файлы jpg и jpeg встречаются нам повсеместно, потому как расширения эти принадлежат картинкам и фотографиям. Замечать различия мы начинаем, когда требуется подойти к файлу формально, а не содержательно: скачать, отправить, переместить или сортировать, словом, выполнить любое действие независимо от содержания. Проблем, как правило, с графическими файлами не возникает, потому как операционные системы без шаманских танцев поддерживают их просмотр в специальных программах. Жить бы и радоваться, не задумываясь, но иногда какой-то софт отказывается воспринимать тот или иной формат, или же просто глаз цепляется за разные расширения. Если называются по-разному, то должно же быть и отличие?
Определение
JPEG — графический формат, предназначенный для хранения файлов-изображений любого типа. Появился в 1991 году. Также .JPEG — расширение имени файла в формате JPEG и однозначно указывающее на него.
JPG — одно из самых популярных расширений имени файла формата JPEG, распространенное наряду с .jpeg.
к содержанию ↑Сравнение
Похоже на детскую задачку на сообразительность: А упало, Б пропало… Многие скажут — разница в одной букве. И окажутся правы, потому как только буква отличает одно расширение от другого. В старых операционных системах более трех символов после точки приписать не могли, потому буква “e” вот так незаметно выпала из оборота. В новых операционных системах (появившихся после DOS) позволено и три, и четыре символа, однако привычка к трем буквам после точки заставляет формат JPEG называться именами со столь похожими расширениями. Больше отличий нет, кроме, разумеется, совпадения расширения с именованием формата. А в чем разница между именами или фамилиями без ассоциации с человеком? Правильно, только в буквах.
к содержанию ↑Выводы TheDifference.ru
- JPEG — название формата хранения графических файлов, jpg — расширение их имени.
- Расширение jpg может применяться в старых операционных системах, расширение jpeg — нет.
- Буква “e” в расширении jpg отсутствует.
В чем разница между форматом jpg и jpeg?
В век повсеместной компьютеризации даже непрофессионалы постоянно используют различные изображения для соцсетей, презентаций на работе и семейных фотографий. Мы привыкли к фотошопу и научились работать с разными форматами файлов-изображений: *.png, *.psd, *.tif, *.cpt., и даже понимаем их отличия и где какой вид файлов лучше всего использовать. Существует, однако, два самых распространенных фотоформата, разница между которыми нам непонятна: jpg и jpeg. А ведь мы используем их очень часто, и разница только в одной букве. Интрига… Попробуем в этом разобраться.
Что представляют из себя jpg и jpeg
- С разрешением файлов jpeg впервые познакомились пользователи компьютеров компании Macintosh, так любимых дизайнерами. Появился этот графический формат в 1991 году. В настоящее время используется во всех самых современных устройствах (смартфоны, фотокамеры) для сохранения изображений. Формат специально был создан Joint Photographic Experts Group
- Пользователи MS
DOS и Windows больше знакомы с расширением jpg. Появился этот формат просто: эти системы, в отличии от Macintosh, ограничивали число возможных символов в расширении файла тремя символами. Из расширения jpeg исчезла буква «е», зато пользователи более передовой операционной системы Windows получили возможность использовать этот удобный формат. В более современных версиях Windows избавилась от этих ограничений, но расширение jpg осталось наравне с полным jpeg.
Что общего между ними
По факту это практически один и тот же формат сохранения графики, они полностью взаимозаменяемы. Оба эти формата стали стандартными для самых популярных программ обработки изображений Adobe Photoshop и Microsoft Paint. Способность этих форматов сжимать изображение
Более того, качество изображения ухудшается при каждом редактировании и сохранении файла. Опытные пользователи при редактировании фотографий используют форматы psd и cpt и сохраняют в jpg конечный результат для уменьшения размера файла. Это необходимо для загрузки картинки в интернет, пересылке фотографий почтой или в мессенджерах, для экономии места на диске и в других случаях, когда «размер имеет значение».
Технически JPEG и JPG одинаковы и практически все современные устройства и программное обеспечение считывают и позволяют использовать оба расширения. Они незаменимы и удобны при сохранении фотографий и картин с реалистичными изображениями и плавными переходами цвета.
Для сохранения каких изображений JPEG и JPG не подходят?
- Не следует использовать их в случаях, когда даже минимальные потери критичны, например, медицинские или астрономические изображения.
- Они плохо подходят для сохранения текстовой графики и чертежей. Резкий перепад цвета между соседними пикселями при сжатии приводит к появлению неприятных артефактов, заметно портящих изображение.
А есть ли разница между JPEG и JPG?
Все-таки есть:
- JPEG — алгоритм сжатия, предназначенного для сохранения фотографий и графики, и как алгоритм, может использоваться в разных графических форматах. JPG — частный случай этого формата.
- JPEG стремиться максимально сжать исходный файл, что приводит порой к значительной потере данных и, как следствие, искажениям изображения. JPG «весит» несколько больше JPEG, но и потеря качества при этом меньше.
- JPEG не поддерживается старыми версиями MS DOS и Windows из-за ограничения возможного количества символов в расширении, обозначающем формат файла. Это расширение файлов не поддерживается также некоторым старым софтом.
Можно ли изменить Jpg на Jpeg и обратно? Без проблем и без всяких конвертеров фотоформатов — достаточно добавить или, наоборот, убрать в расширении файла букву «е».
JPEG и PNG — в чём разница форматов?
JPEG и PNG — это два основных формата для изображений, которые используются на сайтах. В некоторых случаях лучше использовать JPEG, а в некоторых — PNG.
Формат JPEG
JPEG (он же JPG) — это формат изображений, который использует сжатие с потерями и не поддерживает прозрачность. Позволяет настраивать уровень качества сохраняемого изображения — при его снижении удаляются детали и добавляются шумы на изображение, однако размер становится более компактным. JPG в зависимости от настроек может обеспечить сжатие как 2:1, так и 100:1 — но качество прямо пропорционально коэффициенту сжатия. Название формата — аббревиатура от Joint Photographic Experts Group.
JPEG поддерживает цветовые пространства 24-bit RGB и CMYK, а также 8-bit Grayscale. CMYK и Grayscale используются достаточно редко и их поддержка вызывает нарекания.
Также JPEG имеет интегрированную поддержку EXIF, позволяющую хранить метаданные, например: производитель и модель использованной камеры, используемая для съёмки выдержка, диафрагма и светочувствительность, разрешение кадра, настройки баланса белого, фокусное расстояние (в т.ч. эквивалентное), использование вспышки, размер матрицы, дата и время съёмки, географические координаты и адрес места съёмки.
Используемые расширения для файлов — .jpg and .jpeg (работают идентично).
С прикладной точки зрения JPEG оптимален для изображений с большим количеством цветов, например, для фотографий.
Формат PNG
PNG 24 — это формат изображений, который работает с полноцветными изображениями, использует сжатие без потерь и позволяет сохранять прозрачность. Настроить качество сохранения в PNG 24 невозможно, однако, можно адаптировать сохраняемое изображение для достижения минимального размера файла: для этого можно снизить количество цветов в изображении. Название формата — акроним от Portable Network Graphics.
Существует также формат PNG 8 — он более компактный, чем PNG 24, но применим только для изображений с очень ограниченных количеством цветов: 256 — это максимум. В случае использования PNG 8 для изображений с большим количеством цветов сжатие будет с потерями и с эффектом постеризации.
PNG до 2017 года не поддерживал EXIF, но затем его поддержка была реализована в стандарте. В фотографии PNG используется редко — для компактного хранения файлов больше подходит JPEG, а для профессиональной работы лучше подходят RAW-форматы DNG или TIFF.
PNG 24 и PNG 8 используют расширения для файлов .png, используемая битность записывается в метаданные файла и по расширению не определяется.
С прикладной точки зрения PNG 24 оптимален для изображений с небольшим количеством цветов, например, для иконок, схем, рисунков и скриншотов. Если же цветов в изображении меньше 256, то еще более эффективное сжатие возможно в PNG 8.
Резюме. JPEG и PNG — какой формат оптимальнее использовать?
Фотографии и изображения с большим количеством цветов лучше всего сохранять в JPEG. Но стоит помнить, что алгорим компрессии JPEG сжимает изображения с потерей качества.
Иконки, схемы, картинки с большим количеством текста и изображения с прозрачностью оптимальнее сохранять в PNG 24. Алгорим компрессии PNG 24 сжимает изображения без потери качества.
В чем разница форматов JPEG и RAW
Фотографы не прекращают спорить о том, какой из форматов выбирать для фотографий при съемке. Речь идет о RAW и JPEG (иногда JPG). Несмотря на то, что в общем большинство специалистов представляют себе разницу между этими двумя форматами, понимание любителей не всегда четкое. Фотограф и преподаватель Уэйн Раску (©Wayne Rasku), который ведет веб-занятия по фотоискусству в Атланте (Джорджия, США), собрал информацию и противоречия вместе. В статье он постарался объяснить, в чем суть форматов и как понять, какой формат нужно использовать для получения максимального эффекта в результате.
фото by Luis Valadares
JPEG против RAW
JPEG – общепринятый формат для фотографий, все просто. Если вы отправляете изображения в Сеть или печатаете снимки, то, скорее всего, файлы сохранены именно в формате JPG. Тем не менее, к JPEG «накопились вопросы» по поводу целостности изображений. Конечно, формат описывают, как наиболее распространенный формат сжатия снимков, основной для большинства цифровых камер. Но технически он представляет собой «изменение с потерями», которое ухудшает исходные параметры изображений. Именно в этом кроется основная проблема, отправная точка дискуссий о том, в каком формате делать и сохранять снимки.
В чем же состоит неудобство сжатия с потерями? По сути, камера изначально запрограммирована на трансформацию файла до меньшего размера путем отбрасывания части пикселей. В зависимости от выбранных настроек, сжатие будет большим или меньшим. Если вы выставите наиболее крупный размер файлов, камера «отбросит» минимальное количество данных. Если вам нужно уместить на карте памяти как можно больше снимков, вы выставляете меньшее разрешение – например, 640х480 при максимально возможных для 10-мегапиксельного фотоаппарата 3648х2736. Все «дополнительные» пиксели камера просто не сохранит, оставив только необходимое количество.
Для просмотра на дисплее цифрового фотоаппарата этого может быть вполне достаточно, но для печати масштабных изображений качество будет совершенно неприемлемым. На картинке останутся те самые неприятные квадратики-пиксели, и фото придется уменьшать, порой, уже до неприемлемых размеров.
Любая постобработка, в том числе Photoshop, сжимает изображения еще сильнее. Большинство людей не трансформирует снимки по несколько раз, но, если вам нужно это сделать, проблема проявится еще ярче.
Чем формат RAW отличается от JPEG?
Изменяя в камере формат файла с JPEG на RAW, вы «предупреждаете» ее, что обрабатывать снимки не нужно вообще, поэтому она сохраняет в изображении все пиксели. Вот и все. Полученный файл будет гораздо «тяжелее», чем при выборе JPEG, даже если в последнем выставлен наибольший размер кадров. Также разница между форматами состоит в «глубине» пикселей. JPEG использует 8-битные, тогда как в большинстве цифровых зеркальных камер диапазон составляет 13-14 бит на пиксель. Такой разбег приводит к тому, что области, схожие по яркости, объединяются, чего нет при выборе формата RAW. Это влияет, в частности, на баланс белого, возможность точно настроить экспозицию. Кстати, работая с RAW, вы сможете сделать HDR-фотографию из одного файла.
фото by Peter Majkut
Следующий логично возникающий вопрос заключается в том, как правильно обрабатывать фото в RAW, чтобы его можно было напечатать или выложить в Сеть? Ситуация складывается практически как с пленочными фотоаппаратами: чтобы увидеть полноценный снимок, нужно повозиться с негативом. С RAW все также – вам потребуется ПО для пост-обработки, оно поможет сделать исходный файл пригодным для дальнейшего использования.
Еще одно важное отличие RAW – вы не сможете использовать любой из «творческих» режимов камеры. Доступна ручная настройка диафрагмы и выдержки, но при выборе предустановленных сочетаний параметров («вечеринка», «солнечный пляж» и так далее) фотоаппарат автоматически сменит RAW на JPEG.
Подытожим: этот формат сохраняет для вас полный набор пикселей, но придется научиться обрабатывать изображения. В дополнение к этому вы сможете с минимальными потерями форматировать снимки, обрезать их, делать ярче при постобработке.
В чем же все-таки суть спора о выборе формата?
Одни фотографы ратуют за RAW, другие – сторонники JPEG. Это вызвано несколькими причинами. Во-первых, не во всех камерах поддерживается формат RAW. Например, в компактных цифровых фотоаппаратах он не предусмотрен. С другой стороны, съемки в нем позволяют «задействовать все ресурсы» и получать максимально качественный результат. Приверженцы RAW говорят, что с ним они могут получить полный контроль над снимками.
Некоторые, в том числе высокопрофессиональные, авторы сопротивляются, продолжая работать в JPEG. Они утверждают, что, будучи уверенными в своих силах, могут получить хороший результат и в этом формате. По их мнению RAW удлиняет рабочий процесс за счет кропотливой пост-обработки и лишает фотографа возможности основную часть времени тратить на съемки. Поклонники JPEG не хотят сидеть у компьютера, им хочется побольше работать непосредственно с камерой.
Еще один аргумент противников RAW – размер файла. Он практически в два раза больше, чем JPEG, и ресурсы карты памяти исчерпываются быстрее. На жестком диске тоже неудобно их хранить, если вы снимаете много. RAW-форматы не унифицированы, они отличаются в зависимости от самой камеры, вплоть до расширения. В частности, у Nikon это a.NEF, а у Canon – a.CR2. Если вы часто используете разные фотоаппараты, подобное усложняет жизнь.
Нужно помнить еще и о том, что устаревшее ПО не может работать со снимками с камер последнего поколения. Как утверждает фотограф Кен Рокуэлл (©Ken Rockwell), яростный противник RAW, «когда-нибудь мы просто не сможем открыть свои старые файлы, так как нужных версий программ уже не будет существовать». И, если вы постоянно обновляете ПО, будьте готовы потерять изображения, сделанные несколько лет назад. С JPEG этой проблемы нет – и это аргумент, который стоит учитывать.
И наконец, главное. Как понять, какой формат необходим именно вам
Если вы умеете быстро и без затруднений работать со специализированным ПО для пост-обработки фото, хотите получить полный контроль над нюансами редактирования своих снимков, вам стоит остановиться на RAW. Покупать программы, кстати не обязательно. Формат поддерживается даже в бесплатном ПО (таком, как Picassa), не говоря уже о разнообразном профильном обеспечении.
Если же вам не хочется добавлять в рабочий процесс еще один, и непростой, этап, вы не готовы одолеть следующую ступень в искусстве фотографии, или не собираетесь приобретать специализированные программы, выбирайте формат JPEG.
Нужно только помнить, что такой файл нельзя конвертировать в RAW, а вот наоборот – вполне. Поэтому большинство профессиональных фотографов все же стараются познакомиться с более трудоемким форматом поближе. RAW для них – ключ к большому количеству возможностей. К тому же, всегда есть компромисс: можно сохранять снимки на камере сразу в двух форматах. Если емкости карты памяти достаточно, это оптимальный вариант: наиболее удачные снимки вы оставите без изменений в JPEG, а для те, которые требуют коррекции, возьмете из RAW-источника.
Что дальше: ПО для пост-обработки файлов RAW
Небольшое примечание для тех, кто все же выбрал RAW. Есть несколько удачных комплексных программ, работая с которыми удастся реализовать все возможности формата. Одна из наиболее популярных – Adobe Lightroom. На просторах Интернета есть много туториалов, рассказывающих о том, как редактировать сырые файлы с помощью мощных, интересных инструментов ПО. Особенно хорошо программа подходит для ландшафтной съемки: если вам нравится работать на природе, стоит освоить Lightroom, и результаты вас впечатлят.
Как устроен формат 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, можно представить, как эти технологии можно перенести в другие области. К примеру, дельта-кодирование в видео может дать серьёзное уменьшение размера файла, поскольку там часто есть целые области, не меняющиеся от кадра к кадру (к примеру, фон).
Код, использованный в статье, открыт, и содержит инструкции по замене картинок на свои собственные.