Для чего используется формат jpeg. Что находится в файлах.JPG. Программы для открытия JPEG файлов

  • Tutorial

UPD. Был вынужден убрать моноширинное форматирование. В один прекрасный день хабрапарсер перестал воспринимать форматирование внутри тегов pre и code. Весь текст превратился в кашу. Администрация хабра не смогла мне помочь. Теперь неровно, но хотя бы читабельно.

Вам когда-нибудь хотелось узнать как устроен jpg-файл? Сейчас разберемся! Прогревайте ваш любимый компилятор и hex-редактор, будем декодировать это:

Специально взял рисунок поменьше. Это знакомый, но сильно пережатый favicon Гугла:

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

Даже не зная, как происходит кодирование, мы уже можем кое-что извлечь из файла.
- маркер начала. Он всегда находится в начале всех jpg-файлов.
Следом идут байты . Это маркер, означающий начало секции с комментарием. Следующие 2 байта - длина секции (включая эти 2 байта). Значит в следующих двух - сам комментарий. Это коды символов ":" и ")", т.е. обычного смайлика. Вы можете увидеть его в первой строке правой части hex-редактора.

Немного теории

Очень кратко по шагам:
Давайте подумаем, в каком порядке могут быть закодированы эти данные. Допустим, сначала полностью, для всего изображения, закодирован канал Y, затем Cb, потом Cr. Все помнят загрузку картинок на диал-апе. Если бы они кодировались именно так, нам бы пришлось ждать загрузки всего изображения, прежде чем оно появится на экране. Так же будет неприятно, если потерятся конец файла. Вероятно, существуют и другие весомые причины. Поэтому закодированные данные располагаются поочередно, небольшими частями.

Напоминаю, что каждый блок Y ij , Cb ij , Cr ij - это матрица коэффициентов ДКП, закодированная кодами Хаффмана. В файле они располагаются в таком порядке: Y 00 Y 10 Y 01 Y 11 Cb 00 Cr 00 Y 20

Чтение файла

После того, как мы извлекли комментарий, будет легко понять, что:
  • Файл поделен на секторы, предваряемые маркерами.
  • Маркеры имеют длину 2 байта, причем первый байт .
  • Почти все секторы хранят свою длину в следующих 2 байта после маркера.
Для удобства подсветим маркеры:
FF D8 FF FE 00 04 3A 29 FF DB 00 43 00 A0 6E 78



FF FF FF FF FF FF FF FF FF FF FF FF FF FF DB 00
43 01 AA B4 B4 F0 D2 F0 FF FF FF FF FF FF FF FF
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
FF FF FF C0 00 11 08 00 10 00 10 03 01 22 00 02
11 01 03 11 01 FF C4 00 15 00 01 01 00 00 00 00
00 00 00 00 00 00 00 00 00 00 03 02 FF C4 00 1A
10 01 00 02 03 01 00 00 00 00 00 00 00 00 00 00
00 01 00 12 02 11 31 21 FF C4 00 15 01 01 01 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 FF
C4 00 16 11 01 01 01 00 00 00 00 00 00 00 00 00
00 00 00 00 11 00 01 FF DA 00 0C 03 01 00 02 11
03 11 00 3F 00 AE E7 61 F2 1B D5 22 85 5D 04 3C
82 C8 48 B1 DC BF FF D9

Маркер : DQT - таблица квантования.

FF DB 00 43 00 A0 6E 78
8C 78 64 A0 8C 82 8C B4 AA A0 BE F0 FF FF F0 DC
DC F0 FF FF FF FF FF FF FF FF FF FF FF FF FF FF
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
FF FF FF FF FF FF FF FF FF FF FF FF FF

Заголовок секции всегда занимает 3 байта. В нашем случае это . Заголовок состоит из:
Длина: 0x43 = 67 байт
Длина значений в таблице: 0 (0 - 1 байт, 1 - 2 байта)
[_0] Идентификатор таблицы: 0
Оставшимися 64-мя байтами нужно заполнить таблицу 8x8.



Приглядитесь, в каком порядке заполнены значения таблицы. Этот порядок называется zigzag order:

Маркер : SOF0 - Baseline DCT

Этот маркер называется SOF0, и означает, что изображение закодировано базовым методом. Он очень распространен. Но в интернете не менее популярен знакомый вам progressive-метод, когда сначала загружается изображение с низким разрешением, а потом и нормальная картинка. Это позволяет понять что там изображено, не дожидаясь полной загрузки. Спецификация определяет еще несколько, как мне кажется, не очень распространенных методов.

