2011-11-09 24 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のスケールはパラメータを尊重していないようです。上のコードは、画像を幅または高さでスケーリングします。これは適切です。例えば、画像が240×320の寸法を有する場合、得られる画像は60×80の寸法を有する。ます:graphicsmagickの面で、それは私がpgmagickを使用して幅に対してで画像を拡大縮小するにはどうすればよい

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

ように振る舞いますか?

答えて

1

残念ながら、pgmagickで "resize"を実装する方法が見つかりませんでした。これは、現在のところscale opのサポートしかない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の画像はresize( '80x')でサイズ変更され、最終的な高さは360 * 80/240で計算され、img.scale( '80x120')としてスケールされます。直接53.3x80の新しい画像が表示されます

関連する問題