◆ ◆ ◆
作者 | 致宏
广州大学数学系
一年一度的撒狗粮节已经过去
不知道大家是过上了甜蜜的二人生活
还是每天抓耳挠腮地熬夜加班
如果你正犹豫怎么行动
下边这张创意卡片或许可以给你助助力
"我喜欢你"× ∞
可设置交替画面
卡片效果不错,制作方法如下
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 sqrt
from PIL import Image
h = 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)) #位置1
pic_paste(img1,pic1,(w,h),(0,2*h)) #位置5
pic_paste(img2,pic2,(w,h),(-w//2,h//2))#位置2
pic_paste(img1,pic3,(w,h),(0,h)) #位置3
pic_paste(img2,pic4,(w,h),(-w//2,-h//2))#位置0
pic_paste(img2,pic4,(w,h),(-w//2,h+h//2))#位置4
im = Image.blend(img1,img2,1) #图片融合
im = im.point(lambda i:i*2)
im.save('output.png')
input('输出完毕!')
案例中用了Image模块函数,下边逐个介绍
from PIL import Image #导入模块
1.读入图片 Image.open
im = Image.open(picture_name)
2.获取图片大小 .size
[width,height] = im.size
3.切块 .crop
im.crop(box=None)
#box为四元数组,标记盒子的左上与右下位置
4.图片旋转 .rotate
im.rotate(angle, resample=0, expand=0, center=None, translate=None)
#expend设置图片旋转后的大小自适应
5.拉伸图片 .resize
im.resize(size, resample=0, box=None)
6.粘贴图片 .paste
im.paste(pic,(x,y), mask=None) #把pic粘贴到img的(x,y)位置
7.新建空白图片 Image.new
im.paste(pic,(x,y), mask=None) #把pic粘贴到img的(x,y)位置
8.图片混合 Image.blend
Image.blend(img1,img2,alpha)
#输出 :img1 * (1.0 - alpha) + img2 * alpha
9.点操作 .point
im = 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爱好者社区历史文章合集(类型篇)