FF C0 00 11 08 00 10 00 10 03 01 22 00 02
11 01 03 11 01

Длина: 17 байт.
Precision: 8 бит. В базовом методе всегда 8. Как я понял, это разрядность значений каналов.
Высота рисунка: 0x10 = 16
Ширина рисунка: 0x10 = 16
Количество компонентов: 3. Чаще всего это Y, Cb, Cr.

1-й компонент:
Идентификатор: 1
Горизонтальное прореживание (H 1): 2
[_2] Вертикальное прореживание (V 1): 2
Идентификатор таблицы квантования: 0

2-й компонент:
Идентификатор: 2
Горизонтальное прореживание (H 2): 1
[_1] Вертикальное прореживание (V 2): 1

3-й компонент:
Идентификатор: 3
Горизонтальное прореживание (H 3): 1
[_1] Вертикальное прореживание (V 3): 1
Идентификатор таблицы квантования: 1

Теперь посмотрите, как определить насколько прорежено изображение. Находим H max =2 и V max =2 . Канал i будет прорежен в H max /H i раз по горизонтали и V max /V i раз по вертикали.

Маркер : DHT (таблица Хаффмана)

Эта секция хранит коды и значения полученные кодированием Хаффмана .

FF C4 00 15 00 01 01 00 00 00 00
00 00 00 00 00 00 00 00 00 00 03 02

длина: 21 байт.
класс: 0 (0 - таблица DC коэффициэнтов, 1 - таблица AC коэффициэнтов).
[_0] идентификатор таблицы: 0
Длина кода Хаффмана: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
Количество кодов:
Количество кодов означает количество кодов такой длины. Обратите внимание, что секция хранит только длины кодов, а не сами коды. Мы должны найти коды сами. Итак, у нас есть один код длины 1 и один - длины 2. Итого 2 кода, больше кодов в этой таблице нет.
С каждым кодом сопоставлено значение, в файле они перечислены следом. Значения однобайтовые, поэтому читаем 2 байта.
- значение 1-го кода.
- значение 2-го кода.

Построение дерева кодов Хаффмана

Мы должны построить бинарное дерево по таблице, которую мы получили в секции DHT. А уже по этому дереву мы узнаем каждый код. Значения добавляем в том порядке, в каком указаны в таблице. Алгоритм прост: в каком бы узле мы ни находились, всегда пытаемся добавить значение в левую ветвь. А если она занята, то в правую. А если и там нет места, то возвращаемся на уровень выше, и пробуем оттуда. Остановиться нужно на уровне равном длине кода. Левым ветвям соответствует значение 0 , правым - 1 .
Замечание:
Не нужно каждый раз начинать с вершины. Добавили значение - вернитесь на уровень выше. Правая ветвь существует? Если да, идите опять вверх. Если нет - создайте правую ветвь и перейдите туда. Затем, с этого места, начинайте поиск для добавления следующего значения.

Деревья для всех таблиц этого примера:


UPD (спасибо ): В узлах первого дерева (DC, id =0) должны быть значения 0x03 и 0x02

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

Маркер : SOS (Start of Scan)

Байт в маркере означает - «ДА! Наконец-то то мы перешли непосредственно к разбору секции закодированного изображения!». Однако секция символично называется SOS.

  FF DA 00 0C 03 01 00 02 11
03 11 00 3F 00

Длина заголовочной части (а не всей секции): 12 байт.
Количество компонентов сканирования. У нас 3, по одному на Y, Cb, Cr.

1-й компонент:
Номер компонента изображения: 1 (Y)
Идентификатор таблицы Хаффмана для DC коэффициэнтов: 0
[_0] Идентификатор таблицы Хаффмана для AC коэффициэнтов: 0

2-й компонент:
Номер компонента изображения: 2 (Cb)

[_1]

3-й компонент:
Номер компонента изображения: 3 (Cr)
Идентификатор таблицы Хаффмана для DC коэффициэнтов: 1
[_1] Идентификатор таблицы Хаффмана для AC коэффициэнтов: 1

Данные компоненты циклически чередуются.

На этом заголовочная часть заканчивается, отсюда и до конца (маркера ) закодированные данные.


0

