#image-processing #jpeg
#обработка изображений #jpeg
Вопрос:
Я ищу примеры / сообщения в блоге / и т.д. операций без потерь в формате jpeg (обрезка и удаление = вырезание и вставка). Я знаю, что есть программа jpegtran
(http://jpegclub.org/jpegtran ), который может выполнять обрезку без потерь (в определенных ситуациях), но, похоже, не хватает хорошей документации. Да, я пробовал использовать Google.
jpegtran
также имеет экспериментальную ветку, которая позволяет удалять (= вставлять) без потерь в определенных ситуациях, но документация об этом, похоже, еще хуже.
Как насчет drop
того, что переключатель jpegtran является экспериментальным? Есть ли у него известные проблемы? Используют ли люди это?
drop
кажется, это действительно классная и полезная функция, и я нахожу странным, что она является экспериментальной уже более 10 лет…
И да, для таких операций можно было бы использовать форматы без потерь, такие как PNG, но меня особенно интересуют файлы JPEG.
Спасибо!
Комментарии:
1. Или люди знают о других альтернативах обрезки и вставки файлов JPEG без потерь?
2. Обычно операции вырезания или копирования включают чтение файла в память в стандартном формате, что делает его автоматически без потерь с этого момента. Обрезка без потерь включает запись обрезанного изображения обратно в файл JPEG. Он имеет ограничения на размер изображения и границы обрезки.
Ответ №1:
Я потратил слишком много времени, пытаясь разобраться в этом, поэтому надеюсь, что это поможет кому-то еще. Этот вопрос довольно часто встречается в Google при поиске документов по этой так называемой функции «обрезка и удаление».
Обзор:
jpegtran -drop
позволяет «переносить» блоки из одного JPEG в другой JPEG.
Он только заменяет существующие блоки, он не будет расширять ввод, поэтому вы не можете объединить только два файла JPEG -drop
.
Однако, если вы укажете -crop
параметр больше, чем входное изображение, JPEGTran выпишет пустые (серые) блоки для расширения до нужного размера. Затем вы можете использовать -drop
для замены этих новых пустых блоков желаемым изображением.
Вот мой дерьмовый пример ASCII-art:
- У вас есть два изображения,
A.jpg
иB.jpg
оба имеют размеры256x256
. Мы хотим объединить их параллельно, чтобы получить512x256
изображение.--------- --------- | | | | | A.jpg | | B.jpg | | | | | --------- ---------
- «Разрежьте»
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
может иметь любую ширину и не обязательно быть кратным размеру блока.
Комментарии:
1. Я думаю, что файлы JPEG, использующие подвыборку цветности, должны быть кратны 16, а не 8, хотя я могу ошибаться в этом. И, вероятно, необходимо, чтобы оба файла имели один и тот же параметр подвыборки, иначе они не будут объединены должным образом.
Ответ №2:
Справочная jpegtran
страница и два приложения для 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.
Комментарии:
1. почему вы используете спрайты для изображений в формате .jpeg? Предполагается, что изображения в формате jpeg являются содержимым, а не фоном. groups.google.com/forum /#!тема/compass-пользователи/NCfZE2mkWJI
2. @tirengarfio эти файлы JPEG в основном являются украшением, а не контентом.
3. @Unsigned Это не является веской причиной для отклонения этого ответа. Задавший исходный вопрос, похоже, знал, как использовать эту
drop
опцию, я не пытался писать документацию для нее, независимо от того, как сильно вы хотели это найти.4. @Unsigned Можете ли вы опубликовать вопрос и ссылку на него в этих комментариях, и я постараюсь ответить на него для вас. Я не знаю, что именно вы ищете. Вы не смогли использовать
-drop
параметр или у вас что-то получается, но все еще есть проблемы?