Jes*_*ord 23 php image image-processing image-compression
我正在构建一个PHP系统,用户可以创建一个视觉上复杂的图像,最终要求为50kB或更低.
用户可以选择将文本打印到37个模板图像中的一个上,因此结果是单个平面图像.
文本可以是任何颜色和多种字体之一.这意味着最终图像可能非常复杂且不可预测(图像尺寸除外).
然后,我要求最终图像文件大小不超过50kB(这是一个外部要求,不能更改).
最后一个要求(同样是外部)是图像格式必须是.jpeg,.png或.gif.
我查看了GraphicsMagick文档,但无法找到任何能够设置文件大小并自动计算压缩的地方.
我已经考虑通过compress-> save->测试循环以编程方式执行此操作,但是我可以想象这将是处理器密集型的,因为我不一定能提前基于压缩来计算文件大小.这就是为什么我要问看看这个问题是否已经在GraphicsMagick中解决了.
编辑
要明确为什么有外部要求:
用户将利用该系统创建一个平面图像,然后将其保存到PC上.然后,此图片将上传到Adroll,以便在重定向广告系列中使用.
以下是Adroll对图像的要求.我的系统仅提供728x90,300x250和120x600图像尺寸.
编辑 2010年11月27日
由于GraphicsMagick似乎无法做到这一点,我愿意研究其他解决方案,例如直接与可能提供功能的压缩库(libpng等)接口.
作为最后的手段,我甚至可以看到能够实现这一目标并自己实现的算法.
作为类比,对于那些倾向于这样的人:
我追求A*的搜索:它有一个明确的起点/终点,并在最快的时间内找到最佳路线.
我希望避免的是广度/深度优先搜索:明确的起点/终点,但一旦找到局部最小值,可能不会达到最优解,并且有可能在计算上完全爆发.
Jon*_*Jon 11
由于没有办法压缩到我所知道的目标大小,我建议寻找间接解决方案:
要详细说明第2步中的数学:
如果您选择起始质量使得您的平均计算尺寸+ 3*标准偏差<您的目标尺寸,那么99.7%的压缩将在第一次尝试时产生适当的小文件(假设压缩尺寸的正态分布).
您可以根据需要调整起始质量和增加或减少它的逻辑,在较少的服务器负载和接近最大大小的文件之间进行平衡("更好地利用"您的限制).
看看下面的包:
http://www.phpclasses.org/package/3810-PHP-Optimize-images-to-fit-in-a-given-file-size-limit.html
非常酷 - 我说作者值得喝啤酒;)
示例图像实际上是61081字节(第一个jpeg图像显示图像中的文件大小?):
我不知道有什么方法可以自动确定图像的最终文件大小 - 这是生成图像的库的任务。除非您自己实现压缩,否则无法预先计算结果大小。
您可以做的是收集统计数据(图像高度和宽度以及文件大小与不同的压缩选项),并根据新图像的数据进行估计。
例子:
-> 当你得到一个 59k 的 100x202px 图像时,压缩后的大小将大致估计为 35k。