Может ли сжатое изображение JPEG вращаться без потери качества? - PullRequest
23 голосов
/ 13 февраля 2009

JPEG - это схема сжатия с потерями, поэтому декомпрессия-манипуляция-повторная компрессия обычно снижает качество изображения для каждого шага. Возможно ли повернуть изображение JPEG без дополнительных потерь? Из того, что я мало знаю об алгоритме JPEG, наивно кажется возможным избежать дальнейших потерь с небольшим усилием. Какие распространенные программы для работы с изображениями (например, GIMP, Paint Shop Pro, Windows Photo Gallery) и графические библиотеки вызывают потерю качества при выполнении поворота, а какие нет?

Ответы [ 10 ]

14 голосов
/ 15 мая 2009

Существует программа с именем jpegtran

jpegtran - утилита для транскодирования без потерь между различными форматами JPEG.

Чтобы повернуть изображение без потерь, вы можете сделать следующее:

$ jpegtran -rotate 180 -perfect -outfile rotated.jpg origin.jpg

И Вот список приложений, которые обеспечивают функцию поворота JPEG без потерь на основе кода IJG

11 голосов
/ 13 февраля 2009

Абсолютно - просто измените значение ориентации в данных EXIF. Подавляющее большинство графических программ будут соблюдать этот параметр и отображать изображение «повернутым».

Также возможно «вручную» (например, программно) повернуть изображение без потерь, если определенные критерии верны - поворот должен быть 90/180 градусов, а ширина / высота должна быть кратна размеру блока. Вы также можете перевернуть / отразить это. Я не знаю, достаточно ли умны программы для работы с изображениями, чтобы выполнить эту операцию в особом случае. Я бы не догадался.

9 голосов
/ 13 февраля 2009

Да, это возможно для определенных случаев: повороты на 90 градусов и перевороты на изображениях. Суть алгоритма JPEG - часть с потерями - включает разбиение изображения на блоки 8x8 пикселей, выполнение дискретного косинусного преобразования на блоке и затем квантование результата. Кроме того, имеется некоторое преобразование цветового пространства и сжатие без потерь блоков.

Вращение или переворачивание блока 8x8 даст DCT с теми же базовыми коэффициентами, но, возможно, транспонированными и / или с некоторыми изменениями знака в зависимости от преобразования. Таким образом, основные шаги для поворота или переворачивания изображения без потерь будут включать:

  1. Распаковать и извлечь блоки
  2. Транспонирование и / или знак переворачивания коэффициентов DCT для каждого блока
  3. Перестановка блоков в их новом порядке (в противном случае блоки 8x8 были бы повернуты, но все еще в старом месте)
  4. Повторное сжатие с шагами сжатия без потерь.
9 голосов
/ 13 февраля 2009

Из JPEG FAQ :

"Есть несколько специализированных операции, которые могут быть выполнены на JPEG файл без распаковки, и таким образом, не неся потеря поколения, которую вы обычно получить от загрузки и повторно сохранить изображение в обычном редакторе изображений. В конкретнее можно сделать Повороты на 90 градусов и сальто без потерь, если размеры изображения кратны блоку файла размер (обычно 16x16, 16x8 или 8x8 пикселей для цветных JPEG).
...

Но вам нужно специальное программное обеспечение; вращение изображения в обычном графическом редакторе не будет без потерь. "

2 голосов
/ 13 февраля 2009

Да, это возможно.
Быстрый поиск в Google дал этот список программ , которые делают это

2 голосов
/ 13 февраля 2009

Не эксперт jpg, но кажется, что ответом будет Да для поворотов на 90, 180 и 270 градусов. (может даже за 360! :))

1 голос
/ 21 января 2010

Согласно превосходной статье Понимание цифровой интерполяции изображений Шоном Макхью:

Интерполяция также происходит каждый раз, когда вы поворачиваете или искажаете изображение. (...) Поворот на 90 ° без потерь, потому что ни один пиксель никогда не должен быть перемещен на границу между двумя пикселями (и, следовательно, разделены).

и в конечном итоге заканчивается

избегайте поворота ваших фотографий, когда это возможно; если выровняли фото требуется, вращайте не более одного раза.

0 голосов
/ 10 апреля 2014

Если это может помочь:

Пытаясь добиться большего успеха, чем встроенная программа просмотра изображений Microsoft (Windows 7) и ее параметры вращения правой кнопкой мыши, я попробовал несколько приложений по следующей ссылке: http://jpegclub.org/losslessapps.html

Например, я пробовал FastStone Image Viewer, XnView, Photosurfer, JPEG Lossless Rotator, ExifPro Image Viewer.

Ни один из них не дает большую картинку, чем обычная программа просмотра изображений Windows 7 после простого поворота на 90 °. По общему признанию ограничено, чтобы закончить так быстро, но я все еще не нашел реального приложения вращения без потерь .jpeg на данный момент, и в любом случае не лучше, чем встроенное приложение Windows.

0 голосов
/ 13 февраля 2009

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

Что касается открытия и повторного сжатия, я не уверен, что вы действительно получите худшее качество, но тогда я не уверен точно, как работает JPEG.

Я предлагаю вам попробовать сжать, манипулировать и повторно сжать и убедиться, что результат достаточно хорош. То, что достаточно хорошо, зависит от вашего заявления.

0 голосов
/ 13 февраля 2009

Если вы говорите о повороте изображения в формате JPEG, тогда нет никакого дальнейшего сжатия, верно? Речь идет о поворотах в пикселях.

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

...