import os
import time
import platform
import subprocess
from PIL import Image
def resize_picture_filesize(imagefile, targetfile, targetsize):
"""调整图片文件大小
:param imagefile: 原图路径
:param targetfile: 保存图片路径
:param targetsize: 目标文件大小,单位byte
"""
currentsize = os.path.getsize(imagefile) # 原图文件大小
if currentsize > targetsize: # 需要缩小
for quality in range(99, 0, -1): # 压缩质量递减
if currentsize > targetsize:
image = Image.open(imagefile)
image.save(targetfile, optimize=True, quality=quality)
currentsize = os.path.getsize(targetfile)
else: # 需要放大
system = platform.system()
tempfile = str(int(time.time())) # 临时文件路径
tempsize = str(targetsize - os.path.getsize(imagefile)) # 临时文件大小
if system == 'Windows':
subprocess.run(['fsutil', 'file', 'createnew', tempfile, tempsize]) # 创建临时文件
subprocess.run(['copy/b', '{}/b+{}/b'.format(imagefile, tempfile), targetfile], shell=True) # 合并生成新图片
elif system == 'Linux':
subprocess.run(['fallocate', '-l', tempsize, tempfile]) # 创建临时文件
subprocess.run('cat {} {} > {}'.format(imagefile, tempfile, targetfile), shell=True) # 合并生成新图片
os.remove(tempfile)
if __name__ == '__main__':
imagefile = r'C:\1\1.png' # 221KB的图片
resize_picture_filesize(imagefile, 'reduce.jpg', 2 * 1024) # 缩小到2KB
resize_picture_filesize(imagefile, 'increase.png', 10 * 1024 * 1024) # 放大到10M
根据任意图片,生成指定大小的图片文件
于 2022-08-18 11:42:35 首次发布