问题:
想用python生成一个30MB的图能用什么办法?用pillow等库指定size好像生成不出来太大的图片
-
问题表现
-
报错信息
不能生成图片
产生的原因
生成的图片文件过大,此无法直接生成
解决方法
使用如下方法,程序运行后控制台会提示红色报错信息,但图片可以成功生成
from PIL import Image
from PIL.ImagePath import Path
# 初始尺寸和颜色,这只是一个起点,你可能需要调整这些值
initial_size = (50000, 50000) # 初始尺寸,你可能需要调整这个值
color = 'red' # 图片颜色
# 创建一个新的图像
img = Image.new('RGB', initial_size, color=color)
# 保存图片,并调整quality参数来控制文件大小
# quality参数范围是1(最低质量,最小文件大小)到95(最高质量,最大文件大小)
quality = 50 # 初始质量设置,你可能需要调整这个值
output_filename = 'my_image.jpg'
# 尝试保存图片并检查文件大小
while True:
img.save(output_filename, 'JPEG', quality=quality)
file_size = Path(output_filename).stat().st_size / (1024 * 1024) # 转换为MB
if 25 < file_size < 35: # 如果文件大小在25MB到35MB之间,就停止循环
break
elif file_size < 25: # 如果文件太小,降低quality会导致文件更大,所以增加尺寸
initial_size = (initial_size[0] * 1.1, initial_size[1] * 1.1) # 增大10%
img = Image.new('RGB', initial_size, color=color)
else: # 如果文件太大,增加quality
quality += 5
if quality > 95: # 防止quality超过最大值
break
print(f"Saved image '{output_filename}' with size approximately {file_size:.2f} MB")