Pgmagick按宽度调整图像大小

时间:2011-11-09 16:02:42

标签: python image-resizing graphicsmagick

我正在使用graphicsmagick对图像进行简单的操作,例如调整大小,剪裁等等,而我正试图通过python使用pgmagick。

为了调整大小,脚本会发出以下命令

gm convert image.jpg -resize 80x ...

根据宽度调整法师大小是我主要考虑的问题,上面的命令按照我的预期工作,只考虑调整大小的宽度。 使用pgmagick,我尝试相同的操作,如下所示:

import pgmagick as p
img = p.Image(p.Blob(open('image.jpg','rb').read()))
img.scale('80') # or img.scale('80x')

pgmagick的比例似乎不尊重参数。上面的代码按宽度或高度缩放图像,这是合适的。例如,如果图像具有240x320尺寸,则生成的图像具有60x80尺寸。在graphicsmagick方面,它的行为类似于

gm convert image.jpg -resize \>80x -resize x80\> ...

如何使用pgmagick缩放图像的宽度?

1 个答案:

答案 0 :(得分:1)

遗憾的是,在pgmagick中找不到实现“resize”的方法,因为它使用的是c ++ api,它现在只支持scale op。

然而实施它丑陋如:

def resize(new_size):
     g = pgmagick.Geometry(new_size) # distinguishes whether width, height or both given
     image = pgmagick.Image(img)
     rw, rh = image.size()
     w, h = g.width(), g.height()
     if w and not h:
         g.height(int(rh * w * 1.0/rw))
     elif h and not w:
         g.width(int(rw * h * 1.0/rh))

     image.scale(g)

如果宽度在调整大小时很重要,则最终尺寸分别根据宽度和高度进行调整。例如:240x360的图像将通过调整大小('80x')来调整大小,然后该函数计算最终高度360 * 80/240并使用图像上的比例作为img.scale('80x120'),否则仅使用比例直接会产生53.3x80的新图像