Как я могу добавить рамку к фотографии JPEG, не влияя на качество? - Фотопедия
24 голосов
/ 16 марта 2015

У меня есть фотография в формате JPEG с разрешением 4680x3120. Я хочу добавить белую рамку вокруг этой фотографии, превратив ее в фотографию 5200x3467 (для печати).

Понятно, я ничего не изменяю и не удаляю с фотографии, я просто что-то добавляю. Следовательно, в принципе эта процедура может быть без потерь. Однако, если бы я использовал Paint, чтобы добавить эту рамку, процесс сохранения Paint снова сжимает фотографию в формат JPEG, тем самым теряя информацию и качество.

Есть ли способ (более профессиональная программа) добавить что-либо к фотографии JPEG, например, рамку, не затрагивая оригинальную часть фотографии, не уменьшая ее качество?

Ответы [ 6 ]

35 голосов
/ 16 марта 2015

Хотя Ответ Филиппа - лучший путь, в сфере JPEG можно делать то, что вы хотите.

JPEG работает, разбивая ваше изображение на блоки, называемые Минимальные единицы кодирования (MCU), обычно 16 & times; 16 каждый, и сжимая их по отдельности. Вы можете видеть это на изображениях, когда вы повышаете уровень сжатия очень высоко. При более разумных уровнях сжатия блоки смешиваются друг с другом настолько плавно, что вы никогда не увидите границ.

Мы можем воспользоваться этим фактом, чтобы без потерь добавить простую белую рамку к изображению. Нам просто нужно создать полый массив белых блоков, равный размеру выходного изображения, а затем поместить оригинальные блоки MCU JPEG в середину. ¹

У этой техники есть и обратная сторона: она работает только тогда, когда размеры входного и выходного изображений кратны размеру MCU. Если это не так, нам нужно повторно сжать некоторые блоки на полях между белой рамкой и краями исходного изображения. Вы не увидите этой разницы в выходных данных, если будете держаться подальше от чрезмерно высоких уровней сжатия JPEG, поэтому он по-прежнему эффективно без потерь.

Я не знаю ни одной программы, которая делает только это. Самая близкая вещь, о которой я знаю, это то, что выполняет обратную операцию: jpegtran имеет функцию обрезки, которая без потерь обрезает части краев изображения. Это достигается путем отбрасывания обрезанных MCU вдоль края изображения, оставляя их посередине нетронутыми.

Самое простое готовое решение, о котором я знаю, это плагин Better JPEG Lossless Resave для Photoshop. В нем используются методы, основанные на приведенных выше идеях, для копирования MCU из исходного изображения, где это возможно, во избежание их повторного создания из несжатой версии, как это обычно делает Photoshop .³


Отступление:

  1. Вы можете подумать, что результирующая граница будет не совсем белой , так как потери в формате JPEG создадут некоторую разницу в цвете на выходе. Я провел некоторое тестирование, и, по крайней мере, в Photoshop, чисто белое изображение, сохраненное с помощью JPEG-файла уровня 10 Save For Web (то есть «низкого» качества), приводит к тому, что декодированное изображение остается чисто белым.

    Я определил это с помощью двух тестов:

    Сначала я загрузил JPEG как слой поверх оригинала, установил режим наложения верхнего слоя на Разность, затем добавил корректирующий слой Уровни над ним, чтобы попытаться увеличить различия. Полученное изображение оставалось черным, что означает «без разницы».

    Во-вторых, когда мне не удалось увидеть ожидаемые различия, я отбросил корректирующий слой и вернул слой JPEG в режим обычного наложения, взял инструмент «Пипетка» и посмотрел по всему изображению пиксель, который не отображался как RGB (255,255,255) на информационной панели. Я так и не нашел. Я ожидал увидеть, как цифры будут немного мерцать, когда я протирал изображение, но они оставались неизменными.

    Я могу только заключить, что это вырожденный случай алгоритма кодирования: чистые белые блоки остаются белыми через дискретное косинусное преобразование .

    Интересно, что не происходит с чистыми черными блоками. По крайней мере, в реализации Photoshop они превращаются в RGB (1,1,1) при декодировании, а не в RGB (0,0,0).

    Суть в том, что вам не нужно беспокоиться о разбрызганных точках в этой области границы при печати изображения, полученного с использованием вышеуказанной техники.

  2. jpegtran - это программа командной строки, но есть также программа Windows с графическим интерфейсом, основанная на том же коде, который называется jpegcrop.

  3. Увы, этот плагин предназначен только для Windows.

20 голосов
/ 16 марта 2015

Важно помнить, что вы теряете качество при сохранении фотографии в формате сжатия с потерями. Если после добавления рамки вы сохраните фотографию в формате без потерь (PSD, TIFF и т. Д.), Вы не потеряете больше данных, чем уже потеряли, сохранив фотографию в формате JPEG. во-первых.

6 голосов
/ 16 марта 2015

