Обрезка без потерь (вырезать и вставить) для JPEG
Я ищу примеры / сообщения в блоге / и т. Д. Операций JPEG без потерь (обрезать н капля = вырезать и вставить). Я знаю, что есть программа jpegtran
(http://jpegclub.org/jpegtran), которая может выполнять обрезку без потерь (в определенных ситуациях), но, похоже, не хватает хорошей документации. Да, я попробовал Google.
jpegtran
также есть экспериментальная ветвь, которая позволяет отбрасывать без потерь (= вставлять) в определенных ситуациях, но документация этого, кажется, еще хуже.
Как насчет Jpegtran's drop
переключатель экспериментальный? Есть ли известные проблемы? Люди используют это?
drop
кажется действительно классной и полезной функцией, и мне кажется странным, что она была экспериментальной в течение более 10 лет...
И да, для таких операций можно использовать форматы без потерь, такие как PNG, но меня особенно интересуют JPEG.
Спасибо!
2 ответа
Я потратил слишком много времени, пытаясь это выяснить, поэтому надеюсь, что это поможет кому-то еще. Этот вопрос очень важен для Google при поиске документов с помощью этой так называемой функции "обрезка и удаление".
Обзор:
jpegtran -drop
позволяет "перетаскивать" блоки из одного JPEG в другой JPEG.
Он заменяет только существующие блоки, не расширяет ввод, поэтому вы не можете объединить два JPEG только -drop
,
Тем не менее, если вы поставите -crop
Параметр больше входного изображения, JPEGTran запишет пустые (серые) блоки для увеличения до желаемого размера. Вы можете использовать -drop
заменить эти новые, пустые блоки желаемым изображением.
Вот мой дерьмовый пример ASCII-art:
У вас есть два изображения,
A.jpg
а такжеB.jpg
оба имеют размеры256x256
, Мы хотим объединить эти бок о бок, чтобы получить512x256
образ.+---------+ +---------+ | | | | | A.jpg | | B.jpg | | | | | +---------+ +---------+
"Uncrop"
A.jpg
до необходимого размера.-crop
параметр является стандартным обозначением геометрии X11: WIDTHxHEIGHT+X+Y Положительные значения X/Y измеряются сверху / слева и отрицательные значения снизу / справа соответственно.jpegtran -crop 512x256+0+0 -outfile O.jpg A.jpg +---------+---------+ | \ | | O.jpg \ (blank) | | \ | +---------+---------+
Теперь "капля"
B.jpg
в новый, пустой раздел вO.jpg
-drop
Параметр использует только исходные координаты X/Y.jpegtran -drop +256+0 B.jpg -outfile O.jpg O.jpg +---------+---------+ +---------+ | \ | | | | O.jpg \ o<========| B.jpg | | \ | | | +---------+---------+ +---------+
Готово! Теперь у вас есть один файл,
O.jpg
с размерами512x256
, который содержит объединенное содержимоеA.jpg
а такжеB.jpg
+-------------------+ | | | O.jpg | | | +-------------------+
Заметки:
A.jpg
а такжеB.jpg
должен иметь одинаковую высоту. ЕслиB.jpg
выше, он будет отрезан. ЕслиA.jpg
выше, правая сторона изображения будет иметь пустую полосу отступов.A.jpg
должна иметь ширину, которая заканчивается на весь блок. (Обычно означает делится на 8?)B.jpg
может иметь любую ширину и не должен быть кратным размеру блока.
jpegtran
Страница man и два приложения для Windows ( JpegCrop и JpegJoin) довольно хороши. Если у вас есть конкретная процедура, которую вы пытаетесь выполнить, обновите свой вопрос, чтобы объяснить это.
Я сам использовал -drop
сделать спрайты JPEG без потерь на домашней странице моей компании:
http://bestelec.co.uk/images/front/features.jpg
- Сначала я обрезал исходные фотографии (на границах пикселей), чтобы охватить требуемый кадр. Этот шаг можно сохранить без потерь, используя формат не JPEG. [Арт-директор]
- Затем я масштабировал эти изображения до необходимой ширины, как того требует веб-дизайн. Опять же, сохранены без потерь, так как это промежуточные этапы.
- Затем я пробежал их
cjpeg
с различными вариантами качества, пока я не нашел настройки самого низкого качества, с которыми мне было удобно. - (Необязательно) Затем я обрезал нижний край каждого отдельного изображения пониженного качества, чтобы выровнять его по предпоследней границе MCU на вертикальной оси. Это позволило мне объединить фотографии в вертикальную полосу без пропусков. Мой веб-дизайн не требует определенной высоты, поэтому я был свободен выбрать здесь. Если экстенты ваших компонентных изображений не выровнены по границам MCU (как мои правые края не были), убедитесь, что вы используете сборку jpegtran / JpegJoin за октябрь 2012 года, в противном случае только первое изображение будет отображаться без обрезки.
- Наконец, я объединил изображения в один JPEG, и прогнал результат через
jpegtran -optimise -progressive -copy none
сделать его как можно меньше и прогрессивнее.
В результате я сократил три HTTP-запроса до одного, что позволило раньше запрашивать последующие ресурсы на том же хосте и сократить время загрузки. Для меня это была большая победа, чем преобразование изображений в WebP и их индивидуальное обслуживание, особенно с учетом того, что большинство наших корпоративных посетителей используют IE.