Может JPEG сжатое изображение быть повернутым без потери по качеству?

Единственный способ, которым я мог быстро найти, - использовать объект Desktop:

from pywinauto import Desktop

d = Desktop(backend='uia')
main_window = d.window(title_re='.*- Microsoft Edge', control_type="Window")
#main_window.dump_tree() # print long output with control identifiers

# after some experiments I could find this is correct edit box
address_edit = main_window.child_window(auto_id="addressEditBox", control_type="Edit")
address_edit.set_edit_text('www.google.com')

# could not find another way to start loading the page yet
address_edit.type_keys('{ENTER}')
23
задан Jon Seigel 25 April 2010 в 05:07
поделиться

9 ответов

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

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

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

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

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

11
ответ дан Andrew Grant 29 November 2019 в 01:41
поделиться

От JPEG FAQ:

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

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

9
ответ дан ISW 29 November 2019 в 01:41
поделиться

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

2
ответ дан Assaf Lavie 29 November 2019 в 01:41
поделиться

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

2
ответ дан shoosh 29 November 2019 в 01:41
поделиться

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

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

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

0
ответ дан Hannes Ovrén 29 November 2019 в 01:41
поделиться

Если Вы говорите о вращении изображения JPEG затем нет никакого дальнейшего права сжатия? Это о вращающихся пиксельных местоположениях.

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

0
ответ дан Ketan 29 November 2019 в 01:41
поделиться

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

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

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

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

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

14
ответ дан 29 November 2019 в 01:41
поделиться

Согласно отличной статье на Понимание интерполяции цифрового изображения Sean MCHUGH:

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

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

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

1
ответ дан 29 November 2019 в 01:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: