Trouble using python PIL library to crop and save image
Question:
Im attempting to crop a pretty high res image and save the result to make sure its completed. However I keep getting the following error regardless of how I use the save method: 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()
Answers:
The box is (left, upper, right, lower) so maybe you meant (2407, 804, 2407+71, 804+796)?
Edit: All four coordinates are measured from the top/left corner, and describe the distance from that corner to the left edge, top edge, right edge and bottom edge.
Your code should look like this, to get a 300×200 area from position 2407,804:
left = 2407
top = 804
width = 300
height = 200
box = (left, top, left+width, top+height)
area = img.crop(box)
Try this:
it’s a simple code to crop an image, and it works like a charm 😉
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 __name__ == '__main__': main()
In this case the Input image is 1280 x 800 px and the croped is 1280 x 399px starting at the top left corner.
Im attempting to crop a pretty high res image and save the result to make sure its completed. However I keep getting the following error regardless of how I use the save method: 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()
The box is (left, upper, right, lower) so maybe you meant (2407, 804, 2407+71, 804+796)?
Edit: All four coordinates are measured from the top/left corner, and describe the distance from that corner to the left edge, top edge, right edge and bottom edge.
Your code should look like this, to get a 300×200 area from position 2407,804:
left = 2407
top = 804
width = 300
height = 200
box = (left, top, left+width, top+height)
area = img.crop(box)
Try this:
it’s a simple code to crop an image, and it works like a charm 😉
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 __name__ == '__main__': main()
In this case the Input image is 1280 x 800 px and the croped is 1280 x 399px starting at the top left corner.