LINUX.ORG.RU

Обрезка jpeg без потерь.


0

1

Собственно нужна gui софтина, способная обрезать jpeg под определённый формат, без потерь. Что-то типа Better JPEG.

Гугленье ни чего не дало, кроме консольной jpegtran. Чую придётся писать морду самому.


XnView MP умеет

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

качество=100%

Так это всего лишь за счёт того что в результирущем файле будет отсутствовать сжатие, не? То есть как если бы после редактирования mp3 в Audacity сохранить результат во Flac.

firestarter ★★★☆
()

Собственно нужна gui софтина, способная обрезать jpeg под определённый формат, без потерь. Что-то типа Better JPEG.

Без потерь не получится все равно, максимум сможешь их в какой-то степени минимизировать и все.

JPEG сам по себе с потерями и в зависимости от метода сжатия бьется на квадраты. При обрезке ты будешь его пережимать. При попытке сохранять в 100% - получишь большой размер, так как он попытается сохранить артефакты предыдущего сжатия, думая что это детали оригинального изображения.

Если есть возможность - лучше работай с PNG ну или хотя бы исходные файлы принимай в PNG (к примеру если это аватары - проси грузить пнгшки и потом режь и жми в любой формат.

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

Визуально, очевидно же.

Визуально ты это не увидишь, также как и не услышишь разницу между mp3 128kbps и этим же файлом, перекодированным в mp3 192kbps.

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

а в чём тогда был смысл?

Чтобы не было перекодирования вообще. Например mp3 или многие дригие аудио и видео форматы можно порезать без перекодирования с помощью ffmpeg или mp3cut.

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

ну при 100% его и не будет

Будет минимизация потерь. Это не то же самое.

firestarter ★★★☆
()

обрезать jpeg под определённый формат, без потерь.

jpeg это метод искажающего сжатия, кроме сжатия способом Lossles-jpeg(JPEG-LS)
Есть форматы типа JPEG2000(jp2) для него сжатие методом Lossles-jpeg вообще невозможно.
Т.е. можно использовать любую программу в которой исходная картинка не сильно визуально отличается от «обрезанной».
Т.к. небольшая потеря качества будет в любом случае.

firestarter

И как я могу убедиться что там содержимое не подверглось изменениям?

Можете написать программу которая может эстимировать качество jpeg
исходя из матриц использованных при сжатии.

windusjatnik
()
Ответ на: комментарий от firestarter

Чтобы не было перекодирования вообще. Например mp3 или многие дригие аудио и видео форматы можно порезать без перекодирования с помощью ffmpeg или mp3cut.

С JPEG ты этого не добьешься, можешь даже не искать. Это невозможно в принципе. JPEG - не MP3 и не BMP, хранящий пиксел в отдельном байте. Кусок градиента будет сохранен в одном чанке, кусок повтояющегося блока - в другом, отрезав кусочек от этих блоков ты получишь 100% перекодировку, а отрежешь ты его 100%.

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

А, это гуй к этой утилите: jpegtran, lossless transformation of JPEG files.

Это я и сам нашёл, не пойдёт. Мне нужно для обрезки фотографий чтоб в печать отдать. Т.е. чтобы можно было задать соотношение сторон 3:2 или 4:3. А тут произвольное вырезание.

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

я так думаю, теоретически можно. JPEG сначала выполняет дискретно-косинусное преобразование над блоками пикселей не помню какого размера (4x4 вроде), затем немного округляет коэффициенты и сжимает всё это алгоритмом Хаффмана.

Так что по идее можно распаковать картинку, вырезать нужный участок картинки (по границе размера блоков, произвольный вырезать не получится), и запаковать Хаффманом обратно, качество не должно ухудшиться

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

Это я и сам нашёл, не пойдёт. Мне нужно для обрезки фотографий чтоб в печать отдать. Т.е. чтобы можно было задать соотношение сторон 3:2 или 4:3. А тут произвольное вырезание.

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

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

Кусок градиента будет сохранен в одном чанке, кусок повтояющегося блока - в другом

а ты вообще о принципах сжатия в JPEG-е представление имеешь?

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

Без потерь не получится все равно, максимум сможешь их в какой-то степени минимизировать и все.

JPEG сам по себе с потерями и в зависимости от метода сжатия бьется на квадраты. При обрезке ты будешь его пережимать. При попытке сохранять в 100% - получишь большой размер, так как он попытается сохранить артефакты предыдущего сжатия, думая что это детали оригинального изображения.

Я уже привёл одну программу под оффтопик и одну под онтопик, которые это умеют делать. Суть заключается в том, что при сжатии в jpeg изображение разбивается на квадраты 8x8 пиксел, и каждый из них сжимается независимо. Так что ни что не мешает вырезать нужное количество блоков с точностью до 8 пиксел и записать в новый файл. Также можно к примеру исправлять эффект красных глаз, только пережимая несколько блоков, а не всё изображение целиком.

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

по границе размера блоков, произвольный вырезать не получится

Ну что-то подобное jpegtran и делает, судя по ману:

 the upper left corner  of the  selected  region  must  fall  on  an  iMCU boundary.  If it
              doesn't, then it is silently moved up and/or left to the nearest
              iMCU boundary (the lower right corner is unchanged.)

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

Там написано:
...iMCU boundary", a (usually?) 8x8 block of pixels.
Например в формате JPEG2000 эти блоки могут быть произвольного размера. И «Linux jpeg lossless crop» в данном случае невозможен или это обман.

Future improvements might include rotation (interactive and exif-based automatic).
Насколько я понял используется EXIF...ЕМНИП это актуально только если этот самый exif есть или оригинал изображения (TIFF,BMP...) сжимался только один раз.

windusjatnik
()
Ответ на: комментарий от firestarter

ну значит всё должно быть хорошо, качество не ухудшается

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

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

И отрежу кому-нибудь лицо. Лучше всё же с нормальным GUI.

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

Мне нужно для обрезки фотографий чтоб в печать отдать.

Ну в данном случае imho можно воспользоваться и любым удобным редактором, а результат сохранять без компрессии (или в какой нибудь tiff). Это тоже будет без потерь.

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

Ну в данном случае imho можно воспользоваться и любым удобным редактором, а результат сохранять без компрессии (или в какой нибудь tiff). Это тоже будет без потерь.

Не jpeg, мухосранск, и фотолаборатория - вещи несовместимые.

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

Не jpeg, мухосранск, и фотолаборатория - вещи несовместимые.

Ну jpeg же умеет сохраняться без компрессии.

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

Кусок градиента будет сохранен в одном чанке, кусок повтояющегося блока - в другом

а ты вообще о принципах сжатия в JPEG-е представление имеешь?

Имею, про квадраты я писал выше ( Обрезка jpeg без потерь. (комментарий) ), но почему вы считаете что они фиксированы - не знаю, автор этого не оговаривал, а JPEG допускает произвольный размер. И это убивает все ваше знание JPEG в рамках данного топика на корню.

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

Чтобы не было перекодирования вообще. Например mp3 или многие дригие аудио и видео форматы можно порезать без перекодирования с помощью ffmpeg или mp3cut.

трек делится на семплы, и для обрезки можно взять нужное число семплов. А вот картинка делится на квадраты. При обрезке квадраты приходится перепиливать в 99% случаев (если ты только чётко по границе не будешь резать). Потому-то JPEG будет пережат в 99% случаев.

А программы такой я не знаю - если это надо, то просто берут формат с сжатием без потерь.

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

считаете что они фиксированы

фиксированы - в одной картинке могут быть квадраты разного размера?

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

А вот картинка делится на квадраты. При обрезке квадраты приходится перепиливать в 99% случаев (если ты только чётко по границе не будешь резать). Потому-то JPEG будет пережат в 99% случаев.
А программы такой я не знаю - если это надо

Ну вот чуть выше я дал ссылку на такую утилиту, которая делает это с jpeg. Да, точно по указанным границам она не обрезает, а округляет до границ этих блоков.

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

а что ужасного в том, чтобы резать по границе квадратов?

в принципе можно, но зачем, если есть сжатие без потерь?

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

Ну и пусть допускает. Определить же размер квадрата в конкретном файле можно. А значит будет лишь меняться точность. То есть какой-то файл можно обрезать с точностью до 8 пикселей, а какой-то только до 16 и т. д. Но можно.

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

Хера тут тему развили...

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

Квадраты это артефакты размером 8x8 пикселей.
При Lossless сжатии никаких «квадратов» нет.
Ещё некоторые программы используют фильтры которые удаляют эти артефакты.
И по границам чего вы резать будете?
Всё что нужно ТС - XnView MP, без всей этой мутной темы.

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

Квадраты это артефакты размером 8x8 пикселей.

Beeeeep - неправильный ответ.

BaBL ★★★★★
()

Есть вендософтина Corel PaintShop Pro X5, сохраняет в JPEG Lossless. Пользую иногда под виртуалкой.

ossnewcomer
()
Ответ на: комментарий от windusjatnik

Ты похоже как работает JPEG вообще не знаешь. Мы сейчас тут вовсе не про квадратные артефакты говорим, а другое.

Краткая справка: суть алгоритма JPEG в том, что изображение разбивается на одинаковые квадраты пикселей, после чего каждый квадрат независимо обрабатывается и ужимается (при этом некоторые параметры цветов отдельных пикселей в квадрате усредняются грубо говоря, поэтому чем мельче квадраты, тем лучше качество картинки после сжатия, поэтому вряд ли нам попадётся JPEG со слишком большим размером квадратов).

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

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

поэтому чем мельче квадраты, тем лучше качество картинки после сжатия

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

Если не производить распаковку отдельных пикселей

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

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

Пришлось читать эту муть два месяца назад.
Краткая справка:В JPEG туева куча форматов и алгоритмов сжатия.
Изображения разбиваются на квадраты при алгоритме сжатия в котором используется - Дискретно косинусноме преобразование(ДКП).
Какие квадраты при вейвлет-преобразовании(JPEG2000)
Или при JPEG-LS метод Median Edge Detection

Вы о чём уважаемый?

windusjatnik
()
Ответ на: комментарий от alpha4

Зачем развели срач не по теме?

Это не срач а поиск истины, я ведь не программист могу ошибаться=)

Откуда взяться JPEG2000 или JPEG-LS в мыльницах?

Почему сразу мыльницы? Цифровые фотоаппараты сохраняют фотографии в форматы:
RAW(crw,cr2,nef,orw,arf,etc) или TIFF-tif.
Дальше всё зависит от того какой программой конвертировали в jpeg.
Если сжимать без потери качества будет jpeg-ls.

windusjatnik
()
17 апреля 2013 г.
Ответ на: комментарий от windusjatnik

XnView. Меню «Инструменты» -> Преобразование JPEG без потерь -> Обрезать

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