Повторно открыть изображение после обрезки в python pillowPIL? - PullRequest
0 голосов
/ 11 марта 2019

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

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

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

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 Ответ

0 голосов
/ 11 марта 2019

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

вместо

coords = (x1,y1,x2,y2) 

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

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