2010-08-02 17 views

回答

3

看看PyMagick,ImageMagick库的python接口。调整图像大小非常简单,保留比例,同时限制最长的一面。

编辑:当我说得相当简单的时候,我的意思是说你可以根据每一边最长的可接受值来描述你的调整大小,ImageMagick会自动保留比例。

+0

PyMagick最后更新于2002年,所有报告(我没有尝试自己构建它)被破坏。我期望你的意思是Python图像库http://www.pythonware.com/products/pil/ – msw 2010-08-02 21:15:37

+0

PythonMagick就是我的意思,但这似乎也已经不再流通。很奇怪。看起来@msw是正确的,PIL是要走的路。 – 2010-08-02 21:31:43

4

要保持比例相同,您需要将宽度和高度乘以相同的比例因子。计算每个独立适合你的空间,然后选择两个中最小的。你说你不关心身高,但是你可能想要为它设置一个界限,以防有人给你提供一个非常瘦的图像。

在下面的代码中,我添加了两个额外的约束条件:缩略图的宽度或高度总是> = 1,缩放因子将始终为< = 1(这样缩略图不会更大比原来的)。

scale_x = max_width/image_width 
scale_y = max_height/image_height 
scale = min(scale_x, scale_y, 1) 
thumb_width = max(round(image_width * scale), 1) 
thumb_height = max(round(image_height * scale), 1) 
1

支持使用PIL的建议。然而,计算实际上是要简单得多:

from PIL import Image as PILImage 

imageObj = PILImage.open(image_filename,'r') 
iwidth, iheight = imageObj.size # pixels 
size_proportion = iheight/iwidth # make sure your "limiter" is the denominator 
newheight = size_proportion * 200 
# resize the image to (newheight, 200) and save it 

或者,只是叫出来的子进程,并使用ImageMagic或GraphicsMagic(我用后者)这些库给你很好的缩放算法,都写在较低层次的语言,并非常优化。 IM和GM所做的一件好事是批量处理图像。另一个好处是,在某些模式下,您不需要为GraphicsMagic提供所需的尺寸,只需提供最大值,并且可以根据超出给定最大值的任何约束来缩小图片大小。一探究竟。

相关问题