Нахождение DC-коэффициента.
1. Читаем последовательность битов (если встретим 2 байта , то это не маркер, а просто байт ) . После каждого бита сдвигаемся по дереву Хаффмана (с соответствующим идентификатором) по ветви 0 или 1, в зависимости от прочитанного бита. Останавливаемся, если оказались в конечном узле.
10 1011101110011101100001111100100

2. Берем значение узла. Если оно равно 0, то коэффициент равен 0, записываем в таблицу и переходим к чтению других коэффициентов. В нашем случае - 02. Это значение - длина коэффициента в битах. Т. е. читаем следующие 2 бита, это и будет коэффициент.
10 10 11101110011101100001111100100

3. Если первая цифра значения в двоичном представлении - 1, то оставляем как есть: DC_coef = значение. Иначе преобразуем: DC_coef = значение-2 длина значения +1 . Записываем коэффициент в таблицу в начало зигзага - левый верхний угол.

Нахождение AC-коэффициентов.
1. Аналогичен п. 1, нахождения DC коэффициента. Продолжаем читать последовательность:
10 10 1110 1110011101100001111100100

2. Берем значение узла. Если оно равно 0, это означает, что оставшиеся значения матрицы нужно заполнить нулями. Дальше закодирована уже следующая матрица. Первые несколько дочитавших до этого места и написавших об этом мне в личку, получат плюс в карму. В нашем случае значение узла: 0x31.
Первый полубайт: 0x3 - именно столько нулей мы должны добавить в матрицу. Это 3 нулевых коэффициэнта.
Второй полубайт: 0x1 - длина коэффициэнта в битах. Читаем следующий бит.
10 10 1110 1 110011101100001111100100

3. Аналогичен п. 3 нахождения DC-коэффициента.

Как вы уже поняли, читать AC-коэффициенты нужно пока не наткнемся на нулевое значение кода, либо пока не заполнится матрица.
В нашем случае мы получим:
10 10 1110 1 1100 11 101 10 0 0 0 1 11110 0 100
и матрицу:





Вы заметили, что значения заполнены в том же зигзагообразном порядке?
Причина использования такого порядка простая - так как чем больше значения v и u, тем меньшей значимостью обладает коэффициент S vu в дискретно-косинусном преобразовании. Поэтому, при высоких степенях сжатия малозначащие коэффициенты обнуляют, тем самым уменьшая размер файла.

[-4 1 1 1 0 0 0 0] [ 5 -1 1 0 0 0 0 0]
[ 0 0 1 0 0 0 0 0] [-1 -2 -1 0 0 0 0 0]
[ 0 -1 0 0 0 0 0 0] [ 0 -1 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0] [-1 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0] [ 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0] [ 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0] [ 0 0 0 0 0 0 0 0]

[-4 2 2 1 0 0 0 0]
[-1 0 -1 0 0 0 0 0]
[-1 -1 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0]

Ой, я забыл сказать, что закодированные DC-коэффициенты - это не сами DC-коэффициенты, а их разности между коэффициентами предыдущей таблицы (того же канала)! Нужно поправить матрицы:
DC для 2-ой: 2 + (-4) = -2
DC для 3-ой: -2 + 5 = 3
DC для 4-ой: 3 + (-4) = -1

[-2 1 1 1 0 0 0 0] [ 3 -1 1 0 0 0 0 0] [-1 2 2 1 0 0 0 0]
………

Теперь порядок. Это правило действует до конца файла.

… и по матрице для Cb и Cr:

[-1 0 0 0 0 0 0 0]
[ 1 1 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0]

Так как тут только по одной матрице, DC-коэфициенты можно не трогать.

Вычисления

Квантование

Вы помните, что матрица проходит этап квантования? Элементы матрицы нужно почленно перемножить с элементами матрицы квантования. Осталось выбрать нужную. Сначала мы просканировали первый компонент, его компонента изображения = 1. Компонент изображения с таким идентификатором использует матрицу квантования 0 (у нас она первая из двух). Итак, после перемножения:


[ 0 120 280 0 0 0 0 0]
[ 0 -130 -160 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0]

Аналогично получаем еще 3 матрицы Y-канала…

[-320 110 100 160 0 0 0 0] [ 480 -110 100 0 0 0 0 0]
[ 0 0 140 0 0 0 0 0] [-120 -240 -140 0 0 0 0 0]
[ 0 -130 0 0 0 0 0 0] [ 0 -130 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0] [-140 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0] [ 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0] [ 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0] [ 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0] [ 0 0 0 0 0 0 0 0]

