使用python中的PIL裁剪具有相同裁剪大小的整个图像

时间:2018-11-27 13:56:14

标签: python image python-imaging-library

我对PIL python的逻辑有些疑问。我的目标是从左上角到右下角位置完全以64x64大小裁剪一张图像。我可以进行一次裁剪操作,但是当我尝试完全通过循环裁剪图像时,我陷入了中间的循环情况。

在第一个循环中,我可以裁剪((0,0,64,64))。但是,然后我无法弄清楚循环部分用PIL将左下64x64移到底部。由于第一个2元组是原点位置点,因此下一个元组用于裁剪大小。

在我开始学习python时,我们将不胜感激。

import os
from PIL import Image

savedir = "E:/Cropped/OK"
filename = "E:/Cropped/dog.jpg"
img = Image.open(filename)
width, height = img.size

start_pos = start_x, start_y = (0,0)  
cropped_image_size = w, h = (64, 64) 

frame_num = 1
for col_i in range (width):
    for row_i in range (height):
        x = start_x + col_i*w
        y = start_y + row_i*h
        crop = img.crop((x, y, x+w*row_i, y+h*col_i))
        save_to= os.path.join(savedir, "counter_{:03}.jpg")
        crop.save(save_to.format(frame_num))
        frame_num += 1

1 个答案:

答案 0 :(得分:1)

您可以使用range()函数为您执行步进(在这种情况下,以64块为单位),以便您的剪切仅涉及简单的表达式:

import os
from PIL import Image

savedir = "E:/Cropped/OK"
filename = "E:/Cropped/dog.jpg"
img = Image.open(filename)
width, height = img.size

start_pos = start_x, start_y = (0, 0)
cropped_image_size = w, h = (64, 64)

frame_num = 1
for col_i in range(0, width, w):
    for row_i in range(0, height, h):
        crop = img.crop((col_i, row_i, col_i + w, row_i + h))
        save_to= os.path.join(savedir, "counter_{:03}.jpg")
        crop.save(save_to.format(frame_num))
        frame_num += 1

除此之外,您的代码可以按预期工作。