1 回答

TA贡献1877条经验 获得超1个赞
假设square_size是一个定义每边长度的 int 并且我们想要多个图像作为结果。下面的代码未经测试,但应该可以解决您的问题
def parse_image(source, square_size):
src = Image.open(source)
width, height = src.size
image_results = []
for x in range(0, width, square_size): #
for y in range(0, height, square_size):
top_left = (x, y) #left top of the rect
bottom_right = (x+square_size, y+square_size) #right bottom of the rect
#the current format is used, because it's the cheapest
#way to explain a rectange, lookup Rects
test = src.crop((top_left[1], top_left[0], bottom_right[0], bottom_right[1]))
image_results.append(test)
return image_results
让我知道是否有任何问题!
编辑,我受到一个候选答案的启发,这个解决方案奏效了。
def parse_image(source, square_size, print_coords=False):
src = Image.open(source)
dimensions = src.size
print(f"image dimensions: {src.size}")
max_down = int(src.height/square_size) * square_size + square_size
max_right = int(src.width/square_size) * square_size + square_size
tl_x = 0
tl_y = 0
br_x = square_size
br_y = square_size
count=0
for y in range(square_size,max_down,square_size):
for x in range(square_size,max_right,square_size):
count +=1
sample = src.crop((tl_x,tl_y,br_x,br_y))
sample.save(f"{source[:-4]}_sample_{count}_x{tl_x}_y{tl_y}.jpg")
if print_coords == True:
print(f"image {count}: top-left (x,y): {(tl_x,tl_y)}, bottom-right (x,y): {(br_x,br_y)}")
tl_x = x
br_x = x + square_size
tl_x =0
br_x = square_size
tl_y = y
br_y = y + square_size
添加回答
举报