[-160 220 200 160 0 0 0 0]
[-120 0 -140 0 0 0 0 0]
[-140 -130 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0]

… и по матрице для Cb и Cr.

[-170 0 0 0 0 0 0 0] [ 0 0 0 0 0 0 0 0]
[ 180 210 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0] [ 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0] [ 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0] [ 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0] [ 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0] [ 0 0 0 0 0 0 0 0]

Обратное дискретно-косинусное преобразование

Формула не должна доставить сложностей*. S vu - наша полученная матрица коэффициентов. u - столбец, v - строка. s yx - непосредственно значения каналов.

*Вообще говоря, это не совсем правда. Когда я смог декодировать и отобразить на экране рисунок 16x16, я взял изображение размером 600x600 (кстати, это была обложка любимого альбома Mind.In.A.Box - Lost Alone). Получилось не сразу - всплыли различные баги. Вскоре я мог любоваться корректно загруженной картинкой. Только очень огорчала скорость загрузки. До сих пор помню, она занимала 7 секунд. Но это и неудивительно, если бездумно пользоваться приведенной формулой, то для вычисления одного канала одного пикселя потребуется нахождения 128 косинусов, 768 умножений, и сколько-то там сложений. Только вдумайтесь - почти тысяча непростых операций только на один канал одного пиксела! К счастью, тут есть простор для отимизации (после долгих экспериментов уменьшил время загрузки до предела точности таймера 15мс, и после этого сменил изображение на фотографию в 25 раз большей площадью. Возможно, напишу об этом отдельной статьей).

Напишу результат вычисления только первой матрицы канала Y (значения округлены):


[ 87 72 50 36 37 55 79 95]
[-10 5 31 56 71 73 68 62]
[-87 -50 6 56 79 72 48 29]

И 2-х оставшихся:
Cb Cr
[ 60 52 38 20 0 -18 -32 -40] [ 19 27 41 60 80 99 113 120]
[ 48 41 29 13 -3 -19 -31 -37] [ 0 6 18 34 51 66 78 85]
[ 25 20 12 2 -9 -19 -27 -32] [-27 -22 -14 -4 7 17 25 30]
[ -4 -6 -9 -13 -17 -20 -23 -25] [-43 -41 -38 -34 -30 -27 -24 -22]
[ -37 -35 -33 -29 -25 -21 -18 -17] [-35 -36 -39 -43 -47 -51 -53 -55]
[ -67 -63 -55 -44 -33 -22 -14 -10] [ -5 -9 -17 -28 -39 -50 -58 -62]
[ -90 -84 -71 -56 -39 -23 -11 -4] [ 32 26 14 -1 -18 -34 -46 -53]
[-102 -95 -81 -62 -42 -23 -9 -1] [ 58 50 36 18 -2 -20 -34 -42]

  1. О, пойду-ка поем!
  2. Да я вообще не въезжаю, о чем речь.
  3. Раз значение цветов YCbCr получены, осталось преобразовать в RGB, типа так: YCbCrToRGB(Y ij , Cb ij , Cr ij) , Y ij , Cb ij , Cr ij - наши полученные матрицы.
  4. 4 матрицы Y, и по одной Cb и Cr, так как мы прореживали каналы и 4 пикселям Y соответствует по одному Cb и Cr. Поэтому вычислять так: YCbCrToRGB(Y ij , Cb , Cr )
Если вы выбрали 1 и 4, то я рад за вас. Либо вы все правильно поняли, либо скоро будете получать удовольствие от еды.

YCbCr в RGB

R = Y + 1.402 * Cr
G = Y - 0.34414 * Cb - 0.71414 * Cr
B = Y + 1.772 * Cb
Не забудьте прибавить по 128. Если значения выйдут за пределы интервала , то присвоить граничные значения. Формула простая, но тоже отжирает долю процессорного времени.

Вот полученные таблицы для каналов R, G, B для левого верхнего квадрата 8x8 нашего примера:
255 248 194 148 169 215 255 255
255 238 172 115 130 178 255 255
255 208 127 59 64 112 208 255
255 223 143 74 77 120 211 255
237 192 133 83 85 118 184 222
177 161 146 132 145 162 201 217
56 73 101 126 144 147 147 141
0 17 76 126 153 146 127 108

