ISEE小语
踏遍大路,追寻无尽小径;
不停脚步,终现壮美风光。
图片调整,在日常开发的过程中也是比较常见的。本次分享图片大小的调整、图片分辨率调整和制作一寸两寸照片。
环境:
Pycharm
Python 3.9.16
安装:
pip install pillow==10.2.0
一、调整图片大小
保持分辨率不变的情况下调整图片尺大小,使用PIL(Python Imaging Library,即Pillow)库对图片进行压缩编码质量的调整。
在实际应用中,每次减少质量,直到文件大小接近目标值,这个过程可能不会完全精确地得到指定大小数值。
那我们现在看一个实例,准备一张图片test_image.jpg,检查一下这张原始图片的大小。
from PIL import Image
import os
import io
# 定义原图片路径
input_path = 'test_image.jpg'
# 检查原始图片的大小
original_size_kb = round(os.path.getsize(input_path) / 1024)
print("图片原始大小:", original_size_kb, "KB")
(左右滑动查看完整代码)
结果:
图片原始大小:1793 KB
接下来调整图片文件的大小到接近1000KB。
注意,上面在介绍的时候就提到,这个过程可能不会完全精确的得到指定大小数值,所以只能说“接近”指定大小数值。
# 指定调整的大小
target_size_kb = 1000
# 定义质量搜索的上下限
low_quality = 1
high_quality = 100
final_quality = high_quality
# 打开图片
with Image.open(input_path) as img:
while low_quality <= high_quality:
# 尝试当前的中间质量值
current_quality = (low_quality + high_quality) // 2
buffer = io.BytesIO()
format='JPEG', quality=current_quality)
size_kb = buffer.getbuffer().nbytes / 1024
# 调整搜索范围
if size_kb < target_size_kb:
low_quality = current_quality + 1
else:
high_quality = current_quality - 1
# 记录最后一次符合条件的质量,以便最后保存
if size_kb <= target_size_kb:
final_quality = current_quality
# 定义输出图片路径,保存最终的图片
output_path = 'test_image_new.jpg'
format='JPEG', quality=final_quality)
print("调整成功!")
(左右滑动查看完整代码)
最后看一下调整后图片的大小:
# 检查最终图片的大小
end_size_kb = round(os.path.getsize(output_path) / 1024)
print("图片调整后大小:", end_size_kb, "KB")
(左右滑动查看完整代码)
结果:
图片调整后大小:989 KB
最终效果:
二、调整图片分辨率
调整图片分辨率,使用PIL(Python Imaging Library,即Pillow)库对图片进行调整。
在实际应用中,调整图片的分辨率的同时,图片的大小也会相应地调整。
那我们现在看一个实例,准备一张图片test_image.jpg,将图片的分辨率调整为指定的new_width和new_height。
from PIL import Image
# 打开图片
image = Image.open('test_image.jpg')
# 指定新的分辨率
new_width = 800
new_height = 600
# 调整分辨率
resized_image = image.resize((new_width, new_height))
# 保存调整后的图片
resized_image.save('test_image_new.jpg')
# 提示保存成功
print("图片分辨率调整已成功!")
(左右滑动查看完整代码)
最终的效果:
三、生成一寸、两寸照片
我们通常说的一寸照片的尺寸一般是25mm x 35mm,而两寸照片的尺寸一般是35mm x 49mm。
在实际应用中,以300 DPI为例,计算公式如下:
一寸照片:25mm x 35mm 约等于 0.984 x 1.378 英寸,乘以 300 DPI,则为 295 x 413 像素。
两寸照片:35mm x 49mm 约等于 1.378 x 1.929 英寸,乘以 300 DPI,则为 413 x 579 像素。
from PIL import Image
# 打开图片
image = Image.open('m_photo.jpg')
# 计算一寸和两寸照片的像素尺寸,以300DPI为例
dpi = 300
size_one_inch = (int(0.984 * dpi), int(1.378 * dpi))
size_two_inch = (int(1.378 * dpi), int(1.929 * dpi))
# 调整图片为一寸照片的尺寸
one_inch_photo = image.resize(size_one_inch)
one_inch_photo.save('一寸照片.jpg')
# 调整图片为两寸照片的尺寸
two_inch_photo = image.resize(size_two_inch)
two_inch_photo.save('两寸照片.jpg')
# 输出结果
print(f"已创建一寸照片的尺寸:{size_one_inch[0]}x{size_one_inch[1]}像素")
print(f"已创建两寸照片的尺寸:{size_two_inch[0]}x{size_two_inch[1]}像素")
(左右滑动查看完整代码)
结果:
最终的效果:
四、总结
以上示例中的图片与实例源码如下:
点个“赞”和“在看”,是对小栈最大的支持!
后台回复“image_change”即可获取源码!
文章就分享到这儿,喜欢就点个赞吧!