有点平铺

时间:2009-03-13 14:13:42

标签: algorithm language-agnostic optimization

我刚刚完成了一个小脚本,将很多png图片合并到一起 一个更大的CSS Sprite。

所以基本上,我有一个维度列表[(w1,h2),...,(wn,hn)] 我需要将它们放入一个尺寸为(W,H)且WH为的框架中 尽可能小。 (当然他们不能重叠)

我使用的启发式显然不是最佳的。我在想 如果你有关于这个问题的任何想法? 你认为一些更聪明的约束,比如用图像分组图像 类似的直方图会使png变小吗?

3 个答案:

答案 0 :(得分:1)

关于使结果png变小:

请务必使用最佳压缩级别(级别9),如果可能,请使用PNGOUT更好地压缩PNG(PNGOUT plugin也有IrfanView

对具有相似直方图的图像进行分组可能会很好,请注意,PNG使用的是使用滑动窗口的zLib,因此如果将图像分组为水平,则效果最佳。

编辑:可用空间相同。在图像的顶部或底部有一个自由空间比在左边或右边有更好的空间。自由空间的颜色应该不重要,有些颜色或黑色或白色应该没问题。

顺便说一句,zLib滑动窗口的大小是32K,因此如果图像很大,它对于检测图像重复并不是那么好。在这种情况下,您最好使用自己的算法自己处理图像,并使用一些重复的删除或增量过滤器。

答案 1 :(得分:1)

由于图片直方图不会影响它们的尺寸(宽度和高度),因此无论是如何提出问题,无论是要优化的图片尺寸还是PNG文件的尺寸,都不是很明显。

然而,找到最小的K,例如,max(W,H)< K,这样你的所有图片都可以放入W宽的矩形区域,H高是NP完全问题,这意味着一般来说很难很好地解决。请参阅示例here

答案 2 :(得分:1)

脚本的输出与ImageMagick的输出相比如何?