1

画像 (image1) を入力して水平方向に反転し、ファイル (image2) に保存しようとしています。これは機能しますが、私が望む方法ではありません

現在、このコードでは反転した画像が表示されますが、画像の右下の 4 分の 1 しか表示されないため、サイズが正しくありません。どこかで何かを上書きしていますか?コードで画像を水平方向に反転させ、画像全体を反転させたいだけです。どこで私は間違えましたか?

ミラー関数やリバース関数だけを使用することはできません。アルゴリズムを作成する必要があります

ウィンドウのサイズは正しいが、画像のサイズが正しくない

 def Flip(image1, image2):
    img = graphics.Image(graphics.Point(0, 0), image1)
    X, Y = img.getWidth(), img.getHeight()
    for y in range(Y):
        for x in range(X):
            r, g, b = img.getPixel(x,y)
            color = graphics.color_rgb(r, g, b)
            img.setPixel(X-x, y, color)
    win = graphics.GraphWin(img, img.getWidth(), img.getHeight())
    img.draw(win)
    img.save(image2)
4

3 に答える 3

2

あなたの問題はこの行にあると思います:

win = graphics.GraphWin(img, img.getWidth(), img.getHeight())

GraphWin コンストラクターの最初の引数はタイトルであるはずですが、代わりに Image オブジェクトを指定しています。おそらく、あなたが提供している幅と高さが無視されていると思います。GraphWin のデフォルトの幅と高さは 200 x 200 であるため、画像のサイズによっては、一部しか描画されないことがあります。

次のようなことを試してください:

win = graphics.GraphWin("Flipping an Image", img.getWidth(), img.getHeight())

もう 1 つの問題は、画像のアンカー ポイントが間違っていることです。ドキュメントによると、アンカーポイントは画像の中心がレンダリングされる場所です(したがって、0,0では画像の右下の象限のみが表示されます)。作成時に画像のサイズがわからない場合の解決策は次のとおりです。

img = graphics.Image(graphics.Point(0, 0), image1)
img.move(img.getWidth() / 2, img.getHeight() / 2)
于 2013-04-15T16:04:53.820 に答える
0

外部ライブラリの使用に反対しない場合は、Python Imaging Libraryをお勧めします。特に、ImageOpsモジュールには、mirrorまさにあなたが望むことを行う関数があります。

于 2013-04-15T15:59:47.110 に答える