【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