Подтвердить что ты не робот

Помимо стандартного/прогрессивного, 3-го рода сжатия JPEG: загрузка по каналу?

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

Как мы все знаем, JPEG имеет два вида сжатия (по крайней мере, в диалоговом окне сохранения Photoshop)

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

Ранее я читал много оптимизаций PNG/JPEG статей, но теперь я столкнулся с этим удивительным сжатием третьего рода - от случайного поиска Google Image. Этот JPEG является

http://storage.googleapis.com/marc-pres/boston-event-1012/images/google-data-center.jpg

Попробуйте загрузить ссылку в Chrome/Firefox (в IE/Safari только до тех пор, пока изображение не будет полностью загружено, а затем отобразится)

вы можете наблюдать:

  • Изображение
  • было загружено сначала черно-белым цветом
  • затем выглядит как загруженный канал Красный
  • затем загружен канал Зеленый
  • последний загруженный синий канал

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

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

Итак, мой вопрос: как я мог создать такое изображение с помощью Python Pillow или ImageMagick или любого вида программного обеспечения с открытым исходным кодом?

Если вы считаете, что этот вопрос не подходит, прокомментируйте, не закрывайте его.

Обновление 1:

Оказывается, Google использовала эту технологию во всех своих JPEG-изображениях 1, 2, например. this

Обновление 2: я нашел еще один ключ

4b9b3361

Ответ 1

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

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

Но нет ничего, что требовало бы этого. Если первое сканирование в файле не содержит всех компонентов цвета, мы можем назвать такой файл "неперемещенным".

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

Стандартное программное обеспечение IJG libjpeg способно создавать неперемещенные файлы. Хотя это не совсем просто, вы можете использовать его утилиту cjpeg, с опцией -scans, зарегистрированной в файле wizard.txt.