JPEG — это схема сжатия с потерями, поэтому декомпрессия-манипулирование-повторное сжатие обычно снижает качество изображения на каждом этапе. Можно ли повернуть изображение JPEG без дальнейших потерь? Из того немногого, что я знаю об алгоритме JPEG, наивно кажется возможным избежать дальнейших потерь, приложив немного усилий. Какие распространенные программы для работы с изображениями (например, GIMP, Paint Shop Pro, Windows Photo Gallery) и графические библиотеки приводят к потере качества при повороте, а какие нет?
Можно ли повернуть сжатое изображение JPEG без потери качества?
Ответы (10)
Да, это возможно для определенных случаев: повороты на 90 градусов и перевороты изображений. Сердце алгоритма JPEG — часть с потерями — включает в себя разбиение изображения на блоки 8x8 пикселей, выполнение дискретное косинусное преобразование блока и последующее квантование результата. Кроме того, есть некоторое преобразование цветового пространства и сжатие блоков без потерь.
Вращение или переворачивание блока 8x8 даст DCT с теми же основными коэффициентами, но, возможно, транспонированными и/или с некоторыми изменениями знака в зависимости от преобразования. Таким образом, основные шаги для поворота или отражения изображения без потерь включают:
- Распаковать и извлечь блоки
- Транспонировать и/или поменять знак коэффициентов DCT для каждого блока
- Перетасуйте блоки в их новом порядке (иначе блоки 8x8 будут повернуты, но останутся на старом месте)
- Повторно сжимайте все это с помощью шагов сжатия без потерь.
Есть программа jpegtran.
jpegtran — утилита для транскодирования без потерь между различными форматами JPEG.
Чтобы повернуть изображение без потерь, вы можете сделать следующее:
$ jpegtran -rotate 180 -perfect -outfile rotated.jpg origin.jpg
И Вот список приложений, обеспечивающих функцию поворота JPEG без потерь на основе кода IJG
libjpeg-turbo
в ArchLinux.
- person VasiliNovikov; 19.02.2017
-perfect
либо делает операцию успешной и дает вращение без потерь, либо вообще не производит никакого вывода и терпит неудачу.
- person VasiliNovikov; 05.12.2020
Абсолютно - просто измените значение ориентации в данных EXIF. Подавляющее большинство программ обработки изображений будут учитывать этот параметр и показывать изображение «повернутым».
Также возможно "вручную" (например, программно) повернуть изображение без потерь, если выполняются определенные критерии - поворот должен быть 90/180 градусов, а ширина/высота должны быть кратны размеру блока. Вы также можете перевернуть / отразить его. Я не знаю, достаточно ли умны программы обработки изображений, чтобы использовать эту операцию в особых случаях. Я бы предположил, что нет.
QImage
/QPixmap
не принимает во внимание поле ориентации exif.
- person Gabriel; 20.01.2020
Из часто задаваемых вопросов по JPEG:
«Существует несколько специальных операций, которые можно выполнить с файлом JPEG без его распаковки и, таким образом, без потери поколения, которую вы обычно получаете при загрузке и повторном сохранении изображения в обычном редакторе изображений. В частности, это можно выполнять повороты и перевороты на 90 градусов без потерь, если размеры изображения кратны размеру блока файла (обычно 16 x 16, 16 x 8 или 8 x 8 пикселей для цветных файлов JPEG).
...Но вам нужно специальное программное обеспечение; вращение изображения в обычном графическом редакторе не будет без потерь».
Не эксперт по jpg, но кажется, что ответ будет Да для поворотов на 90, 180, 270 градусов. (может даже на 360! :))
Да, это возможно.
Быстрый поиск в Google дал список программ, которые делают это
Если вы говорите о вращении изображения в формате JPEG, то дальнейшего сжатия нет, верно? Речь идет о вращении пикселей.
Выполнение поворота с помощью любой программы потенциально изменит промежуточные размеры, так как необходимо сохранить исходное изображение, это может быть проблемой для рассмотрения.
Если вы не повернете изображение на угол, кратный 90 градусам, ваше изображение должно будет выполнить некоторую интерполяцию, которая может снизить качество вашего изображения. Здесь поможет хороший алгоритм интерполяции.
Что касается открытия и повторного сжатия, я не уверен, что вы действительно ухудшите качество, но тогда я не уверен, как именно работает JPEG.
Я предлагаю вам попробовать сжимать, манипулировать и повторно сжимать и лично убедиться, достаточно ли хорош результат. То, что достаточно хорошо, зависит от вашего заявления.
Согласно прекрасной статье Шона МакХью Understanding Digital Image Interpolation:
Интерполяция также происходит каждый раз, когда вы поворачиваете или искажаете изображение. (...) Поворот на 90° выполняется без потерь, потому что ни один пиксель не нужно перемещать на границу между двумя пикселями (и, следовательно, разделять).
и в конце концов заканчивается
по возможности избегайте поворота фотографий; если этого требует невыровненная фотография, поверните не более одного раза.
Если это может помочь:
Пытаясь добиться большего успеха, чем встроенное средство просмотра изображений Microsoft (Windows 7) и его параметры поворота правой кнопкой мыши, я попробовал несколько приложений по следующей ссылке: http://jpegclub.org/losslessapps.html
Например, я попробовал FastStone Image Viewer, XnView, Photosurfer, JPEG Lossless Rotator, ExifPro Image Viewer.
НИ ОДНА из них не дает изображения большего размера, чем базовая программа просмотра изображений Windows 7 после простого поворота на 90°. По общему признанию, это ограничено, чтобы закончить так быстро, но я до сих пор не нашел настоящего приложения для вращения .jpeg без потерь на данный момент, и в любом случае не лучше, чем встроенное в Windows.