web-dev-qa-db-ja.com

python PILライブラリを使用して画像をトリミングおよび保存する際の問題

かなり高解像度の画像をトリミングして結果を保存し、完了したことを確認しようとしています。ただし、saveメソッドの使用方法に関係なく、次のエラーが引き続き発生します。SystemError: tile cannot extend outside image

from PIL import Image

# size is width/height
img = Image.open('0_388_image1.jpeg')
box = (2407, 804, 71, 796)
area = img.crop(box)

area.save('cropped_0_388_image1', 'jpeg')
output.close()
43
user124626

ボックスは(左、上、右、下)ですので、おそらく(2407、804、2407 + 71、804 + 796)を意味していましたか?

編集:4つの座標はすべて、上/左隅から測定され、その隅から左端、上端、右端、および下端までの距離を表します。

位置2407,804から300x200の領域を取得するには、コードは次のようになります。

left = 2407
top = 804
width = 300
height = 200
box = (left, top, left+width, top+height)
area = img.crop(box)
66
RichieHindle

これを試して:

それは画像を切り取る簡単なコードで、魅力のように機能します;)

import Image

def crop_image(input_image, output_image, start_x, start_y, width, height):
    """Pass input name image, output name image, x coordinate to start croping, y coordinate to start croping, width to crop, height to crop """
    input_img = Image.open(input_image)
    box = (start_x, start_y, start_x + width, start_y + height)
    output_img = input_img.crop(box)
    output_img.save(output_image +".png")

def main():
    crop_image("Input.png","output", 0, 0, 1280, 399)

if __== '__main__': main()

この場合、入力画像は1280 x 800ピクセルで、トリミングされるのは左上隅から始まる1280 x 399ピクセルです。

15
carlosveucv