Python图像调整通用技巧,必备

文摘   科技   2024-01-21 11:12   北京  


ISEE小语


    踏遍大路,追寻无尽小径;

    不停脚步,终现壮美风光。



    

    图片调整,在日常开发的过程中也是比较常见的。本次分享图片大小的调整、图片分辨率调整和制作一寸两寸照片。



环境:

Pycharm

Python 3.9.16


安装:

pip install pillow==10.2.0




一、调整图片大小

    保持分辨率不变的情况下调整图片尺大小,使用PIL(Python Imaging Library,即Pillow)库对图片进行压缩编码质量的调整。

    在实际应用中,每次减少质量,直到文件大小接近目标值,这个过程可能不会完全精确地得到指定大小数值。

    那我们现在看一个实例,准备一张图片test_image.jpg,检查一下这张原始图片的大小。

from PIL import Imageimport osimport 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 = 1high_quality = 100final_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()        img.save(buffer, 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'    img.save(output_path, 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 = 800new_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 = 300size_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”即可获取源码!


     

文章就分享到这儿,喜欢就点个吧!




推荐阅读  点击标题可跳转


ISEE小栈
没有花里胡哨,简单才是王道。
 最新文章