python相册排版_Python3一键排版证件照(1寸照、2寸照) | 原创

原创不易请勿抄袭

一个凌晨更新公众号的狗子

没错

是我本人

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

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

其实是一样的相纸啊

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

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

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

话不多说,说干就干

思 路

一张证件照,尺寸比例可以不完全按照标准

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

缩放到标准尺寸

排版到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))

参数:

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

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

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排列),是这样滴:

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

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

还是画个图更直观

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

我这个画完是这样嘞(红色线部分),像不像冰格:

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

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

因此,我们需要计算单个1寸照片在整个画板里左上角坐标,

还是画个图说明下:

先求每个小格子里中心点focus_point的坐标,然后根据1寸照片的大小求左上角坐标start_point。然后根据每个start_point循环把照片贴上去就好啦!

我生成的是这样嘞,看起来很完美啊!

同理,5寸照片排版2寸的。这里注意新建画板时候的尺寸,因为相当于是竖版照片

5寸照片混合排列1寸、2寸的:

注意一下

2寸照片旋转了90度,用到的函数中,参数必须写上expand=True

Image.rotate(90,expand=True))

如果没写这个参数默认是False,这样旋转后的照片是按照原来的大小,会有裁剪或者黑边,例如:

6寸照片排版1寸:

6寸照片排版2寸按照5寸照片的排版模式会有高度上的溢出

解决方法:新建画布时候按照6寸比例3:2进行适当的放大,因为冲印的时候也没要求就是标准大小嘛

比如,我将大小改为1950*1300

同理,6寸照片混合排列1寸、2寸的也是有溢出。修改完尺寸,混合排版的样子就多了去了,比如这样:

或者这样:

源代码

需要源代码的童鞋,请访问我的博客园地址获取

https://www.cnblogs.com/aby321/p/11805789.html

特别鸣谢

由衷感谢 薛老板 提供本人证件照

为表达本人的感激之情

在此为他 征友

有意者请在公众号内回复

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值