编程语言
首页 > 编程语言> > 【python学习日记】python实现证件照剪裁、缩放、修改底色

【python学习日记】python实现证件照剪裁、缩放、修改底色

作者:互联网

参考文章:

剪裁:https://blog.csdn.net/hfutdog/article/details/82351549

 Background:学校要求上传电子证件照,大小为538*441像素,白底。这个尺寸实在是奇怪,我的照片大小是1080*1512像素,蓝底,于是我打算学习用python处理。

一、调整大小

既要调整比例又要缩放的要求还是有些复杂,感觉不能直接完成,于是我直接自己计算需要剪裁的像素值了。有两种方法:

1、通过Pillow

pip install image

2、通过OpenCV

pip install opencv-python

1、Pillow

from PIL import Image

infile = 'D:\\zhengjianzhao.jpg'
outfile = 'D:\\myphoto.jpg'

img = Image.open(infile)#读取图片
(x,y) = img.size #read image size
print( 'original size: ',x,y)#打印图片原始尺寸(1080*1512)
cutX=0.5*(x-1074)#1074=358*3
cutY=0.5*(y-1323)
print('cutX=',cutX,' cutY=',cutY)
img_cropped = img.crop((cutX,cutY,x-cutX,y-cutY))  # (left, upper, right, lower)
x_s = 358 #define standard width
y_s = 441 #calc height based on standard width
print('new size:',x_s,y_s)
out =img_cropped .resize((x_s,y_s),Image.ANTIALIAS) #resize image with high-quality
out.save(outfile)

2、OpenCV


import cv2
from math import floor

infile = 'D:\\zhengjianzhao.jpg'
outfile = 'D:\\myphoto.jpg'

img = cv2.imread(infile)
(y,x,rgb)=(img.shape)#按照宽长度取
print('original size:',x,y)
cutX=int(0.5*(x-1074))#1074=358*3
cutY=floor(0.5*(y-1323))#不支持小数
img_cropped = img[cutY:y-cutY,cutX:x-cutX]# 裁剪坐标为[y0:y1, x0:x1]
cv2.imwrite(outfile, img_cropped)
(y_s,x_s,rgb)=(img_cropped.shape)
print('new size:',x_s,y_s)

可以看出来opencv的剪裁方法img[]的参数不能是小数,所以我取了floor。获取图片尺寸时的参数顺序也不一致。

二、修改底色

标签:img,缩放,python,cropped,print,证件照,cutX,cutY,size
来源: https://blog.csdn.net/weixin_42182906/article/details/101033382