本帖最后由 leanfly 于 2021-1-13 09:39 编辑
输入图片路径后自动生成微信朋友圈九宫格图片
[Python] 纯文本查看 复制代码 #coding=utf-8
import os
from PIL import Image
import re
'''
使用PIL的Image进行图片裁剪,生成正方形的9宫格
1>获取图片的宽、高参数,生成一张新的正方形图
2>对新生成的正方形图片进行裁剪,生成9宫格
3>保存
'''
def full_img(img):
#获取image图像的宽、高属性
width, height = img.size
#比较图片的宽、高属性来确定新图片的边长
if width > height :
full_image_length = width
else :
full_image_length = height
#生成正方形图片
full_image = Image.new(img.mode, (full_image_length, full_image_length), color='white')
#将图片覆盖到正方形底图,居中
if width > height :
#获取两边间距
side_length = int((width - height) / 2)
#宽大于高,粘贴时左右边距0,上下边距是宽高差值的一半取整
full_image.paste(img, (0, side_length))
else :
side_length = int((height- width) / 2)
full_image.paste(img, (side_length, 0))
#执行完毕,返回正方形新图片
return full_image
# full_img(Image.open('./python/dist/鸡西酸汤子中毒已致8人死亡/006rUgk9gy1gjndnnooquj30c80oa0wv.jpg')).show()
def cut_img(img):
#获取image图像的宽、高属性
width, height = img.size
#进行三等分
item_width = int(width / 3)
#裁图的box列表
box_list = []
#Image.crop(left, upper, right, lower)左上右下,四个维度
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 = []
for box in box_list :
img_item = img.crop(box)
img_list.append(img_item)
#返回裁剪后的图片列表
return img_list
def save_img(img):
#index初始值为1
index = 1
for i in img :
i.save(str(index) + '.jpg', 'PNG')
index += 1
if __name__ == '__main__' :
#定义图片路径
print('请输入图片路径\n路径获取方式为:按住shift键后点击鼠标右键,然后点击复制为路径')
file_path = input()
file_path = file_path.split('"')[1].split('"')[0]
print('当前图片路径为 %s' % file_path)
# 创建文件夹
print('请输入想要保存的文件夹名字\n')
save_path = input()
os.mkdir(save_path)
os.chdir(save_path)
#打开图片
try:
image = Image.open(file_path)
#利用full_img函数生成正方形图片
image = full_img(image)
#利用cut_img函数裁剪生成图片列表
image_list = cut_img(image)
#利用save_img函数储存图片
save_img(image_list)
print('图片九宫已生成\nIt is show time!')
except Exception as e:
print(e)
链接: https://pan.baidu.com/s/1xIq3vwoH3_PRLZc6l8Rp_Q 提取码: 9vqy 复制这段内容后打开百度网盘手机App,操作更方便哦
|