LINUX.ORG.RU
Ответ на: комментарий от AGUtilities

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

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

Он показывает в килобайтах, а мне нужно в байтах. Настроить это никак.

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

Для convert можно выставить максимальный: -define jpeg:extent=400kb, по идее можно и точный сделать, добавив мусора, но хотелка странная.

anonymous
()

Есть jpeg-картинка. Нужно как-то ее изменить, чтобы размер
результирующего jpg-файла был N байт, то есть, привести
картинку к определенному размеру ФАЙЛА. Такое можно сделать?

Можно. Сохранить с минимальным качеством и добить байтами в конце до нужного размера.

You asked for it, you got it.

anonymous
()

Только итерациями: сохраняем с качеством A, замеряем размер; сохраняем с качеством Б, замеряем размер и вычисляем новое качество линейной интерполяцией. И так, пока не получится наилучшее приближение.

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

Eddy_Em ☆☆☆☆☆
()

Размер с точностью до байта сильно сомневаюсь что можно сделать. Можно сделать с определенной погрешностью. Такой функционал есть у phatch. Поковыряй исходник

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

Да, я уже понял, спасибо.

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

С точностью до байта МОжНО сделать - анон выше написал.

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

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

Всё равно лажа будет. Потому что файлы с разным количеством и насыщенностью цветов и разным количеством деталей жмутся очень по-разному.

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

Знаю, но общая тенденцию вполне может быть (например, логарифмическая зависимость или степенная...)

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

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

По-моему, зависимость должна быть степенной.

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

Т.е. размер файла при увеличении ширины/высоты и неизменными осталными параметрами может внезапно уменьшиться? Да ну?

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

Да ладно: хотя бы общие тенденции если выявить, то все быстрее будет (например, вместо деления отрезка пополам, делить его в пропорции 2:3).

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

при увеличении ширины/высоты и неизменными осталными параметрами

А кто говорит о такой процедуре?

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

Да вариантов-то два:

менять размеры

менять «качество»

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

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

Ясен пень, что монотонная. Но не линейная, а какая-то другая.

Eddy_Em ☆☆☆☆☆
()

кусок скрипта:

BASENAME=`echo $1 | sed -e "s/\..*//"`
OUTNAME=${BASENAME}-web.jpg
FILESIZE=200000

# prepare JPEG

QUALITY=99

while true;
do
        echo "Making JPEG Quality $QUALITY"
        convert $1 -quality $QUALITY $OUTNAME
        jhead -du $OUTNAME
        SIZE=`du -s -b $OUTNAME | awk '{ print $1 }'`
        echo $SIZE
        if [ $SIZE -lt $FILESIZE ] 
        then 
                break;
        fi
        QUALITY=$[$QUALITY-1]
done
maxcom ★★★★★
()
Ответ на: комментарий от Eddy_Em

Упс, «проседания» возникли из-за того, что я забыл переименовать файлы x.jpg -> 0x.jpg. Вот правильный график.

Вот функция для получения таблицы:

 
function mkjpegs(){ for Q in $(seq 1 100); do NAME=$(printf '%03d' $Q); convert $1 -quality $Q $NAME.jpg; done; du -b *jpg| awk '{print $1}'>sizes; rm -f *jpg; }

Чтобы построить, запускаем gnuplot и пишем plot 'sizes' w l

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

зависит от размеров. Если ожидается ответ близкий к 100, то выгоднее так

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

А вот этот график получился при сжатии предыдущего графика.

Ха! keewl

Хотя объяснимо. Какое сжатие используется в jpeg?

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

Ага, я тоже сначала глянул на график, вспомнил о БПФ и без задней мысли отправил его. А потом вспомнил, что производительность БПФ никакой связи со сжатием jpg не имеет :)

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

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

Здравый смысл не понимает, нафига нужна такая процедура. А вот с качеством уже понятнее.

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

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

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

Ровно то, о чём я говорил, получилось. На взгляд - три компоненты, и параметры на втором скриншоте сильно отличаются. Предсказать размер очень затруднительно.

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