2

アスペクト比に影響を与えずに画像を正方形にしたいので、たとえば高さを幅と同じ大きさにするためにキャンバスのサイズを埋める必要があり、画像を再スケーリングできます。これを行う賢い方法がわかりません。ドキュメントを見ましたが、何も表示されませんでした: http://docs.wand-py.org/

サイズ変更またはクロップがこれを行わないようです。私は試した:

img.crop(0, 0, width=dim, height=dim)

このルーチンは背景に依存する可能性があることを理解していますが、簡単にするために、現時点ではすべての画像が白い背景を持っていると仮定します (後で、背景の種類をサンプリングして追加する必要があるかもしれません)。

4

3 に答える 3

3

次のようなイメージでコマンドラインから始めると:

convert -size 200x120 xc:red a.png

ここに画像の説明を入力

次のように、サイズを 100x100 に変更します。

convert a.png -resize 100x100 b.png

ImageMagick はアスペクト比を維持したいので、100x60 の画像が得られます。その画像を正方形にパディングしたい場合は、次の-extentように使用する必要があります(背景が黄色になっているので、わかります):

convert a.png -resize 100x100 -background yellow -gravity center -extent 100x100 b.png

ここに画像の説明を入力

-extentPython Wand のドキュメントでこの単語について言及されていないので、存在しないと思います。そのため、おそらく新しい2番目の正方形の画像を作成し、サイズ変更された画像をその上に合成する必要があると思います. 他の誰かがもっとよく知らない限り...

于 2015-09-01T19:34:21.743 に答える
1

ワンドは、縦横比を維持しながら必要なサイズに画像をスケーリングできる変換を提供します。透明な背景でパディングして、後で完全に正方形にすることができます。

def adjust_ratio(img, w_dst, h_dst):

    img.transform(resize="{0}x{1}".format(w_dst,h_dst))

    w_bor = (w_dst - self.img.width)/2
    h_bor = (h_dst - self.img.height)/2

    if w_bor>0:
        img.border(color=Color('transparent'),width=w_bor,height=0)
    else:
        img.border(color=Color('transparent'),width=0,height=h_bor)
于 2016-08-29T12:32:36.033 に答える