web-dev-qa-db-ja.com

画像を半分に分割しようとするとタイルが画像の外側に拡張できないというエラーが発生するのはなぜですか

私のプログラムは、画像を取得して垂直方向にn個のセクションに分割し、セクションを個別のpngファイルとして保存することになっています。 2つのセクションでは、次のようになります。

enter image description here

今問題が発生しています。画像の前半が適切に保存され、後半を切り取ろうとすると次のエラーが発生します:SystemError: tile cannot extend outside image

私が扱っている画像には

  • 幅:1180px
  • 高さ:842px

トリミングするために計算される長方形は次のとおりです。

  • (0.0, 0, 590.0, 842)-これは正しく動作します
  • (590.0, 0, 590.0, 842)-プログラムがクラッシュします

私の質問は次のとおりです。なぜこのサブ四角形が範囲外であり、画像に示すように画像を適切に半分にスライスするようにそれを修正できますか?

from PIL import Image, ImageFilter


im = Image.open("image.png")
width, height = im.size
numberOfSplits = 2
splitDist = width / numberOfSplits #how many pixels each crop should be in width
print(width, height) #prints 1180, 842

for i in range(0, numberOfSplits):
    x = splitDist * i
    y = 0
    w = splitDist
    h = height

    print(x, y, w, h)
    #first run through prints 0.0, 0, 590.0, 842
    #second run through prints 590.0, 0, 590.0, 842 then crashes

    croppedImg = im.crop((x,y,w,h)) #crop the rectangle into my x,y,w,h
    croppedImg.save("images\\new-img" + str(i) + ".png") #save to file
10
Keatinge

ボックスのすべての座標(x、y、w、h)は、画像の左上隅から測定されます。

したがって、ボックスの座標は(x、y、w + x、h + y)でなければなりません。コードに次の変更を加えます。

for i in range(0, numberOfSplits):
    x = splitDist * i
    y = 0
    w = splitDist+x
    h = height+y
19
supreeth manyam