我正在使用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缩放图像的宽度?
答案 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的新图像