◆ ◆ ◆
作者 | 致宏
广州大学数学系
一年一度的撒狗粮节已经过去
不知道大家是过上了甜蜜的二人生活
还是每天抓耳挠腮地熬夜加班
如果你正犹豫怎么行动
下边这张创意卡片或许可以给你助助力
"我喜欢你"× ∞
可设置交替画面
卡片效果不错,制作方法如下Ps 制作
1. 绘制框线图
2. 图片裁切
3. 分组填充
4. 打印,折纸
图片裁切比较费时
卡片多了容易忙不过来
这时候,万能工具 Python 就该登场了。
学习一个新工具,最快的上手方式自然是
不断使用这一工具
Python 有PIL,OpenCV,Scikit-Image 等
丰富的图片处理库,正好借这个机会
熟悉PIL库的函数使用Python 编码
编程目的:输入图片,自动生成成品图
函数代码如下:#输入:被粘贴图片,粘贴图片,小块尺寸,粘贴位置def pic_paste(img,pic,size,location): im = Image.open(pic) #粘贴图片im #裁剪图片 [width,height] = im.size #图片信息 l = min (height,width) #取短边 a = l//2 l = 2*a #切块顺序,左上,右上,右下,左下 boxs = [(0,0,a,a),(a,0,l,a),(a,a,l,l),(0,a,a,l)] slice_list = [im.crop(i) for i in boxs] #存储切块 #斜切拉伸 pictures = [] #储存拉伸后的图片 for i,pic in enumerate(slice_list): pic = pic.rotate(i*90-45,expand=True) #旋转图片,角度分别为 -45,45,135,-135 (逆时针) pictures.append(pic.resize(size)) #拉伸并保存 #粘贴图像 x,y = location for i,pic in enumerate(pictures): img.paste(pic,(x+i*w,y)) img.paste(pictures[0],(x+4*w,y)) #末尾追加 return img
主函数代码from math import sqrtfrom PIL import Imageh = 300 #设定裁剪方块像素w = int(300*sqrt(2))img1 = Image.new("RGBA",(int(4.5*w),int(2.5*h)),"black") #新建空白图片img2 = Image.new("RGBA",(int(4.5*w),int(2.5*h)),"black") #尺寸 4.5×2.5 #输入图片pic1 = input("Input picture names\nPic1:")pic2 = input("Pic2:")pic3 = input("Pic3:")pic4 = input("Pic4:")#裁剪并粘贴pic_paste(img1,pic1,(w,h),(0,0)) #位置1pic_paste(img1,pic1,(w,h),(0,2*h)) #位置5pic_paste(img2,pic2,(w,h),(-w//2,h//2))#位置2pic_paste(img1,pic3,(w,h),(0,h)) #位置3pic_paste(img2,pic4,(w,h),(-w//2,-h//2))#位置0pic_paste(img2,pic4,(w,h),(-w//2,h+h//2))#位置4im = Image.blend(img1,img2,1) #图片融合im = im.point(lambda i:i*2)im.save("output.png")input("输出完毕!")
案例中用了Image模块函数,下边逐个介绍from PIL import Image #导入模块
1.读入图片 Image.openim = Image.open(picture_name)
2.获取图片大小 .size[width,height] = im.size
3.切块 .cropim.crop(box=None)#box为四元数组,标记盒子的左上与右下位置
4.图片旋转 .rotateim.rotate(angle, resample=0, expand=0, center=None, translate=None)#expend设置图片旋转后的大小自适应
5.拉伸图片 .resizeim.resize(size, resample=0, box=None)
6.粘贴图片 .pasteim.paste(pic,(x,y), mask=None) #把pic粘贴到img的(x,y)位置
7.新建空白图片 Image.newim.paste(pic,(x,y), mask=None) #把pic粘贴到img的(x,y)位置
8.图片混合 Image.blendImage.blend(img1,img2,alpha)#输出 :img1 * (1.0 - alpha) + img2 * alpha
9.点操作 .pointim = im.point(lambda i:i*2)#像素增强100%
- 小结 -
Python 编程制卡
相比 Photoshop 省下了不少时间
如果是电脑小白,也不必担心
后台回复”四阶折纸”
获取链接,制作你的专属贺卡!
程序制图
实际上,无限翻折卡片有好几个家族
上边提到的只是其中一种n阶无限翻折
三阶翻折
四阶翻折
通过简单的数学推导,容易证明
n阶翻折(n≥3) 均存在
n阶卡片的 p图 难度增加
但 Python 编程却很简单
感兴趣的话,点击在看,有机会再开更下篇
喜欢,就点个赞再走呗~感谢阅读
推荐阅读:
1:互联网薅羊毛指南
2:
3:任正非:5G 背后有个不谈恋爱的小伙子
4:2018年Python爱好者社区历史文章合集(作者篇)
5:2018年终精心整理|Python爱好者社区历史文章合集(类型篇)