231 185 117 72 67 113 171 217
229 175 95 39 28 76 139 189
254 192 100 31 15 63 131 185
255 207 115 46 28 71 134 185
255 241 175 125 112 145 193 230
226 210 187 173 172 189 209 225
149 166 191 216 229 232 225 220
72 110 166 216 238 231 206 186

255 255 249 203 178 224 255 255
255 255 226 170 140 187 224 255
255 255 192 123 91 138 184 238
255 255 208 139 103 146 188 239
255 255 202 152 128 161 194 232
255 244 215 200 188 205 210 227
108 125 148 172 182 184 172 167
31 69 122 172 191 183 153 134

Конец

Вообще я не специалист по JPEG, поэтому вряд ли смогу ответить на все вопросы. Просто когда я писал свой декодер, мне часто приходилось сталкиваться с различными непонятными проблемами. И когда изображение выводилось некорректно, я не знал где допустил ошибку. Может неправильно проинтерпретировал биты, а может неправильно использовал ДКП. Очень не хватало пошагового примера, поэтому, надеюсь, эта статья поможет при написании декодера. Думаю, она покрывает описание базового метода, но все-равно нельзя обойтись только ей. Предлагаю вам ссылки, которые помогли мне:

Графический , разработанный еще в 1991 году экспертной группой по проблемам цифровой фотографии, и сегодня является одним из самых популярных в Интернете. Имеется несколько расширений для файлов такого типа – JPEG, JFIF, JPE и т.д. В целом, он был разработан для хранения полноцветных фотографий размером не более 64Кх64К пикселей, так что запас «мегапикселей» в современных камерах позволит использовать этот формат еще много лет.

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

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

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

Формат JPG имеет смысл применять при передачи видеоинформации по низкоскоростным каналам, где качество изображения не играет особой роли. В этом он схож с форматом GIF. Но GIF использует алгоритм проявления изображения методом чередования выводимых строк (интерливинг), а JPG формирует сразу все изображение: сначала с низкой детализацией элементов, а затем с более высокой. Такая схема может применяться даже в составе одного изображения, поэтому алгоритму требуется сначала сделать несколько проходов по изображению, чтобы принять решение о возможности его эффективно закодировать.

По умолчанию любой файл принимает расширение той программы при помощи, какой он был создан. Узнать какой формат того или иного файла, к примеру, по картинке, можно кликнув на иконке самого файла правой клавишей мыши и выбрать пункт «Свойства» в выпадающем списке. В окне «Общие» мы видим, что это изображение JPG и имеет оно расширение.jpg, а в следующей строчке, которая называется «Приложения», мы видим программу для чтения, с помощью которой, система его открывает. В данном случае, на изображении видно, что в операционной системе Windows 10, можно открыть файл jpg на компьютере при помощи программы «Фотографии». Но как открыть файл в данном формате, если установлена другая ОС? Всё просто во всех операционных системах по умолчанию есть встроенное функции для просмотра и редактирования картинок на компьютере в jpg.

Формат графических файлов jpg

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

Практически все фото и видеокамеры поддерживают формат джипег. То есть сделанные фото автоматически создаются в формате jpg и доступны для просмотра на любом устройстве, на компьютере, мобильном телефоне. Для простого просмотра jpg фотографий и картинок в формате JPG или JPEG нет необходимости устанавливать стороннее ПО. Отлично справляется встроенная программа для чтения такого типа файлов – «Средство просмотра изображений и факсов» или на более новых версиях ОС это приложение «Фотографии». Но, если картинка или фотография (файл jpg), будет редактироваться к каком-либо редакторе, или будет помещена в какой-нибудь документ, в презентацию, к примеру, тогда нужно скачать программу, в которой и будет происходить дальнейшая работа над документом. Можно в программе Фотошоп врезать из картинки какие-то фрагменты, а затем их можно использовать уже в других программах для чтения.

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

Перечень программ и приложений, поддерживающих формат jpg

Программа для просмотра файлов

Одна очень распространённая программа для открытия jpg – это фотошоп.

  • Открыть любую картинку, в том числе и файл jpg, в Фотошопе можно кликнув в программе на кнопку «Файл».
  • Открыть – в появившемся окне выбрать интересующий нас файл и опять нажать на кнопку «Открыть».

Картинка появится у нас в рабочей среде и можно с ней дальше работать.

  • Если нужно вставить картинку в документ Word, тогда в рабочем пространстве, поставьте курсор в то место, где будет располагаться картинка.
  • Выберите вкладку «Вставка» и на панели быстрого доступа вберите кнопку «Рисунок».
  • Из открывшегося окна найдите на жёстком диске нужный файл на компьютереи кликните «Вставить».

