Повторно открыть изображение после обрезки в python pillowPIL?

#python #image #python-imaging-library #crop

#python #изображение #python-imaging-library #обрезка

Вопрос:

Я хочу обработать изображение, подобное приведенной ниже схеме, пожалуйста, смотрите изображение для полного понимания

схема для понимания алгоритма

КОД с ПРОКОММЕНТИРОВАННЫМИ СТРОКАМИ, СОЗДАЮЩИМИ ПРОБЛЕМЫ

 from PIL import Image
import os
from os.path import expanduser
def series():
    # image_name = os.path.basename(image_path)
    # getting image height and width
    image_path = 'sample.jpg'
    with Image.open(image_path) as img:
        width = img.size[0]
        height = img.size[1]
    name = 0
    a = width/4
    i = height/a
    i = int(i)
    print "WIDTH:" str(width) " HEIGHT:" str(height) " A:" str(a) " I:" str(i)
    x1 = 0
    y1 = 0
    x2 = y2 = a
    for x in range(i):
        for y in range(4):
            # saved_location = "results/"   str(name)   '.jpg'
            # coords = (x1,y1,x2,y2)
            # image_path = 'sample.jpg'
            # imgO = Image.open(image_path)
            # cropped_image = imgO.crop(coords)
            # cropped_image.save(saved_location)
            print "name:"   str(name)   "x1:" str(x1) " y1:" str(y1) " x2:" str(x2) " y2:" str(y2)   " -- OK"
            x1 = x1   int(a)
            name = name   1
        y1 = y1   int(a)
        x1 = 0

series()
  

ВЫВОД ПРОКОММЕНТИРОВАННОГО кода

 anas@anas-XPS-12-9Q33:~/Desktop/albumTiler$ python tiler.py
WIDTH:1800 HEIGHT:1200 A:450 I:2
name:0x1:0 y1:0 x2:450 y2:450 -- OK
name:1x1:450 y1:0 x2:450 y2:450 -- OK
name:2x1:900 y1:0 x2:450 y2:450 -- OK
name:3x1:1350 y1:0 x2:450 y2:450 -- OK
name:4x1:0 y1:450 x2:450 y2:450 -- OK
name:5x1:450 y1:450 x2:450 y2:450 -- OK
name:6x1:900 y1:450 x2:450 y2:450 -- OK
name:7x1:1350 y1:450 x2:450 y2:450 -- OK
  

это означает, что все в коде выполняется и все в порядке

ПРОБЛЕМА В

когда код не прокомментирован, он обрезает изображение из ранее обрезанного изображения при обрезке во второй раз, и далее я хочу повторно открыть исходное изображение для всех обрезок, вставляя результаты кода без комментариев ниже для подробного объяснения

 anas@anas-XPS-12-9Q33:~/Desktop/albumTiler$ python tiler.py
WIDTH:1800 HEIGHT:1200 A:450 I:2
name:0x1:0 y1:0 x2:450 y2:450 -- OK
Traceback (most recent call last):
  File "tiler.py", line 33, in <module>
    series()
  File "tiler.py", line 26, in series
    cropped_image.save(saved_location)
  File "/home/anas/.local/lib/python2.7/site-packages/PIL/Image.py", line 1994, in save
    save_handler(self, fp, filename)
  File "/home/anas/.local/lib/python2.7/site-packages/PIL/JpegImagePlugin.py", line 761, in _save
    ImageFile._save(im, fp, [("jpeg", (0, 0) im.size, 0, rawmode)], bufsize)
  File "/home/anas/.local/lib/python2.7/site-packages/PIL/ImageFile.py", line 514, in _save
    e.setimage(im.im, b)
SystemError: tile cannot extend outside image
  

Комментарии:

1. координация также работает правильно

Ответ №1:

Прямоугольник обрезки должен быть (слева, вверху, справа, внизу)-tuple

вместо

 coords = (x1,y1,x2,y2) 
  

вам нужно использовать

 coords = (x1,y1,x1 x2,y1 y2)
  

Комментарии:

1. Да, у меня есть, локально

2. О, я не знаю, как это сработало, но спасибо, что ответили на мой вопрос

3. Спасибо за помощь. Да благословит вас Бог

4. x2 и y2 — это ширина и высота, параметр обрезки должен быть правым и нижним,