Помимо стандартного/прогрессивного, 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: я нашел еще один ключ
Ответы
Ответ 1
Данные изображения в файле JPEG могут быть разрезаны по-разному, а срезы (или "сканирование", как их обычно называют) могут храниться в файле во многих разных порядках.
В большинстве файлов JPEG первое сканирование в файле содержит все компоненты цвета изображения, чередующиеся вместе, если это цветное изображение. В непрогрессивном JPEG файл будет содержать только одно сканирование. В прогрессивном JPEG последуют другие сканирование, каждый из которых может содержать один компонент или несколько компонентов.
Но нет ничего, что требовало бы этого. Если первое сканирование в файле не содержит всех компонентов цвета, мы можем назвать такой файл "неперемещенным".
Ваши файлы примеров не чередуются, и они также являются прогрессивными. Прогрессивные неперемещенные JPEG-изображения, по-видимому, более широко поддерживаются, чем без прогрессивные без чередования JPEG файлов.
Стандартное программное обеспечение IJG libjpeg способно создавать неперемещенные файлы. Хотя это не совсем просто, вы можете использовать его утилиту cjpeg
, с опцией -scans
, зарегистрированной в файле wizard.txt
.