Это не вполне без потерь, но вы можете довольно близко подойти, используя GIMP (или другой редактор с похожей функцией) и следующие два трюка:

  1. Сначала убедитесь, что добавляемая граница имеет кратность , кратную 8 пикселям (и, предпочтительно, кратную 16 пикселям).

    Это важно, поскольку алгоритм сжатия JPEG разбивает изображение на 8 & times; 8 пиксельных блоков *, начиная с верхнего левого угла, и применяет алгоритм сжатия с потерями независимо к каждому блоку. Таким образом, по крайней мере, в принципе, вы можете без потерь дополнить изображение JPEG, добавив 8 × 8-пиксельные блоки вокруг существующих. Однако, если вы попытаетесь добавить рамку шириной не в целое число блоков, блоки в дополненном изображении не будут совпадать с блоками в оригинале, и некоторые потери сжатия будут неизбежны.

    *) На самом деле, большинство изображений JPEG используют субсэмплирование цветности , что означает, что только часть изображения в оттенках серого фактически сжимается в 8 & times; 8 блоков, тогда как каналы цветности уменьшаются на 50% сжатие, делая их эффективный размер блока 16 & times; 16 пикселей. Таким образом, для достижения наилучших результатов ширина вашей границы должна быть кратна 16 пикселям. Тем не менее, обычно можно избежать использования границы в 8 (или 24, 40 и т. Д.) Пикселей, поскольку небольшая потеря сжатия в цветности не очень заметна.

  2. Вторая часть хитрости заключается в том, чтобы при сохранении конечного изображения установить «Использовать настройки качества из исходного изображения» в диалоговом окне Экспорт изображения в JPEG (в разделе «Дополнительные настройки»). Делайте это, даже если кажется, что это приведет к более низкому качеству, чем вы обычно используете!

    Этот параметр позволяет GIMP повторно использовать те же самые параметры сжатия, которые использовались для исходного изображения, что обычно устраняет около 99% потерь при сжатии, при условии, что у вас нет слишком сильно отредактировал изображение, в частности, чтобы блоки в новом изображении совпадали с блоками оригинала. (Из-за ошибок округления время от времени все еще будут некоторые потери, но гораздо меньше, чем было бы в противном случае.)


В качестве быстрой демонстрации я взял это тестовое изображение JPEG из Wikimedia Commons , первоначально сохраненное с довольно низким качеством, равным 50, и добавил причудливую (вроде) черно-белую рамку размером 8 пикселей к нему, используя метод, описанный выше:

Test image with 8px border, mostly lossless

Вот разница между исходным (15,1 кБ) и отредактированным изображением (16,7 кБ), показанным в режиме слоя GIMP «Извлечение зерна»:

Difference between padded image and original

Вы можете увидеть некоторые очень незначительные ошибки цветности, вызванные тем, что ширина границы не кратна 16, и (если вы внимательно посмотрите) несколько блоков, в которых также были незначительные потери в канале яркости из-за округления. Тем не менее, визуально исходное и дополненное изображение практически не различимы, даже при 2-кратном увеличении и попеременном переключении между ними.

В частности, сопоставьте это с результатом повышения качества JPEG до с 50 до 60 перед сохранением дополненного изображения, что дает следующее изображение размером 17,6 кБ:

Test image with 8px border, quality raised from 50 to 60

При большом увеличении вы определенно можете увидеть, что отредактированное изображение в некоторых местах заметно размытее, чем оригинал, и взятие разницы с экстрактом зерна подтверждает это:

Difference between padded image (at q60) and original

3 голосов
/ 16 марта 2015

Извините, если это не совсем то, что вы хотели, но ...

Звучит так, как будто вы добавили белую рамку для облегчения позиционирования изображения при печати. Почему бы не сосредоточиться на изучении интерфейсов печати должным образом и избегать таких хитрых хаков? Другая проблема, которая возникает, заключается в том, что вы позволяете программе печати изменять размер изображения 4680x3120 в соответствии с правильным разрешением / разрешением. Это может иметь более серьезный эффект, чем повторное сохранение JPEG.

1 голос
/ 17 марта 2015

Предыдущие ответы очень хороши.

Я просто добавлю некоторые «психологические аспекты» формата jpg.

Если JPG хорошо подготовлен, он теряет только около 0,5% информации. Это в подавляющем большинстве случаев то, что человеческий глаз не может видеть. Вам нужна программа, чтобы провести некоторый анализ и увидеть различия (как анализ, который только что сделал Ильмари).

«Хорошее качество» - это процесс, а не только способ, которым формат файла сохраняет изображение. Да, вы повторно сжали файл с помощью jpg, потому что вам действительно это нужно. Если он находится в контролируемой ситуации, это нормально.

Вы действительно необходимо, это означает, что вы не можете использовать другой формат без потерь, у вас очень специфические потребности в хранилище или программном обеспечении, или очень жесткий рабочий процесс.

Если вы действительно беспокоитесь о качестве, возможно, вы бы не использовали Paint. В формате JPG есть некоторые конфигурации, которые вы вообще не можете контролировать в Paint.

Вот мой список бесплатных программ, в которых вы действительно можете управлять сжатием jpg, и вариант, который вам нужно выбрать. (Все они в диалоговом окне сохранения JPG)

Irfanview - Включите Отключить подвыборку цветности цвета.

FastStone Image Viewer - Цветовая подвыборка: отсутствует.

Gimp - Подвыборка 4: 4: 4

Заключение. Не используйте Paint.

Одна вещь, которую я еще не проверил. Если все эти программы поддерживают встроенный цветовой профиль. Я отредактирую свой пост позже.

0 голосов
/ 14 сентября 2016

IrfanView хорошо работает для меня для наборов изображений. Вот некоторые заметки с инструкциями

Вот моя хранимая процедура для вставки границы - Инфран Процедура добавления границы

  1. Изображение правой кнопкой мыши, «Открыть с помощью» -> «InfranView»
  2. Нажмите «b»
  3. Установите флажок «Использовать дополнительные параметры» в левом верхнем углу, нажмите «Дополнительно»
  4. Отметьте «Размер холста», нажмите «Настройки»
  5. Введите ширину каждой границы (Левая сторона, Правая сторона, Верхняя сторона, Нижняя сторона)
  6. Нажмите «ОК»
  7. Выберите «Перезаписать существующие файлы»
  8. Нажмите «ОК»
  9. Введите выходной каталог 'Выходной каталог для файлов результатов:'
  10. Перейдите и дважды щелкните изображение, чтобы добавить рамку в верхний список. Это добавит его в список «входные файлы:» внизу списка
  11. Нажмите «Стартовая партия»
...