LINUX.ORG.RU

Как повернуть JPEG-изображение без искажений?


0

2
$ jpeginfo foto.jpg 
800 600
$ convert -rotate 90 foto.jpg 1-90.jpg
$ convert -rotate -90 1-90.jpg 2-90.jpg
$ ls -l *.jpg
-rw-r--r-- ... 160313 ... 1-90.jpg
-rw-r--r-- ... 157738 ... 2-90.jpg
-rw-r--r-- ... 169681 ... foto.jpg

Как видно, размер файла изменился: foto -> 1-90 -> 2-90.

man convert
         -rotate degrees      apply Paeth rotation to the image
         -transpose           flip image vertically and rotate 90 degrees
         -transverse          flop image horizontally and rotate 270 degrees

★★★★★

Ответ на: комментарий от Alan_Steel
$ jpegdump foto.jpg > foto.txt
$ jpegdump 1-90.jpg > 1-90.txt
$ jpegdump 2-90.jpg > 2-90.txt

$ sdiff foto.txt 2-90.txt | wc -l
601
$ wc -l foto.txt 
601 foto.txt

$ tail -n2 2-90.txt | colrm 34
03 05 02 05 07 04 0D 0E 08 1C 1D 
01 03 02 05 07 06 11 12 0C 1F 20 

$ tail -n2 foto.txt | colrm 34
03 04 06 05 06 08 0D 0E 08 1E 1F 
02 04 01 04 06 03 11 13 08 21 23
pacify ★★★★★ ()
Ответ на: комментарий от pacify

Ок, уточняю вопрос: почему ты решил, что присутствующие искажения внесены именно операцией поворота?

Jpeg - lossy формат, при перекодировании часть информации теряется.

Alan_Steel ★★ ()
Ответ на: комментарий от Alan_Steel

>Jpeg - lossy формат, при перекодировании часть информации теряется.

Но его можно повернуть на угол, кратный прямому, без потерь, не пересчитывая дискретные косинусные преобразования. И большая часть софта это умеет.

dn2010 ★★★★★ ()

> libjpeg-progs - Programs for manipulating JPEG files

NAME

jpegtran - lossless transformation of JPEG files



rain@acnote:/tmp/test$ jpegtran -rotate 90 PC214514+90-90.JPG > PC214514+90-90+90.JPG
rain@acnote:/tmp/test$ jpegtran -rotate 270 PC214514+90-90+90.JPG > PC214514+90-90+90-90.JPG
rain@acnote:/tmp/test$ md5
md5pass md5sum md5sum.textutils
rain@acnote:/tmp/test$ md5sum *
a130e6ffb563836613218df56048f7ce PC214514+90-90+90-90.JPG
d750709a959f487e420ed5a6bbeeb6dd PC214514+90-90+90.JPG
a130e6ffb563836613218df56048f7ce PC214514+90-90.JPG
d750709a959f487e420ed5a6bbeeb6dd PC214514+90.JPG
2bd62b6ee66ec6f9b274810ed7505709 PC214514.JPG

YAR ★★★★★ ()
Ответ на: комментарий от dn2010

Да вы если один и тот же файл будете несколько раз подряд трансформировать jpeg->tiff->jpeg, получите совершенно другие файлы...

Eddy_Em ☆☆☆☆☆ ()
Ответ на: комментарий от Eddy_Em

>Да вы если один и тот же файл будете несколько раз подряд трансформировать jpeg->tiff->jpeg, получите совершенно другие файлы...

Ну это зависит от того, в какой вариант tiff трансформировать. Если механизм трансформирования умный, и JPEG-поток просто меняет контейнер с JFIF на TIFF, то файл может вообще побайтово идентичным остаться.

dn2010 ★★★★★ ()

>>размер файла изменился: foto -> 1-90 -> 2-90.

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

mclaudt ()
Ответ на: комментарий от anonymous

> a130e6ffb563836613218df56048f7ce PC214514+90-90+90-90.JPG

a130e6ffb563836613218df56048f7ce PC214514+90-90.JPG


d750709a959f487e420ed5a6bbeeb6dd PC214514+90.JPG

d750709a959f487e420ed5a6bbeeb6dd PC214514+90-90+90.JPG



Как видишь, не поменялся.

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

YAR ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.