3行Python 代码实现图片压缩

简介: 但是在提交图片的时候,有些网站总是会提醒我你的图片文件过大,请提交不超过 2 MB大小的图片、


最近因为工作,经常需要在网站提交一些文件和图片

但是在提交图片的时候,有些网站总是会提醒我你的图片文件过大,请提交不超过 2 MB大小的图片、

想想也正常,不限制图片大小容易被塞爆服务器,但是我手机这1亿像素的照片让我很难办呀

而且在线压缩的网站也有上限大小,不然就收费,不然就收费,不然就收费image.png

这种简单功能我要是还付费,岂不是丢了pythoner的face了吗?!我把它实现了我也去上线~

1原理

仔细分析了一下,图片压缩的原理其实很简单

简单来说,像素图片过大的原因不就是像素格太多了嘛

只要读取所有像素,按规律删掉或者合并像素格,图片的就变小了

当然也要区别有损和无损的情况,只要视觉上过的去,那就没什么问题

2代码块

简单压缩

下面三行代码完成了图片从 9 MB到 327.65 KB 的压缩效果

只需要使用PIL导入图片,再按照压缩率保存就可以了

下面这张结果图,显然压缩过到我都认出来的情况

from PIL import Image
im = Image.open("pic/cat.jpg")
# 保存,quality是压缩比率
im.save("cat-out2.jpg", quality=1) 

image.png进阶压缩

进一步修改压缩的代码,可以设定压缩图片的目标大小

然后使用循环来迭代完成目标,最后封装成函数,未来就可以批量压缩图片了

def compress_image(infile, outfile='', mb=1500, step=10, quality=80):
    """不改变图片尺寸压缩到指定大小
    :param infile: 压缩源文件
    :param outfile: 压缩文件保存地址
    :param mb: 压缩目标,KB
    :param step: 每次调整的压缩比率
    :param quality: 初始压缩比率
    :return: 压缩文件地址,压缩文件大小
    """
    o_size = os.path.getsize(file)/1024
    if o_size <= mb:
        return infile
    outfile = get_outfile(infile, outfile)
    while o_size > mb:
        im = Image.open(infile)
        im.save(outfile, quality=quality)
        if quality - step < 0:
            break
        quality -= step
        o_size = get_size(outfile)
    return outfile, get_size(outfile)

像这样从9 MB 压缩到 1.47 MB,肉眼也是看不出来有什么明显差别,妥妥可以提交到网站上了image.png

3最后

虽然说,程序员不必要去重复造轮子

但是想想有多少人上传自己的身份证、毕业证等文件到这些在线平台进行图片压缩

如果这些在线网站将个人信息的相关图片都保存下来,日后加以利用,我的小爱语音助手可能接不过来电话了image.png

居然还聊起来了

所以说,对于个人信息安全还是需要保持谨慎

我是一行,技术用不眠,我们下期见~



相关文章
|
1天前
|
监控 Python
Python中的装饰器:提升代码灵活性和可维护性
在Python编程中,装饰器是一种强大的工具,可以提高代码的灵活性和可维护性。本文将深入探讨装饰器的概念、用法和实际应用,帮助读者更好地理解并运用装饰器来优化自己的Python代码。
|
2天前
|
算法 Java 编译器
优化Python代码性能的实用技巧
提高Python代码性能是每个开发者的关注焦点之一。本文将介绍一些实用的技巧和方法,帮助开发者优化他们的Python代码,提升程序的执行效率和性能。
|
4天前
|
Python
Python中的装饰器:提升代码可读性与复用性
Python中的装饰器是一种强大的工具,能够提升代码的可读性和复用性。本文将深入探讨装饰器的原理、用法以及在实际项目中的应用,帮助读者更好地理解和利用这一特性,提升代码质量和开发效率。
|
5天前
|
监控 Python
Python中的装饰器:提升代码可读性与可维护性
Python中的装饰器是一种强大的工具,可以在不修改函数源代码的情况下,增加新的功能。本文将介绍装饰器的基本概念,以及如何使用装饰器来提升代码的可读性和可维护性。通过实例演示,读者将了解装饰器在各种场景下的灵活运用,从而更好地理解并应用于实际开发中。
|
5天前
|
缓存 Python
Python中的装饰器:提升代码可读性与灵活性
在Python编程中,装饰器是一种强大的工具,可以通过在函数或方法周围包装额外的功能来提升代码的可读性和灵活性。本文将深入探讨装饰器的概念、用法和实际应用,帮助读者更好地理解并运用这一Python编程的利器。
|
6天前
|
缓存 并行计算 Serverless
优化Python代码性能的5个技巧
在日常Python编程中,代码性能的优化是一个重要的议题。本文介绍了5个实用的技巧,帮助你提高Python代码的执行效率,包括使用适当的数据结构、优化循环结构、利用内置函数、使用生成器表达式以及并行化处理。通过这些技巧,你可以更高效地编写Python代码,提升程序的性能和响应速度。
|
7天前
|
Python
探索Python中的装饰器:提升代码灵活性与可维护性
Python中的装饰器是一种强大的工具,可以在不改变原有代码结构的情况下,动态地添加功能或修改函数的行为。本文将深入探讨装饰器的原理、常见用法以及如何利用装饰器提升代码的灵活性和可维护性。
|
8天前
|
机器学习/深度学习 自然语言处理 算法
Python遗传算法GA对长短期记忆LSTM深度学习模型超参数调优分析司机数据|附数据代码
Python遗传算法GA对长短期记忆LSTM深度学习模型超参数调优分析司机数据|附数据代码
|
8天前
|
SQL API 数据库
在Python中获取筛选后的SQL数据行数
在Python中获取筛选后的SQL数据行数
19 1
|
8天前
|
数据可视化 Python
python中Copula在多元联合分布建模可视化2实例合集|附数据代码
python中Copula在多元联合分布建模可视化2实例合集|附数据代码