本文已参与周末学习计划,点击链接查看详情:周末学习
先简单梳理下思路:
- 读取初始照片
- 比较照片的宽高,数值较大的作为边长生成以白色为背景的大正方形图
- 将大正方形图进行切割,按照 3*3 比列,变成 9 个小图
- 保存小图
基本思路有了,那就开始敲代码吧。
这个小功能的实现利用了 Python 中的一个图形处理库:Pillow 。
Pillow 是从著名的 Python 图像处理库 PIL 发展出来的一个分支。通过 Pillow 可以实现图像压缩和图像处理等操作。安装很简单,师兄们自己来吧。思路就按照上面的来,
1、读取照片
先来引入库,并获取当前文件所在文件夹:
from PIL import Image
import os
__author__ = 'fiz'
#当前文件所在文件夹
DIR_NAME = os.path.dirname( os.path.abspath(__file__) )
复制代码
老规矩当模块直接被运行的时候,执行一个我们自己封装的函数
from PIL import Image
import os
__author__ = 'fiz'
#当前文件所在文件夹
DIR_NAME = os.path.dirname( os.path.abspath(__file__) )
if __name__ == '__main__':
fizRun()
复制代码
在 fishcRun() 中我们来读取本地图片:
from PIL import Image
import os
__author__ = 'fiz'
#当前文件所在文件夹
DIR_NAME = os.path.dirname( os.path.abspath(__file__) )
def fizRun():
# 读取本地文件
file_path = os.path.join(DIR_NAME, 'demo.jpg')
image = Image.open(file_path)
print('程序结束啦!')
if __name__ == '__main__':
fizRun()
复制代码
好啦,图片就读取到了。
2、填充原图形的背景,生成大正方形图
这个很好理解,如果是标准正方形,宽高一样,我们直接 3 等分即可。如果宽高不等呢?我们就给它加个白色背景,这样切出来,发出去也看不出来大小不等。宽高不等就又可以分成两种情况:宽大于高,高大于宽。如果是宽大与高,就按照宽的尺寸,设置高,多出来的部分,加填充白色背景。反之如果高大于宽,就按照高的尺寸,设置宽,多出来的部分,加填充白色背景。分析的很清楚啦,动手写成代码吧。先在 fishcRun() 中创建一个代表填充的 fill_images(image)。然后按照上面流程写代码:
from PIL import Image
import os
__author__ = 'fiz'
#当前文件所在文件夹
DIR_NAME = os.path.dirname( os.path.abspath(__file__) )
def fill_images(image):
""" 填充正方形白色背景图片 """
width, height = image.size # 获取图片的宽高
side = max(width, height) # 对比宽和高哪个大
# 新生成的图片是正方形的,边长取大的,背景设置白色
new_image = Image.new(image.mode, (side, side), color='white')
# 根据尺寸不同,将原图片放入新建的空白图片中部
if width > height:
new_image.paste(image, (0, int((side - height) / 2)))
else:
new_image.paste(image, (int((side - width) / 2), 0))
return new_image
def fizRun():
# 读取本地文件
file_path = os.path.join(DIR_NAME, 'demo.jpg')
image = Image.open(file_path)
# 填充
image = fill_images(image)
print('程序结束啦!')
if __name__ == '__main__':
fizRun()
复制代码
3、切割图
执行完 fill_images() 就有了一张正方形图。切割不难,按照宽或者高(反正都一样)除以 3 取整即可。然后保存每一个切出来的图。创建 cut_images(image) 代表切图。
这就不附上代码了。最后用save_images来保存就完成了。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END