#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 — это ширина и высота, параметр обрезки должен быть правым и нижним,