设计思路:
1、实现微信九宫格图像,一张完整的图需要裁减成9个小方块;小方块需要是正方形
2、切割小图片的时候 需要计算每张小图的尺寸,使其保持一致
3、计算每张小图片的四个角的坐标;通过坐标实现图片的切割
效果展示
第一步 :填充图像 先将image填充为正方形
from PIL import Image
# 第一步 :填充图像 先将image填充为正方形
def fill_image(img):
width, height = img.size
new_image_length = width if width > height else height
# mode: 模式,通常用"RGB"这种模式
# size:生成的图像大小
# color:生成图像的颜色,默认为0,即黑色
new_image = Image.new(img.mode, (new_image_length, new_image_length), color='white')
# 判断如果原图的宽大于高,则填充图片的竖直维度
if width > height:
new_image.paste(img, (0, int((new_image_length - height) / 2)))
else:
new_image.paste(img, (int((new_image_length - width) / 2), 0))
# 返回
return new_image
if __name__ == '__main__':
image = Image.open('./江疏影.png')
fill_image(image)
第二步 : 裁剪及分割图像
# 第二步 : 裁剪、分割图像
def split_image(img):
width, height = img.size
item_width = int(width / 3)
box_list = []
# (left, top, right, bottom) 设置图像四元组坐标 (左,上,右,下)
# 内循环 - 外循环 - 3 * 3 = 9
for i in range(0, 3):
for j in range(0, 3):
# 设置图像四元组坐标 (左,上,右,下)
box = (j * item_width, i * item_width, (j + 1) * item_width, (i + 1) * item_width)
box_list.append(box)
"""
裁剪矩形,返回该图像的矩形区域
"""
img_list = [img.crop(box) for box in box_list]
return img_list
if __name__ == '__main__':
image = Image.open('./江疏影.png')
image = fill_image(image)
split_image(image)
第三步 :保存图像
# 第三步 :保存图像
def save_images(img_list):
index = 1
for img in img_list:
# img.save("./九宫格图片/"+str(index) + '.png', 'PNG')
img.save("./九宫格图片/" + str(index) + '.png')
index += 1
if __name__ == '__main__':
save_images(image_list)
最终效果展示
如果本文对你学习有所帮助-可以点赞👍+ 关注!将持续更新更多新的文章。