LINUX.ORG.RU

jpegtran -crop теряет край

 , jpegtran


0

1

Есть 2 файла JPEG. 800х600 и 800х494. Я хочу объединить их по вертикали в один без потери качества. Горизонтальные серые полосы не мешают.

В сети рекомендуют увеличить один файл до суммарного размера -crop-ом и вставить туда другой -drop-ом. Но когда я делаю 1-му файлу jpegtran -crop 800x1104+0+0 -outfile tmp1.jpg 1.jpg, в нём изображение обрезается на высоте 592. -perfectничего не даёт, -verbose и -report ничего интересного не показывают. Как я понимаю, изображение разбито на квадраты 16x16, и нижний ряд квадратов (заполненных наполовину) отбрасывается. Как его сохранить?

★★★★★

Последнее исправление: question4 (всего исправлений: 1)
$ jpegtran -verbose -verbose -verbose -verbose  -verbose -report -perfect -crop 800x1104+0+0 -outfile tmp1.jpg 1.jpg
libjpeg-turbo version 3.1.0 (build 20250323)
Copyright (C) 2009-2024 D. R. Commander
Copyright (C) 2015, 2020 Google, Inc.
Copyright (C) 2019-2020 Arm Limited
Copyright (C) 2015-2016, 2018 Matthieu Darbois
Copyright (C) 2011-2016 Siarhei Siamashka
Copyright (C) 2015 Intel Corporation
Copyright (C) 2013-2014 Linaro Limited
Copyright (C) 2013-2014 MIPS Technologies, Inc.
Copyright (C) 2009, 2012 Pierre Ossman for Cendio AB
Copyright (C) 2009-2011 Nokia Corporation and/or its subsidiary(-ies)
Copyright (C) 1999-2006 MIYASAKA Masaru
Copyright (C) 1999 Ken Murchison
Copyright (C) 1991-2020 Thomas G. Lane, Guido Vollbeding

Emulating The Independent JPEG Group's software, version 6b  27-Mar-1998

Start of Image
JFIF APP0 marker: version 1.01, density 72x72  1
Define Quantization Table 0  precision 0
           4    3    3    4    6   10   13   16
           3    3    4    5    7   15   16   14
           4    3    4    6   10   15   18   15
           4    4    6    8   13   23   21   16
           5    6   10   15   18   28   27   20
           6    9   14   17   21   27   29   24
          13   17   20   23   27   31   31   26
          19   24   25   25   29   26   27   26
Define Quantization Table 1  precision 0
           4    5    6   12   26   26   26   26
           5    5    7   17   26   26   26   26
           6    7   15   26   26   26   26   26
          12   17   26   26   26   26   26   26
          26   26   26   26   26   26   26   26
          26   26   26   26   26   26   26   26
          26   26   26   26   26   26   26   26
          26   26   26   26   26   26   26   26
Start Of Frame 0xc0: width=800, height=600, components=3
    Component 1: 2hx2v q=0
    Component 2: 1hx1v q=1
    Component 3: 1hx1v q=1
Define Huffman Table 0x00
          0   1   5   1   1   1   0   0
          0   0   0   0   0   0   0   0
Define Huffman Table 0x10
          0   1   3   2   4   3   5   5
          5   4   5   9   5   6   4   7
Define Huffman Table 0x01
          1   1   1   1   1   1   1   1
          1   0   0   0   0   0   0   0
Define Huffman Table 0x11
          1   0   2   2   2   0   5   2
          4   4   5   5   1   0   0   0
Start Of Scan: 3 components
    Component 1: dc=0 ac=0
    Component 2: dc=1 ac=1
    Component 3: dc=1 ac=1
  Ss=0, Se=63, Ah=0, Al=0
End Of Image
question4 ★★★★★
() автор топика
2 января 2026 г.
Ответ на: комментарий от question4

Для старого поведения jpegtran теперь надо будет добавлять -trim. Новое не будет работать с -perfect. И при вызове библиотек что-то поломается.

