python resample_无限翻折!Python教你制作表白贺卡

eba5a47cb71fb560eeb9455fa76a2303.png

◆ ◆ ◆

作者 | 致宏

广州大学数学系

一年一度的撒狗粮节已经过去

不知道大家是过上了甜蜜的二人生活

还是每天抓耳挠腮地熬夜加班

如果你正犹豫怎么行动

下边这张创意卡片或许可以给你助助力

5e504ff5f013caacb71476784c80c74e.png

"我喜欢你"× ∞

640?wx_fmt=gif

可设置交替画面

卡片效果不错,制作方法如下

Ps 制作

1.  绘制框线图

f3aa8d9d2cc0704ec0ca8fbcccd00288.png

2. 图片裁切

28527747c945b63f5d9e08a79def4d2a.png

3. 分组填充

c2abc0ec75e6ece64847d2640ce3000f.png

4. 打印,折纸

640?wx_fmt=gif

图片裁切比较费时

卡片多了容易忙不过来

这时候,万能工具 Python 就该登场了。

72236649d7ad4ca17247a2a37cd6d624.png

学习一个新工具,最快的上手方式自然是

不断使用这一工具

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 省下了不少时间

如果是电脑小白,也不必担心

后台回复”四阶折纸”

获取链接,制作你的专属贺卡!

d5a3552874ac72fa8b5e38645c57ba24.png

程序制图

实际上,无限翻折卡片有好几个家族

上边提到的只是其中一种

n阶无限翻折

a17b2ab2da0b6fbda7877398f0715bd5.png

三阶翻折

086bf77ae4609b3be34ee1d036d2a7c0.png

四阶翻折

通过简单的数学推导,容易证明

n阶翻折(n≥3) 均存在

n阶卡片的 p图 难度增加

但 Python 编程却很简单

感兴趣的话,点击在看,有机会再开更下篇

e79445b5b004300e9d5485b6e8fdf9a5.png

喜欢,就点个赞再走呗~

感谢阅读 d358b40c1e82a2be4e3375d7727b9868.png

推荐阅读:

1:互联网薅羊毛指南

2:互联网人与前公司的爱恨情仇

3:任正非:5G 背后有个不谈恋爱的小伙子

4:2018年Python爱好者社区历史文章合集(作者篇)

5:2018年终精心整理|Python爱好者社区历史文章合集(类型篇)

02d286c899175bd1cc39d1e4585035ef.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值