一、引言
有的时候,我们需要把图片切成两半。比如考试试卷一般是A3纸大小,而我们家庭常用的打印机往往是只能打印A4纸。对于这样的试卷图片,我们直接缩小打印在A4纸上文字会显示得太小,为此我们需要把试卷图片横向均分成两部分,再分别打印到A4纸上。
还有的时候,我们需要把图片横向等分成三部分、四部分、……也可能需要把图片竖向等分成两部分、三部分、四部分、……如果我们需要把一张图片裁切成微信九宫格的形式,我们就需要把图片横向竖向均三等分,切成九块。环境:64位Win 10中文版 + 64位Python 3.7.6
《Python程序设计(基于计算思维和新文科建设)》,ISBN:9787121435577,胡凤国,电子工业出版社,2022年6月。本书是电子工业出版社在国内较早采用纸质版+电子版的创新图书发行模式的第一次尝试。本书是这套创新图书的纸质版部分,与之内容互补的电子版图书将稍后出版。基础篇介绍Python程序设计的入门知识,共12章,包括:⑵ Python软件的安装和Python程序运行;⑶ Python的基本概念(对象、数据类型、表达式、内置函数);排错篇总结初学者常遇到的错误并介绍程序调试方法,包含2章:与本书内容互补的电子版图书包含文本篇和应用篇两部分:文本篇:介绍字符集、编码和文本文件读写的知识,包含了对国家规范《通用规范汉字表》8105个汉字当中难以输入和难以显示的汉字的处理。应用篇:介绍Word、Excel、PPT、PDF、图片等常用办公文件的处理,是大家提高办公和科研效率的好帮手。本书配套有详细的PPT和教学大纲,还有全部例题的程序代码和绝大部分思考题的程序代码。本书配套PPT里面还加入了配套电子版图书中的部分内容,比如字符集和编码,不同编码的文本文件的读写,Word、Excel、PPT、PDF等一些常用办公文件的读写。1、大学文科生, 可选本书当Python教材或自学Python的参考书。2、大学理工科学生, 可选本书当自学Python的参考书。可拿本书当工具书,本书的配套程序会为您节省效率,在当前大数据和新文科的背景下,本书可以为相关领域的量化研究提供技术支持。本书配套的电子版图书中的编码和文本处理知识也可以作为理工科教师和科研人员处理文本数据的参考资料之一,毕竟专门开辟章节介绍国家标准《通用规范汉字表》汉字处理的程序设计图书并不多见。
本书有专门的海龟画图章节,有大量的有趣数学题目,可以培养学生的计算思维,适合对编程感兴趣的中小学生阅读,也适合打算让娃参加编程辅导班的家长朋友参考。本书在各大实体书店和网店均有销售。京东、天猫、当当的购买渠道如下(可扫码直达购买页面)。
三、原理
为了完成图片等分的任务,我们需要安装pillow扩展库:
假设我们要等分的图片是一只小兔子纪念币test.jpg:

在pillow库中,图片文件读取到内存之后变成图像类的对象,图像是由一个个像素点构成,左上角像素点的坐标(横坐标在前纵坐标在后)是(0, 0),右下角像素点的坐标是(w, h),其中w是图片文件的宽度(横向的像素点数目),h是图片文件的高度(纵向的像素点数目)。对于这个小兔子纪念币图片来说,它的尺寸是480×475,那么,它被读取成图像对象之后,四个角的坐标是这样的:
所谓图像裁切就是在图像中取一个矩形区域,把这个矩形区域对应的图像保存成文件。矩形区域是一个四元组:(左上角横坐标, 左上角纵坐标, 右下角横坐标, 右下角纵坐标)图像裁切时要把矩形区域的四元组坐标作为参数传递给图像对象的crop方法。图片文件的等分其实就是通过计算区域的坐标位置把图像均匀分割成若干个矩形区域,分别获取图像保存成图片文件。四、程序代码

图片等分效果如下(由于微信中不能直接横向放多张照片,为了能看出来横向各部分并列的效果,我们是在Windows的文件夹中用缩略图截屏的):

为了方便后续操作,我们把横向2等分的代码写成函数:

除了生成的文件名跟非函数版代码不一样之外,图片横向二等分的效果是一样的,这里不再贴图。仿照这段代码,我们不难写出横向三等分图片文件的代码。
等分效果如下(由于微信中不能直接横向放多张照片,为了能看出来横向各部分并列的效果,我们是在Windows的文件夹中用缩略图截屏的):
直接上函数版的代码:

图片等分效果如下:


仿照这段代码,我们不难写出竖向三等分图片文件的代码。




五、讨论
1、如果不是等分,我们可以在图像中截取特定的矩形区域,另存为图片文件即可;
2、我们可以先计算出横向和竖向三等分图片的各个四元组坐标,发现规律,从而把三等分的代码写成循环;
3、在上一步的基础上,可以把横向竖向3等分改成横向和竖向n等分;
4、在上一步的基础上,我们把横向等分和竖向等分的代码结合起来,用二重循环进行横向m等分和竖向n等分的操作,把一张图片等分成m×n个面积相等的区域;
5、如果上一步的m=n=3,我们就能完成单张图片等分裁切成微信九宫格形式的九张图片,我们希望微信中显示的九宫格图片效果如下:

以上几点讨论,可以在本文现有代码的基础上逐步完成,具体如何实现,请同学们和读者朋友思考。
由于本号文章以辅助教学为主,笔者不建议自己的学生直接拿代码运行,而是建议在理解了思路之后自己敲代码来加深印象,所以本号一般不直接贴代码。如果其他读者朋友有需要代码,请关注本号,加笔者微信联系。欢迎关注微信公众号“语和言”,本公众号将不定期发布对图书《Python程序设计(基于计算思维和新文科建设)》中的Python知识点进行解读和补充的内容。语和言公众号还有读者交流群,读者朋友可以入群一起讨论问题。
欢迎跟图书《Python程序设计(基于计算思维和新文科建设)》的作者胡凤国老师进行交流,电邮:cuchufengguo@163.com。
七、图书目录
图书《Python程序设计(基于计算思维和新文科建设)》目录如下(手机端可以用手指上下滑动下面灰色区域的文字来查看全部目录,电脑端可以用鼠标滚动滚轮或拖动下面文本框右边的滚动条来浏览全部目录):
8.2.4 关于元素可比较的有序序列类对象的通用操作10.3.3 用上下文管理语句with来管理文本文件读写12.12.1 datetime标准库定义的常用类参考文献