question4 ★★★★★
() автор топика
Последнее исправление: question4 (всего исправлений: 1)
Ответ на: комментарий от futurama

А потеря качества обязательно будет если jpeg->noncompressed_bitmap->jpeg ?

Конечно. Ошибки округления при переводах ряд Фурье → HSV → RGB → HSV → ряд Фурье. Плюс, непонятно, где и как ставить порог в последнем преобразовании, что даёт самые большие размазывания, имхо. Поэтому jpegtran работает непосредственно с коэффициентами рядов Фурье.

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

Только что проверил:

djpeg orig.jpg | cjpeg > new.jpg

Даже так уже всё похерено, как и ожидалось. Собственно, иначе и быть не могло.

Может у тебя какой-то особый jpeg, в двуцветную клеточку там, или ещё что? Я попробовал на разных случайных картинках — естественно, качество от такого убивается. Потому что это, блин, jpeg.


Вот, например, какая красота получается в виде разницы, если эту экзекуцию произвести с твоей аватаркой:

https://0x0.st/Po4L.png (djpeg 135210_-1582858452.jpg | cjpeg > remake.jpg)

CrX ★★★★★
()
Последнее исправление: CrX (всего исправлений: 3)
Ответ на: комментарий от futurama

А смысл? Обычная фотка

Ну так в том и дело, что необычная, раз не портится от пережатия. Если это, конечно, правда, а не ты где-то что-то напутал (и например, в гимпе два раза открыл оригинал случайно, или ещё что-то такое).

Но вообще с фоткой так не может быть. Я бы поверил, если бы там что-то очень простое было, типа шахматной доски двухцветной, или градиент ровненький на всю картинку, может оно как-то одинаково бы всегда кодировалось… Но точно не фотка.

Но если точно уверен (ещё раз проверил), то я бы тоже глянул, что за волшебная фотка такая.

CrX ★★★★★
()
Последнее исправление: CrX (всего исправлений: 1)
Ответ на: комментарий от CrX
$ djpeg orig.jpeg | cjpeg -quality 85  > new.jpeg

$ ls -l orig.jpeg new.jpeg 
-rw-rw-r-- 1 user group 216959 янв  5 18:39 new.jpeg
-rw-rw-r-- 1 user group 542418 янв  5 18:37 orig.jpeg

# при quality 97 размеры схожие
$ djpeg orig.jpeg | cjpeg -quality 97  > new.jpeg


$ ls -l orig.jpeg new.jpeg 
-rw-rw-r-- 1 user group 543173 янв  5 18:40 new.jpeg
-rw-rw-r-- 1 user group 542418 янв  5 18:37 orig.jpeg

$ md5sum new.jpeg orig.jpeg 
3c64434695fd12f3acaaa41de695a2ac  new.jpeg
f5f69c68ce7ae24dbabe9277be52c419  orig.jpeg

https://iimg.su/i/1nBDRc

https://iimg.su/i/5jMs0N

скриншот + visible layer

https://iimg.su/i/ZAEiUJ

https://iimg.su/i/pVIFuJ

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

Ясно. У тебя или очень плохое зрение, или очень плохой монитор.

Ну или ты троллишь так. Но я надеюсь, всё же дело в мониторе.

На всякий случай: разница очевидна и просто при переключении с одной вкладки на другую, если открыть две картинки, и наглядно прекрасно наглядно видна на твоём же visible.png. Samsung Odyssey G5, зрение не знаю какое, но очки не ношу, мужчина, 40+.

CrX ★★★★★
()
Последнее исправление: CrX (всего исправлений: 3)
Ответ на: комментарий от futurama

Ну такие же контуры по сути, как и в прошлом примере. Чуть-чуть менее контрастные. Открой в gimp visible.png и просто увеличь контраст — увидишь.

У тебя, небось ноутбучный TN+Film какой-нибудь?

CrX ★★★★★
()
Последнее исправление: CrX (всего исправлений: 1)
Ответ на: комментарий от futurama

