2010-11-01 1 views
1

Google App Engine злится на файлы с изображениями на 1M. http://code.google.com/appengine/docs/python/images/overview.html#Quotas_and_LimitsЕсть ли умный способ сжать изображения до максимального размера файла вместо уровня качества?

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

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

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

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

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

+0

Чтобы уточнить, пытаясь спросить здесь о специфичности JPEG, а не об общих методах поиска, таких как бинарный поиск. Это все еще «грубая сила» в том смысле, который я имел в виду. –

ответ

3

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

3

Простой alghorythm - создать в формате JPEG с 100 качества, если оно меньше, чем 1M, используйте его, если больше, создать с 50, если в настоящее время менее 1M, чем попробовать 75, еще попробовать 25 ...

+0

Вправо, я включал двоичный поиск в режиме поиска грубой силы, я думаю, –

+0

Это называется алгоритмом бинарного поиска. http://en.wikipedia.org/wiki/Binary_search_algorithm – Malfist

1

Эта статья от Джеффа Этвуда, похоже, подразумевает, что существует способ «стандартизировать коэффициент сжатия JPEG в 15»: A Comparison of JPEG Compression Levels and Recompression (я не полностью читал статью, поэтому я мог неправильно понять это сообщение, когда смотрел на него).

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

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

+0

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

+4

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

3

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

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

Благодарим за все.
С уважением,

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

+0

идеальное решение действительно ;-) –

 Смежные вопросы

  • Нет связанных вопросов^_^