Есть ли умный способ сжатия изображений до максимального размера файла вместо уровня качества? - PullRequest
1 голос
/ 01 ноября 2010

Google App Engine рассердился из-за файлов изображений размером более 1 млн.http://code.google.com/appengine/docs/python/images/overview.html#Quotas_and_Limits

Учитывая произвольное предоставленное пользователем изображение и возможность запуска кода на C для его предварительной обработки, есть ли какой-нибудь умный способ добраться до 1M с максимальным качеством?

Метод грубой силы заключается в поиске уровня сжатия и разрешения, которые приводят к получению файла <1M, с помощью серии настроек качества JPEG и ряда масштабных коэффициентов. </p>

Кроме поиска методом грубой силы,есть идеи по умному выбору наилучшего качества JPEG и масштабного коэффициента для достижения размера файла 1M?

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

Грубая сила обладает простотой и, вероятно, в любом случае она будет достаточно быстрой, но просто любопытной.

Ответы [ 4 ]

3 голосов
/ 12 ноября 2010

стандартный двоичный поиск предполагает случайные данные, что, конечно, здесь не так.Более эффективным подходом является линейная интерполяция.Эта функция Size of Compressed Image (Размер несжатого изображения), как и любая разумная функция, является линейной при достаточно малом интервале.Итак, для каждого взаимодействия предположим линейный ответ.Это даст ответ ДРАМАТИЧЕСКИ быстрее, чем бинарный поиск.EG сжат с качеством 50%, 0,75 М, поэтому используйте (1 / .75) * 50% ~ 62%.Допустим, результат составляет 1,5 м. Теперь у нас есть две точки.(Х = 50%, Y = 0,75 М) и (Х = 62%, Y = 1,5 М).Наклон (1,5-.75) / (62-50) =. 75/12 Таким образом, наше второе предположение было бы .25M X (12 / .75) = 4%, 50% + 4% = 54%до сих пор, и повторяйте процесс, пока результат не сделает вас счастливым.Вы можете использовать интерполяцию более высокого порядка, например, метод Ньютона, который, вероятно, будет сходиться еще быстрее.

3 голосов
/ 02 ноября 2010

Уважаемая команда Google AppEngine:

Пожалуйста, устраните ограничение в 1 МБ для файлов изображений. Уже существуют квоты и цены, связанные с хранением, обработкой, пропускной способностью и т. Д., Чтобы поддерживать стимулы для разработчиков снижать размеры файлов.

Спасибо за все.
С уважением,

Сообщество разработчиков

3 голосов
/ 01 ноября 2010

Simple alghorythm - создайте jpeg с качеством 100, если оно меньше 1M, используйте его, если больше, создайте с 50, если сейчас меньше 1M, чем 75, иначе попробуйте 25…

1 голос
/ 01 ноября 2010

Эта статья от самого Джеффа Этвуда, по-видимому, подразумевает, что существует способ "стандартизировать коэффициент сжатия JPEG, равный 15": Сравнение уровней сжатия JPEG и повторного сжатия (я не полностью прочитал статьи, поэтому я мог неправильно понять сообщение, когда смотрел на него).

Если вы можете установить коэффициент сжатия, вы можете установить желаемый размер.

Таблица в статье Википедии выглядит интересно. Qualtiy = 50 -> Коэффициент сжатия = 15: 1 (доказано эмпирическими измерениями в Википедии :-) ... Я откладываю, я должен сделать что-то еще прямо сейчас ...)

...