Произносится как «джейпег» и заключает в себе сокращенное название организации - разработчика данного формата Joint Photographic Experts Group (Объединенная группа экспертов по фотографии).

Как определить формат изображения

Определить формат изображения помогают расширения. Популярные расширения для файлов формата jpeg: .jpg, .jpeg

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

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

Перевод изображения в формат jpeg

Перевести изображение в формат jpeg может любая программа для редактирования рисунков и фотографий.

Самой простой такой программой считается программа Paint. Наряду с блокнотом и калькулятором, она есть практически в любой операционной системе.

Щелкните правой кнопкой мыши по нужному изображению. В появившемся окне выберите функцию: «Открыть с помощью...». Всплывет еще одно окно со списком имеющихся на вашем компьютере программ, подходящих для редактирования изображений. Смело выбирайте Paint (значок с палитрой и кистью).

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

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

Не бойтесь случайно нажать куда-то и испортить изображение! Всегда можно нажать одновременно клавиши «ctrl+ z» и отменить последнее действие. В программе Paint подряд можно отменить три последних действия.

Если в изображении вас все устраивает, и вы просто хотите поменять формат, нажмите клавишу «F12». В появившемся окне внизу введите название файла и выберите формат jpeg из списка форматов. Проверьте путь сохранения в строке под словами «Сохранить как» и нажмите кнопку «Сохранить». Вашему изображению автоматически присвоится расширение.jpeg.

Помимо Paint для перевода изображения в формат jpeg вы можете использовать фотоконвертер. Прочитать, что , а также скачать бесплатную демо-версию на 15 дней можно на сайте http://www.photoconverter.ru/help/tutorials/convert_to_jpg.html

Меняйте изображения по своему вкусу!

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

Сжатие изображения осуществляется в два этапа:
1. Изображение разбивается на области и усредняется в той или иной степени в зависимости от параметра QualityКачество. Чем ниже значение этого параметра, тем сильнее будет усредняться изображение.
2. Усредненное изображение компрессируется по алгоритму, близкому к LZV-компрессии в TIF-формате.

Если Вы устанавливаете максимальное значение параметра Quality, то усреднение изображения не производится. Потери качества происходят только на этапе усреднения, поэтому JPG-файлы, записанные с максимальным значением Quality, не имеют визуально различимых потерь качества и ничем не уступают TIF-файлам с LZV-компрессией, а размер их несколько меньше из-за более эффективного алгоритма компрессии.

Принимаются макеты в формате JPG, сохраненные из программы "Adobe Photoshop" с максимальным значением параметра "Quality".

Если при сохранении JPG-файлов Вы используете какие-либо другие программы и/или значения "Quality" меньше максимального, высокое качество печати не гарантируется. Следует учитывать, что изображение, единожды сохраненное в JPG c использованием усреднения, имеет дефекты, которые невозможно устранить, причем эти дефекты особенно заметны при широкоформатной печати.

По материалам wiki энциклопедии - JPEG (произносится «джейпег», по названию организации-разработчика, англ. Joint Photographic Experts Group Объединённая группа экспертов по фотографии) - один из популярных графических форматов, применяемый для хранения фотоизображений и подобных им изображений. Файлы, содержащие данные JPEG, обычно имеют расширения.jpeg, .jfif, .jpg, .JPG, или.JPE. Однако из них.jpg самое популярное расширение на всех платформах.

Область применения данного формата:

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

С другой стороны, JPEG малопригоден для сжатия чертежей, текстовой и знаковой графики, где резкий контраст между соседними пикселами приводит к появлению заметных артефактов. Такие изображения целесообразно сохранять в форматах без потерь, таких как TIFF, GIF, PNG или RAW.

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

JPEG не должен использоваться и в тех случаях, когда недопустимы даже минимальные потери, например, при сжатии астрономических или медицинских изображений. В таких случаях может быть рекомендован предусмотренный стандартом JPEG режим сжатия Lossless JPEG (который, к сожалению, не поддерживается большинством популярных кодеков) или стандарт сжатия JPEG-LS.

Достоинства и недостатки формата JPEG:

