Mon programme est censé prendre une image et la diviser verticalement en n sections, puis enregistrer les sections en tant que fichiers png individuels. Cela devrait ressembler à ceci pour 2 sections
J'ai des problèmes en ce moment, ce que j'obtiens c'est que la première moitié de mon image est enregistrée correctement, puis j'obtiens l'erreur suivante quand il essaie de recadrer la seconde moitié: SystemError: tile cannot extend outside image
L'image avec laquelle je travaille a
Les rectangles qu'il calcule pour recadrer sont:
(0.0, 0, 590.0, 842)
- cela fonctionne correctement(590.0, 0, 590.0, 842)
- cela plante le programmeMes questions sont les suivantes: pourquoi ce sous-rectangle est-il hors limites et comment puis-je le corriger pour découper correctement mon image en deux comme indiqué sur l'image?
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
Toutes les coordonnées de la boîte (x, y, w, h) sont mesurées à partir du coin supérieur gauche de l'image.
les coordonnées de la boîte doivent donc être (x, y, w + x, h + y). Apportez les modifications suivantes au code.
for i in range(0, numberOfSplits):
x = splitDist * i
y = 0
w = splitDist+x
h = height+y