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

Я ищу примеры / сообщения в блогах / и т. Д. Операций с jpeg без потерь (обрезка n drop = вырезать и вставить). Я знаю, что есть программа jpegtran (http://jpegclub.org/jpegtran), которая может выполнять кадрирование без потерь (в определенных ситуациях), но, похоже, отсутствует хорошая документация. Да, я пробовал гугл.

jpegtran также имеет экспериментальную ветку, которая позволяет отбрасывать без потерь (= вставку) в определенных ситуациях, но документация по этому поводу кажется еще хуже.

Что насчет drop переключателя jpegtran экспериментально? Есть ли известные проблемы? Люди этим пользуются?

drop кажется действительно крутой и полезной функцией, и мне кажется странным, что она была экспериментальной уже более 10 лет ...

И да, для таких операций можно использовать форматы без потерь, такие как PNG, но меня особенно интересуют JPEG.

Спасибо!


person tdp2110    schedule 31.10.2011    source источник
comment
Или люди знают о других альтернативах без потерь кадрирования и вставки JPEG-файлов?   -  person tdp2110    schedule 01.11.2011
comment
Обычно операции вырезания или копирования включают чтение файла в память в стандартном формате, что с этого момента автоматически делает его без потерь. Обрезка без потерь включает запись кадрированного изображения обратно в файл JPEG. У него есть ограничения на размер изображения и границы кадрирования.   -  person Mark Ransom    schedule 07.11.2011


Ответы (2)


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

Обзор:

jpegtran -drop позволяет вам «перетаскивать» блоки из одного JPEG в другой JPEG.

Он только заменяет существующие блоки, он не расширяет ввод, поэтому вы не можете объединить два JPEG с помощью только -drop.

Однако, если вы предоставите параметр -crop больше, чем входное изображение, JPEGTran будет записывать пустые (серые) блоки для расширения до желаемого размера. Вы можете затем использовать -drop для замены этих новых пустых блоков желаемым изображением.

Взгляните на мой дерьмовый пример ASCII-арта:

  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 может иметь любую ширину и не должен быть кратным размеру блока.
person Unsigned    schedule 13.04.2015
comment
Я думаю, что файлы JPEG, в которых используется подвыборка цветности, должны делиться на 16, а не на 8, хотя я могу ошибаться в этом. И, вероятно, необходимо, чтобы оба файла имели одинаковую опцию субдискретизации, иначе они не будут правильно сочетаться. - person Mark Ransom; 29.08.2015

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.

person Nicholas Shanks    schedule 19.06.2013
comment
почему вы используете спрайты для изображений .jpeg? Предполагается, что изображения jpeg являются контентом, а не фоном. groups.google.com/forum/#!topic/compass-users/ NCfZE2mkWJI - person ziiweb; 09.07.2013
comment
@tirengarfio эти JPEG-файлы в основном являются украшением, а не содержанием. - person Nicholas Shanks; 09.07.2013
comment
@Unsigned Это не хорошая причина для того, чтобы отрицать этот ответ. Автор исходного вопроса, похоже, знал, как использовать параметр drop, я не пытался писать для него документацию, как бы вы ни хотели это найти. - person Nicholas Shanks; 20.04.2015
comment
@Unsigned Можете ли вы опубликовать вопрос и дать ссылку на него в этих комментариях, и я постараюсь ответить на него за вас. Я не знаю, что именно вы ищете. Вы не смогли использовать параметр -drop, или вы куда-то попадаете, но все еще есть проблемы? - person Nicholas Shanks; 21.04.2015