К недостаткам сжатия по стандарту JPEG следует отнести появление на восстановленных изображениях, при высоких степенях сжатия, характерных артефактов: изображение рассыпается на блоки размером 8x8 пикселов (этот эффект особенно заметен на областях изображения с плавными изменениями яркости), в областях с высокой пространственной частотой (например, на контрастных контурах и границах изображения) возникают артефакты в виде шумовых ореолов. Следует отметить, что стандарт JPEG предусматривает использование специальных фильтров для подавления блоковых артефактов, но на практике подобные фильтры, несмотря на их высокую эффективность, практически не используются. Однако, несмотря на недостатки, JPEG получил очень широкое распространение из-за достаточно высокой (относительно существовавших во время его появления альтернатив) степени сжатия, поддержке сжатия полноцветных изображений и относительно невысокой вычислительной сложности. К тому же изображение, сжатое в JPEG формат имеет не очень большой объем в сравнении с тем же изображении в несжатом состоянии, что очень существенно при применении данного формата для использования в сети интернет.

Алгоритм JPEG позволяет сжимать изображение как с потерями, так и без потерь (режим сжатия lossless JPEG):

Группа экспертов в области фотографии (Joint Photographic Experts Group) в дополнение к известным форматам сжатия изображений JPEG и JPEG 2000, ориентированным прежде всего на сжатие с потерями, предложила также стандарт на сжатие без потерь - JPEG-LS (в котором, однако, предусмотрен также режим сжатия с ограниченными потерями):

Формат JPEG-LS был основан на формате LOCO-I (Low Complexity Lossless Compression for Images). Алгоритм сжатия без потерь LOCO-I, принятый за основу при разработке стандарта JPEG-LS, впервые предусматривал не только lossless, но и near lossless режим (сжатие с ограниченными, задаваемыми пользователем потерями). Декодер JPEG-LS почти не отличается от кодера, поэтому этот алгоритм сжатия симметричный.

Алгоритм сжатия, лежащий в основе JPEG-LS, использует адаптивное предсказание значения текущего пиксела по окружению, включающему уже закодированные пикселы (метод Median Edge Detection), классификацию контекста, контекстное моделирование ошибки предсказания и её коррекцию, а также энтропийное кодирование скорректированной ошибки предсказания (используется кодирование Голомба-Райса). Для повышения эффективности кодирования низкоэнтропийных изображений (или фрагментов изображений) алгоритм предусматривает автоматический переход в режим кодирования длин серий, что позволяет использовать его для сжатия без потерь (или с ограниченными потерями) не только фотореалистических изображений, но и компьютерной графики.

Для цветных (многокомпонентных) изображений стандарт JPEG-LS не предписывает какого-то определённого метода преобразования цветовых компонент, поэтому программы, реализующие JPEG-LS, обычно предлагают выбрать одну схему из нескольких (независимое сжатие цветовых плоскостей, преобразование в стиле JPEG 2000 lossless mode и т.п.).

Формат JPEG-LS разрабатывался, прежде всего, для хранения изображений в медицинских целях, то есть для тех случаев, когда важно иметь большое изображение без малейших потерь качества. Как уже говорилось, за основу был взят формат LOCO-I, разработанный в стенах «HP Labs». Затем он был доработан совместными усилиями «Hewlett-Packard» и «Mitsubishi». Обе компании разрешили использовать их патенты на этот формат без оплаты лицензии, поэтому JPEG-LS можно встретить и в обычных программах для PC.

JPEG 2000 также содержит режим сжатия без потерь. Сжатие без потерь в JPEG 2000 работает медленнее и дает несколько меньшее сжатие по сравнению с JPEG-LS как на искусственных, так и на фотореалистичных изображениях.

JPEG 2000 (или jp2) - графический формат, который вместо дискретного косинусного преобразования, применяемого в формате JPEG, использует технологию вейвлет-преобразования, основывающуюся на представлении сигнала в виде суперпозиции базовых функций - волновых пакетов.

В результате такой компрессии изображение получается более гладким и чётким, а размер файла по сравнению с JPEG при одинаковом качестве оказывается меньшим. JPEG 2000 полностью свободен от главного недостатка своего предшественника: благодаря использованию вейвлетов, изображения, сохранённые в этом формате, при высоких степенях сжатия не содержат артефактов в виде «решётки» из блоков размером 8х8 пикселей. Формат JPEG 2000 так же, как и JPEG, поддерживает так называемое «прогрессивное сжатие», позволяющее по мере загрузки видеть сначала размытое, но затем всё более чёткое изображение. Пока этот формат мало распространён и поддерживается не всеми современными браузерами.