1

私は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を使用して幅に関して画像を拡大縮小するにはどうすればよいですか?

4

1 に答える 1

1

残念ながら、pgmagickで「サイズ変更」を実装する方法を見つけることができませんでした。これは、現時点ではscaleopのみをサポートしている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の新しい画像になります

于 2011-11-14T11:47:27.870 に答える