Просто ради любопытства: https://0x0.st/Po4F.jpg — ты тут тоже не видишь обоину?

Я просто помню как-то много лет назад скидывал одному чуваку её, а он говорит, сломанная. Я сперва думал, он троллит, потом оказалось, она на хреновых мониторах выглядит почти чёрной, и только если очень приглядываться, можно разглядеть, что не совсем…

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

Ясно. Занятно. Видимо, такой монитор (хотя вроде у IPS должна хорошая цветопередача быть), или зрение. Наверное может ещё от освещения в комнате зависеть. У себя я отчётливо вижу картинку — не надо ни присматриваться, ничего, сразу всё видно.

CrX ★★★★★
()
Последнее исправление: CrX (всего исправлений: 1)
Ответ на: комментарий от CrX

В гимпе выкрутил кривую – увидел «страшную рожу»

У тебя самый яркий пиксель #090909

/* XPM */
static char *Po4F[] = {
/* columns rows colors chars-per-pixel */
"1024 673 28 1 ",
"  c black",
". c #010000",
"X c #010101",
"o c #020001",
"O c #030102",
"+ c #020202",
"@ c gray1",
"# c #050102",
"$ c #040203",
"% c #060203",
"& c #020403",
"* c #050304",
"= c #070304",
"- c #030504",
"; c #040404",
": c gray2",
"> c #060405",
", c #040605",
"< c #070506",
"1 c #060606",
"2 c #070707",
"3 c #080405",
"4 c #090506",
"5 c #080607",
"6 c #0A0607",
"7 c #090708",
"8 c gray3",
"9 c #090909",
/* pixels */
";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;@@@@@@@@@@@@@@@@@@@@@@@@;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;@@@@@@
;;;;;@@@@@@@@;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;@@@@@@@;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8;;;;;;;8;;;;;;;;;;;;;;@@@@@@@@@@;;;;;;;;@@@@@@@@@@@@@@@@;@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@;;;;;;;;;;;;;;;;;;;;;;;;;;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;@@@@@@@@@@@@@@@@@@@@@@@@;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;@@@@@@
;;;;;@@@@@@@@;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;@;@@@@@@@;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8;;;;;;;;;;;;;;;;;;;;;;@@@@@@@@@@;;;;;;;;@@@@@@@@@@@@@@@@;@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@;;;;;;;;;;;;;;;;;;;;;;;;;;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;@@@@@@@@@@@@@@@@@@@@@@@@;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;@@@@@@
;;;;;@@@@@@@@;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;@@@@@@@@@;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8;;;;;;;;;;;;;;;;;;;;;;@@@@@@@@@@;;;;;;;;@@@@@@@@@@@@@@@@;@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@;;;;;;;;;;;;;;;;;;;;;;;;;;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
futurama ★★★★★
()
Последнее исправление: futurama (всего исправлений: 1)
Ответ на: комментарий от futurama

Угу.

http://www.lagom.nl/lcd-test/black.php — а тут все квадраты различимы?

http://www.lagom.nl/lcd-test/contrast.php — и тут

Неплохой сайт, кстати, другие тесты тоже зацени. Позволяет откалибровать монитор нормально.

CrX ★★★★★
()
Последнее исправление: CrX (всего исправлений: 2)
Ответ на: комментарий от CrX

Я твою «рожу» поставил в качестве обоины и зная что там, «увидел». Оно кажется дымкой, будто монитор грязненький/запотел

futurama ★★★★★
()
Последнее исправление: futurama (всего исправлений: 1)
Ответ на: комментарий от futurama

Понятно. У меня все различимы, даже первый.

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

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

Он не может. Ему lossless кодирование надо.

Не lossless, т.к. исходные не lossless, и не вижу смысла увеличивать размеры файлов. Но и не хочу ухудшать и так замыленые картинки.

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

Не lossless, т.к. исходные не lossless

В данном контексте имеется в виду редактирование без дальнейших потерь. Он корректно сказал. Хотя с этим вечно путаница, да…

CrX ★★★★★
()