Как обрезать несколько изображений с помощью PIL? - PullRequest
0 голосов
/ 03 июля 2018

Я только начал использовать PIL с python, и мне нужна помощь в обнаружении фотографий и обрезке нескольких изображений на одном белом фоне с разными размерами. Я использовал Image.crop и ImageChop.difference, но это только одно изображение.

def trim(im):
bg = Image.new(im.mode, im.size, im.getpixel((0,0)))
diff = ImageChops.difference(im, bg)
diff = ImageChops.add(diff, diff, 2.0, -100)
bbox = diff.getbbox()
if bbox:
    return im.crop(bbox)
else:
    print("No image detected")


image1 = Image.open('multiple.jpg')
image2 = trim(image1)
image2.show()

1 Ответ

0 голосов
/ 03 июля 2018

Я думаю, что-то вроде того, что вы ищете:

import os

from PIL import Image

# Crops the image and saves it as "new_filename"
def crop_image(img, crop_area, new_filename):
    cropped_image = img.crop(crop_area)
    cropped_image.save(new_filename)

# The x, y coordinates of the areas to be cropped. (x1, y1, x2, y2)
crop_areas = [(180, 242, 330, 566), (340, 150, 900, 570)]

image_name = 'download.jpg'
img = Image.open(image_name)

# Loops through the "crop_areas" list and crops the image based on the coordinates in the list
for i, crop_area in enumerate(crop_areas):
    filename = os.path.splitext(image_name)[0]
    ext = os.path.splitext(image_name)[1]
    new_filename = filename + '_cropped' + str(i) + ext

    crop_image(img, crop_area, new_filename)


Программа работает, беря входное изображение (в данном случае download.jpg), просматривая список координат (x1, y1, x2, y2), представляющих области обрезаемых изображений, а затем передает каждое изображение в функцию crop_image(), которая принимает изображение, которое нужно обрезать, координаты и новое имя файла для изображения, которое будет сохранено как.


Полученные файлы сохраняются как download_cropped0.jpg и download_cropped1.jpg (в этом примере). Если вы хотите обрезать больше областей на изображении, вам нужно добавить больше кортежей в виде (x1, y1, x2, y2) в список crop_areas. Вы можете использовать такую ​​программу, как рисование или фотошоп, чтобы получить координаты изображения, из которого вы хотите обрезать изображение.

...