2011-11-09 58 views
1

我使用graphicsmagick對圖像進行簡單的操作,如調整大小,裁剪等,我試圖通過python使用pgmagick來代替。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

遺憾的是未能找到一種方法pgmagick實行「調整」爲它使用C++ API,它只有現在的規模運算的支持。

然而實現它醜如:

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的新圖像