python制作照片_python3一键排版证件照(一寸照、二寸照),附源代码

又到了一年一度办公园年卡的日子了,每年需要一张一寸照片,库存今年告罄如果拿着一寸照片去冲印,商家那个冲印的价格可比冲印普通照片不知道贵了多少呗(目测10倍以上)其实是一样的相纸啊于是乎,为了省这点钱就自己排版好了如果选用工具的话,不会ps的推荐“光影魔术手v3.1.2”(最新版感觉不太好用)but,作为一个技术宅,我当然是选择自己来实现啦!话不多说,说干就干思路:1. 首先需要一张已经拍摄好的证件...
摘要由CSDN通过智能技术生成

又到了一年一度办公园年卡的日子了,每年需要一张一寸照片,库存今年告罄

如果拿着一寸照片去冲印,商家那个冲印的价格可比冲印普通照片不知道贵了多少呗(目测10倍以上)

其实是一样的相纸啊

于是乎,为了省这点钱就自己排版好了

如果选用工具的话,不会ps的推荐“光影魔术手v3.1.2”(最新版感觉不太好用)

1399899-20191106155201583-2072979857.png

1399899-20191106154300289-1170388592.png

but,作为一个技术宅,我当然是选择自己来实现啦!

话不多说,说干就干

思路:

1. 首先需要一张已经拍摄好的证件照,尺寸比例可以不完全按照标准

2. 按比例裁剪(1寸、2寸的比例不同)

3. 缩放到标准尺寸

4. 排版到5寸或者6寸照片上

照片尺寸:宽*高(单位:像素)

1寸照片:295*413

2寸照片:413*626

5寸照片(横版):1500*1050

6寸照片(横版):1800*1200

环境:

python3 + pillow库

具体操作:

1. 裁剪

以1寸照片为例,其高:宽 = 1.4,为了使原始照片不失真,应该按照这个1.4的比例进行裁剪

若大于1.4说明高度多了,需要进行上下裁剪;若小于1.4说明宽度多了,需要进行左右裁剪。这里的裁剪均是对称平均裁剪

Image.crop((left, up, right, below))

参数:

需要四个参数,分别是目标照片的四个边线距离左边和上边的距离

1399899-20191106164939754-1405655180.png

值得注意的是:参数是一个元组,因此看起来有两对括号!

2. 缩放

将已经调整好比例的照片进行标准缩放,标准如下(单位:像素):

1寸照片:295*413

2寸照片:413*626

Image.resize(width, height)

参数:

width:宽

heght:高

3. 排版

先想好冲印5寸照片还是6寸照片,以及是需要1寸、2寸还是混合排版

这两个因素都会影响到排版问题,主要是横or竖的问题

以5寸照片上排版1寸照片为例(5寸横版,1寸竖版,2*4排列),是这样滴:

1399899-20191106165904079-726941557.png

在排列之前,我细心的用画笔画出了裁剪线,这样手残的人再也不用哆哆嗦嗦剪歪了

bk = Image.new("RGB", [WIDTH_5IN,HEIGHT_5IN], (255,255,255))#创建一个5寸大小的,白色背景的画板

draw = ImageDraw.Draw(bk)#创建画笔

draw.line([(0,HEIGHT_5IN/2),(WIDTH_5IN,HEIGHT_5IN/2)],fill=128) #横线,fill是填充颜色

新建画板就不多讲了,注意一下参数的位置,先宽后高,颜色参数其实有多种写法

这里主要讲一下怎么在画板上画线,其实是需要起点坐标和终点坐标,坐标原点是画板左上角,横轴向右x,纵轴向下y

还是画个图更直观

1399899-20191106172559170-1799343205.png

注意坐标的写法 [(起点x,起点y),(终点x,终点y)],坐标点必须为int类型

我这个画完是这样嘞:

1399899-20191106173110729-1408301539.png

然后就是把照片贴上去,注意要放在每个“格子”的中心呦

Image.paste(photo, (photo左上角坐标))

因此,我们需要计算单个1寸照片在整个画板里左上角坐标,还是画个图说明下:

先求每个小格子里中心点focus_point的坐标,然后根据1寸照片的大小求左上角坐标start_point

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值