У меня есть фото в формате JPEG с разрешением 4680x3120. Я хочу добавить белую рамку вокруг этой фотографии, превратив ее в фотографию 5200x3467 (для печати).
Понятно, что я ничего не изменяю и не удаляю с фотографии, я просто что-то добавляю. Поэтому в принципе эта процедура может быть без потерь. Однако, если бы я использовал Paint для добавления этой границы, процесс сохранения Paint снова сжал бы фотографию в формат JPEG, тем самым потеряв информацию и качество.
Есть ли способ (какая-то более профессиональная программа) добавить что-то к фотографии в формате JPEG, например, рамку, не затрагивая исходную часть фотографии, не снижая ее качества?
Хотя ответ Филиппа - лучший способ, можно делать то, что вы хотите, полностью в сфере JPEG.
JPEG работает, разбивая ваше изображение на блоки, называемые минимальными единицами кодирования (MCU), обычно 16 × 16 каждый, и сжимая их по отдельности. Вы можете увидеть это на изображениях, когда очень сильно увеличиваете уровень сжатия. При более разумных уровнях сжатия блоки смешиваются так плавно, что вы никогда не видите границ.
Мы можем воспользоваться этим фактом, чтобы без потерь добавить к изображению простую белую рамку. Нам просто нужно создать пустой массив белых блоков, равный размеру выходного изображения, а затем поместить исходные блоки MCU JPEG в середину.¹
У этого метода есть обратная сторона: он работает только тогда, когда размеры входного и выходного изображения кратны размеру микроконтроллера. Если это не так, нам нужно повторно сжать некоторые блоки на границе между белой рамкой и краями исходного изображения. Вы не увидите этой разницы в выводе, если будете держаться подальше от чрезмерно высоких уровней сжатия JPEG, поэтому он по-прежнему будет практически без потерь.
Я не знаю ни одной программы, которая делает только это. Самое близкое, что я знаю, это что-то, что выполняет обратную операцию: у jpegtran есть функция кадрирования, которая без потерь обрезает части краев изображения. середина нетронутая.
Самое простое готовое решение, которое я знаю, это плагин Better JPEG Lossless Resave для Photoshop. Он использует методы, основанные на идеях, приведенных выше, для копирования MCU из исходного изображения везде, где это возможно, чтобы избежать их повторного создания из несжатой версии, как это обычно делает Photoshop.³
Отступления:
Вы можете подумать, что результирующая рамка будет не совсем белой , так как потери JPEG создадут некоторую разницу в цвете на выходе. Я провел некоторое тестирование, и, по крайней мере, в Photoshop, чисто белое изображение, сохраненное с помощью Save For Web JPEG level 10 (т.е. «низкое» качество), приводит к декодированному изображению, которое по-прежнему остается чисто белым.
Я определил это двумя тестами:
Сначала я загрузил JPEG как слой поверх оригинала, установил режим наложения верхнего слоя на «Разница», затем добавил над ним корректирующий слой «Уровни», чтобы попытаться увеличить различия. Полученное изображение оставалось черным, что указывало на «нет разницы».
Во-вторых, когда я не увидел ожидаемых различий, я удалил корректирующий слой и вернул слой JPEG в режим наложения «Нормальный», взял инструмент «Пипетка» и просмотрел все изображение в поисках пикселя, который не отображался как RGB (255 255 255). ) на информационной панели. Я так и не нашел. Я ожидал увидеть, как цифры немного мерцают, когда я протирал изображение, но они оставались стабильными.
Могу только заключить, что это вырожденный случай алгоритма кодирования: чисто белые блоки остаются белыми благодаря дискретному косинусному преобразованию .
Интересно, что с чисто черными блоками этого не происходит. По крайней мере, с реализацией Photoshop при декодировании они превращаются в RGB (1,1,1), а не в RGB (0,0,0).
Суть в том, что вам не нужно беспокоиться о напыленных точках в этой граничной области при печати изображения, полученного с использованием описанной выше техники.
jpegtran
— это программа командной строки, но есть также программа для Windows с графическим интерфейсом, основанная на том же коде, который называется jpegcrop
.
Увы, этот плагин только для Windows.
Здесь следует помнить, что вы теряете качество при сохранении фотографии в формате сжатия с потерями. Пока вы сохраняете фотографию в формате без потерь (PSD, TIFF и т. д.) после добавления границы, вы не потеряете больше данных, чем вы уже потеряли, сохранив фотографию в формате JPEG.
Это не совсем без потерь, но вы можете приблизиться к этому, используя GIMP (или какой-либо другой редактор с аналогичной функцией) и следующие два приема:
Во-первых, убедитесь, что ширина границы, которую вы добавляете, кратна 8 пикселям (и предпочтительно кратна 16 пикселям).
Это важно, поскольку алгоритм сжатия JPEG разбивает изображение на блоки размером 8×8 пикселей *, начиная с верхнего левого угла, и независимо применяет алгоритм сжатия с потерями к каждому блоку. Таким образом, по крайней мере в принципе, вы можете без потерь дополнить изображение JPEG, добавляя полные блоки размером 8×8 пикселей вокруг существующих. Однако если вы попытаетесь добавить рамку шириной не в целое число блоков, блоки в дополненном изображении не совпадут с блоками в оригинале, и некоторые потери при сжатии будут неизбежны.
*) На самом деле, в большинстве изображений JPEG используется подвыборка цветности , что означает, что только часть изображения в градациях серого фактически сжимается в блоки 8×8, тогда как каналы цветности перед сжатием уменьшаются на 50%, что делает их эффективный размер блока 16× 16 пикселей. Таким образом, для достижения наилучших результатов ширина границы должна быть кратна 16 пикселям. Тем не менее, вы обычно можете обойтись рамкой в 8 (или 24, или 40 и т. д.) пикселей, так как небольшая потеря сжатия в цветности не очень заметна.
Вторая часть хитрости заключается в том, чтобы при сохранении конечного изображения установить флажок «Использовать настройки качества из исходного изображения» в диалоговом окне «Экспорт изображения в формате JPEG» (в разделе «Дополнительные настройки»). Сделайте это, даже если кажется, что это приведет к более низкому качеству, чем вы обычно используете!
Этот параметр позволяет GIMP повторно использовать точно такие же параметры сжатия, которые использовались для исходного изображения, что обычно устраняет около 99% потерь при сжатии, при условии, что вы не редактировали изображение слишком сильно, и, в частности, что блоки в новое изображение по-прежнему совпадает с оригинальным. (Иногда все еще будут некоторые потери из-за ошибок округления, но гораздо меньше, чем в противном случае.)
В качестве быстрой демонстрации я взял это тестовое изображение JPEG из Wikimedia Commons , изначально сохраненное с довольно низкой настройкой качества 50, и добавил к нему причудливую (что-то вроде) черно-белую рамку 8px, используя метод, описанный выше:
Вот разница между исходным (15,1 КБ) и отредактированным изображением (16,7 КБ), показанным с использованием режима слоя GIMP «Извлечение зерна»:
Вы можете увидеть очень небольшие ошибки цветности, вызванные тем, что ширина границы не кратна 16, и (если присмотреться) несколько блоков, где также были небольшие потери в канале яркости из-за округления. Тем не менее, визуально исходное изображение и дополненное изображение почти неразличимы, даже при двукратном увеличении и поочередном переключении между ними.
В частности, сравните это с результатом повышения качества JPEG с 50 до 60 перед сохранением дополненного изображения, что дает следующее изображение размером 17,6 КБ:
При большом увеличении точно видно, что отредактированное изображение в некоторых местах заметно размытее оригинала, и снятие разницы с экстрактом зерна подтверждает это:
compare
, я получаю PSNR 34,5826 для оригинального JPEG, 34,5752 для копии, повторно сохраненной с теми же настройками качества, и 34,3653 для копии, повторно сохраненной в q40. Достаточно хорошо?Извините, если это не совсем то, что вы хотели, но...
Похоже, вы добавляете белую рамку в качестве помощи для позиционирования изображения при печати. Почему бы не сосредоточиться на правильном изучении интерфейсов печати и избежать таких хитрых хаков? Другая проблема, которая возникает, заключается в том, разрешаете ли вы программе печати изменять размер изображения 4680x3120, чтобы он соответствовал правильному DPI/разрешению. Это может иметь более серьезные последствия, чем повторное сохранение в формате jpeg.
Предыдущие ответы очень хорошие.
Я просто добавлю некоторые «психологические аспекты» формата jpg.
Если jpg хорошо подготовлен, он теряет только около 0,5% информации. Это в подавляющем большинстве случаев то, что человеческий глаз не может увидеть. Вам нужна программа, чтобы провести некоторый анализ и увидеть различия (например, анализ, который только что сделал Илмари).
«Хорошее качество» — это процесс, а не только то, как формат файла сохраняет изображение. Да, вы еще раз пересжали файл с помощью jpg, потому что он вам действительно был нужен. Если это контролируемая ситуация, то это нормально.
Вам действительно нужно, это означает, что вы не можете использовать другой формат без потерь, у вас очень специфические требования к хранилищу или программному обеспечению, или очень плотный рабочий процесс.
Если вас действительно беспокоит качество, вы, вероятно, не будете использовать Paint. Формат JPG имеет некоторые настройки, которыми вы вообще не можете управлять в Paint.
Вот мой список бесплатных программ, где вы действительно можете контролировать сжатие jpg, и вариант, который вам нужно выбрать. (Все они в диалоговом окне сохранения jpg)
Irfanview - Включите Отключить субдискретизацию цвета цветности.
FastStone Image Viewer - субдискретизация цвета: нет.
GIMP — субдискретизация 4:4:4
Вывод. Не используйте Пейнт.
Одно я еще не проверял. Если все эти программы поддерживают встроенный цветовой профиль. Я отредактирую свой пост позже.
IrfanView хорошо работает для наборов изображений. Вот несколько заметок
Вот моя хранимая процедура для вставки границы - Процедура Infran для добавления границы
Вы можете сделать это бесплатно с помощью Adobe Acrobat! Щелкните правой кнопкой мыши свою фотографию, затем выберите «Открыть с помощью Adobe Acrobat». В Adobe нажмите «Редактировать PDF». Выберите все изображение (Ctrl A), затем уменьшите его, чтобы вокруг него была белая рамка. Затем нажмите «Экспортировать как» и выберите нужный формат (JPEG, PNG и т. д.).
суперкот
матдм
jpegtran
функция урожая также может быть использована для расширения. (Однако не уверен, какого цвета будут расширенные границы.)Уоррен Янг
jpegtran
также можно расширить изображение, но оно всегда дополняется жестко закодированным средним серым, RGB (128 128 128). Он делает это просто потому, что это единственный простой вариант, поскольку в пространстве коэффициентов DCT вы можете сделать это с помощью простогоbzero()
вызова. Я попытался изменить это диким хаком , который не работает, но должен дать вам ощущение уродства. разводит руками в отчаянииИльмари Каронен
Уоррен Янг
JBLOCK
2D-массивов, поэтому я записываю в пространство памяти, которым не владею. Не стесняйтесь делать свой собственный патч или риффовать на мой. Я думаю, что преследовал этого кролика так далеко, как хотел.хобби
Рафаэль
Уоррен Янг