1

Google App Engine 对超过 1M 的图像文件感到愤怒。 http://code.google.com/appengine/docs/python/images/overview.html#Quotas_and_Limits

给定任意用户提供的图像,以及运行 C 代码对其进行预处理的能力,有没有什么聪明的方法可以以最高质量降低到 1M?

蛮力方法是通过尝试一系列 JPEG 质量设置和一系列比例因子来搜索生成 <1M 文件的压缩级别和分辨率。

除了蛮力搜索之外,还有什么巧妙的方法来选择最佳 JPEG 质量和比例因子以实现 1M 文件大小?

什么可能是一些好的启发式方法,也许是关于在各种 JPEG 质量级别上实现的压缩百分比的假设?

蛮力具有简单的优点,无论如何它可能会足够快,但只是好奇。

4

4 回答 4

3

简单的算法——创建质量为 100 的 jpeg,如果小于 1M,则使用它,如果更多,则使用 50 创建,如果现在小于 1M,则尝试 75,否则尝试 25……</p>

于 2010-11-01T19:05:59.307 回答
3

尊敬的 Google AppEngine 团队:

请取消图像文件的 1MB 上限。已经存在与存储、处理、带宽等相关的配额和定价,以维持开发人员减少文件大小的激励措施。

谢谢你为我做的一切。
真挚地,

开发者社区

于 2010-11-02T17:44:46.043 回答
3

标准的二分搜索假设随机数据,这里肯定不是这种情况。一种更有效的方法是进行线性插值。压缩图像的大小(未压缩图像的大小)这个函数,像任何明智的函数一样,在足够小的间隔下是线性的。因此,在每次交互中,假设一个线性响应。这将比二进制搜索更快地得出答案。EG 以 50% 质量压缩,0.75 M,因此使用 (1/.75) * 50% ~ 62%。假设结果为 1.5 M 现在我们有两个点。(X = 50%, Y = .75 M) 和 (X=62%, Y= 1.5 M)。斜率为 (1.5-.75)/(62-50)=.75/12 所以我们的第二个猜测是 .25M X (12/.75)=4%, 50%+4%=54% 取最接近的猜测到目前为止,并重复该过程,直到结果使您满意为止。您可以使用更高阶的插值,例如牛顿法,

于 2010-11-12T16:19:10.763 回答
1

Jeff Atwood 本人的这篇文章似乎暗示有一种方法可以“将 JPEG 压缩因子标准化为 15”:A Comparison of JPEG Compression Levels and Recompression当我凝视它时)。

如果可以设置压缩系数,就可以设置所需的大小。

维基百科文章中的表格看起来很有趣。质量 = 50 -> 压缩系数 = 15:1(通过维基百科的经验测量证明:-) ...我在拖延,我现在应该做点别的事情...)

于 2010-11-01T19:24:13.290 回答