web-dev-qa-db-fra.com

Problème d'utilisation de la bibliothèque python PIL pour recadrer et enregistrer l'image

Im essayant de recadrer une image assez haute résolution et d'enregistrer le résultat pour vous assurer qu'il est terminé. Cependant, je reçois toujours l'erreur suivante, quelle que soit la façon dont j'utilise la méthode d'enregistrement: 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

La boîte est (gauche, supérieure, droite, inférieure) alors peut-être que vous vouliez dire (2407, 804, 2407 + 71, 804 + 796)?

Modifier : les quatre coordonnées sont mesurées à partir du coin supérieur/gauche et décrivent la distance entre ce coin et le bord gauche, le bord supérieur, le bord droit et bord inférieur.

Votre code devrait ressembler à ceci, pour obtenir une zone de 300 x 200 à partir de la position 2407 804:

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

Essaye ça:

c'est un simple code pour recadrer une image, et ça marche comme un charme;)

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()

Dans ce cas, l'image d'entrée est de 1280 x 800 px et le recadré est de 1280 x 399px en commençant dans le coin supérieur gauche.

15
carlosveucv