Обрезка без потерь (вырезание и вставка) для файлов JPEG

#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:

  1. У вас есть два изображения, A.jpg и B.jpg оба имеют размеры 256x256 . Мы хотим объединить их параллельно, чтобы получить 512x256 изображение.
      ---------    --------- 
    |         |  |         |
    |  A.jpg  |  |  B.jpg  |
    |         |  |         |
     ---------    --------- 
     
  2. «Разрежьте» A.jpg до требуемого размера. -crop Параметр имеет стандартную геометрическую нотацию X11: WIDTHxHEIGHT X Y Положительные значения X / Y измеряются сверху / слева, а отрицательные значения снизу / справа соответственно.
     jpegtran -crop 512x256 0 0 -outfile O.jpg A.jpg
    
     --------- --------- 
    |                  |
    |  O.jpg   (blank) |
    |                  |
     --------- --------- 
     
  3. Теперь «переместите» B.jpg в новый пустой раздел в O.jpg -drop Параметр использует только исходные координаты X / Y.
     jpegtran -drop  256 0 B.jpg -outfile O.jpg O.jpg
    
     --------- ---------      --------- 
    |                  |    |         |
    |  O.jpg      o<========|  B.jpg  |
    |                  |    |         |
     --------- ---------      --------- 
     
  4. Готово! Теперь у вас есть один файл, 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

  1. Сначала я обрезал исходные фотографии вниз (по границам пикселей), чтобы охватить требуемый кадр. Этот шаг можно сохранить без потерь, используя формат, отличный от JPEG. [Художественное направление]
  2. Затем я уменьшил эти изображения до необходимой ширины, как того требует веб-дизайн. Опять же, сохранено без потерь, поскольку это промежуточные этапы.
  3. Затем я проверил их cjpeg с различными параметрами качества, пока не нашел самую низкую настройку качества, с которой мне было удобно.
  4. (Необязательно) Затем я обрезал нижний край каждого отдельного изображения с пониженным качеством, чтобы выровнять его с предпоследней границей MCU на вертикальной оси. Это позволило мне соединить фотографии в вертикальную полосу без пробелов. Мой веб-дизайн не требует определенной высоты, поэтому я мог выбрать ее здесь. Если экстенты ваших изображений компонентов не выровнены по границам MCU (как не были выровнены мои правые края), убедитесь, что вы используете сборку jpegtran / JpegJoin от октября 2012 года, в противном случае только первое изображение будет отображаться без обрезки.
  5. Наконец, я объединил изображения в один формат 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 параметр или у вас что-то получается, но все еще есть проблемы?