大华人脸照片处理(缩小到小于100KB)
#coding:utf-8
from PIL import Image
import sys
import time
import os
def get_size(file):
# 获取文件大小:KB
size = os.path.getsize(file)
#print(file)
return size / 1024
def exif_transpose(img):
if not img:
return img
exif_orientation_tag = 274
# Check for EXIF data (only present on some files)
if hasattr(img, "_getexif") and isinstance(img._getexif(), dict) and exif_orientation_tag in img._getexif():
exif_data = img._getexif()
orientation = exif_data[exif_orientation_tag]
# Handle EXIF Orientation
if orientation == 1:
# Normal image - nothing to do!
pass
elif orientation == 2:
# Mirrored left to right
img = img.transpose(PIL.Image.FLIP_LEFT_RIGHT)
elif orientation == 3:
# Rotated 180 degrees
img = img.rotate(180)
elif orientation == 4:
# Mirrored top to bottom
img = img.rotate(180).transpose(PIL.Image.FLIP_LEFT_RIGHT)
elif orientation == 5:
# Mirrored along top-left diagonal
img = img.rotate(-90, expand=True).transpose(PIL.Image.FLIP_LEFT_RIGHT)
elif orientation == 6:
# Rotated 90 degrees
img = img.rotate(-90, expand=True)
elif orientation == 7:
# Mirrored along top-right diagonal
img = img.rotate(90, expand=True).transpose(PIL.Image.FLIP_LEFT_RIGHT)
elif orientation == 8:
# Rotated 270 degrees
img = img.rotate(90, expand=True)
return img
def compress_image(infile, outfile='', mb=90, step=3, quality=50):
o_size = get_size(infile)
print(o_size)
quality=int((mb/o_size)*100)
print(quality)
if o_size <= mb:
return infile
#outfile = get_outfile(infile, outfile)
while o_size > mb:
im = Image.open(infile)
im=exif_transpose(im)
im.save(infile, quality=quality)
if quality - step < 0:
break
quality -= step
o_size = get_size(infile)
im.save(infile)
def resize_image(infile, outfile='', x_s=50):
im = Image.open(infile)
im=exif_transpose(im)
x, y = im.size
print(x,y)
y_s = int(y * x_s / x)
out = im.resize((x_s, y_s), Image.ANTIALIAS)
#outfile = get_outfile(infile, outfile)
out.save(infile)
#if __name__ == '__main__':
print("=========================JPG-Changer=========================")
print("========================Luz 2021-9-17========================")
jpg_path=os.path.dirname(os.path.realpath(sys.argv[0]))
print("path:"+jpg_path)
print("please check path")
for i in range(5):
print("run in "+str(5-i)+" seconds")
time.sleep(1)
print("=========================start task==========================")
jpg_names=[name for name in os.listdir(jpg_path)]
geshis=['jpg']
for i in jpg_names:
geshi=i.split('.')[-1]
geshi=geshi.lower()
for a in geshis:
if(geshi==a):
while(1):
try:
resize_image(jpg_path+'\\'+i)
time.sleep(0.1)
compress_image(jpg_path+'\\'+i)
print(i)
break
except:
print(i)
#print(i)
print("========================= complete!==========================")放置到照片所在文件夹内运行脚本