Python图片压缩处理

前言

不知道有没有人跟我有一样的烦恼,有时候图片太大了占内存很烦,本来手机内存也就那么点,放一个图片稍微大一点的,都不

能放一个成百上千张,这不是很烦嘛。于是,这又让我来灵感了,既然图片给了我难题,那么我就来接受这样的挑战。所以,我

决定用python来试试可不可以压缩图片,不是不知道,一试就成功了,那么好的东西怎么能一个人独享呢,当然要分享出来给大

家呀~~~

python学习交流Q群:906715085###
dynamic_quality.py
import PIL.Image
from math import log
from SSIM_PIL import compare_ssim
# pip install SSIM-PIL
from PIL import ImageFile
ImageFile.LOAD_TRUNCATED_IMAGES = True

def get_ssim_at_quality(photo, quality):  
"""
Return the ssim for this JPEG image saved at the specified quality
"""    
ssim_photo = "tmp.jpg"    
# optimize is omitted here as it doesn't affect    
# quality but requires additional memory and cpu    
photo.save(ssim_photo, format="JPEG", quality=quality, progressive=True)    
ssim_score = compare_ssim(photo, PIL.Image.open(ssim_photo))    
return ssim_score

def _ssim_iteration_count(lo, hi):    
"""
Return the depth of the binary search tree for this range
"""    
if lo >= hi:        
return 0    
else:        
return int(log(hi - lo, 2)) + 1

def jpeg_dynamic_quality(original_photo):    
"""
Return an integer representing the quality that this JPEG image should be    
saved at to attain the quality threshold specified for this photo class.
    Args:        
original_photo - a prepared PIL JPEG image (only JPEG is supported)    
"""    
ssim_goal = 0.9 #the original value is 0.95    
hi = 35 #the original value is 85    
lo = 30 #the original value is 80
# working on a smaller size image doesn't give worse results but is faster    
# changing this value requires updating the calculated thresholds    
photo = original_photo.resize((200, 200))
# if not _should_use_dynamic_quality():    
#     default_ssim = get_ssim_at_quality(photo, hi)    
#     return hi, default_ssim
# 95 is the highest useful value for JPEG. Higher values cause different behavior    
# Used to establish the image's intrinsic ssim without encoder artifacts    normalized_ssim = get_ssim_at_quality(photo, 10)    
selected_quality = selected_ssim = None
# loop bisection. ssim function increases monotonically so this will converge    for i in range(_ssim_iteration_count(lo, hi)):        
curr_quality = (lo + hi) // 2        
curr_ssim = get_ssim_at_quality(photo, curr_quality)        
ssim_ratio = curr_ssim / normalized_ssim
if ssim_ratio >= ssim_goal:            
# continue to check whether a lower quality level also exceeds the goal            selected_quality = curr_quality            
selected_ssim = curr_ssim            
hi = curr_quality        
else:            
lo = curr_quality
if selected_quality:        
return selected_quality, selected_ssim    
else:        
default_ssim = get_ssim_at_quality(photo, hi)        
return hi, default_ssim

 

test.py

from PIL 
import Image
from dynamic_quality import *
def compress(filename,originpath,targetpath):    
name = filename.rstrip('.png').rstrip('.jpg')    
im = Image.open(originpath+filename)    
# print(im.format,im.size,im.mode)    
im = im.convert('RGB')    
im.format = "JPEG"    
new_photo = im.copy()    
new_photo.thumbnail(im.size,resample=Image.ANTIALIAS)    
save_args = {'format':im.format}    
# print(save_args)    
# if im.format=='JPEG':    
# save_args['quality']=20    save_args['quality'],value=jpeg_dynamic_quality(im)    save_args['optimize']=True    
save_args['progressive=True']=True    
# print("JPEG Quality Changed")    
# elif im.format=='PNG':    
#     save_args['format']='JPEG'    
#     save_args['quality']=5    
#     print("PNG Quality Changed")    new_photo.save(targetpath+name+".jpg",**save_args)
if __name__ == '__main__':   
 import os   
 originpath = "D:\\images\\img\\"    
 # 需要压缩图片路径    targetpath = "D:\\images\\dangdang_image\\"   
 # 压缩完图片路径    for root, dirs, files in os.walk(originpath):        
 for file in files:            
 compress(file,originpath,targetpath)

 

最后

今天教大家的图片压缩到这里就结束了,喜欢的小伙伴记得点赞收藏。你不支持我,怎么能第一时间找到我,关于这篇文章有不

懂的地方可以评论留言哟!!我看到都会第一时间回复的,这一篇到这里就有翻过去了,下一章见啦~~
在这里插入图片描述

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python图片压缩处理 - Python技术站

(0)
上一篇 2023年4月2日
下一篇 2023年4月2日

相关文章

  • Python实战项目7个有趣的小游戏

    每天都会分享几个有趣的Python小知识,现在给大家分享几个适合新手练习的小项目,好玩不烧脑,提升技能不在话下。等会就叫你的室友跟你一起VS,轻轻松松成为卷王。 但是问题有三个: 1、你不知道已经有哪些轮子已经造好了,哪个适合你用。有名有姓的的著名轮子就400多个,更别说没名没姓自己在制造中的轮子。 2、确实没重复造轮子,但是在重复制造汽车。包括好多大神写的…

    Python开发 2023年4月2日
    00
  • 【Python】爱不释手的弹球小游戏

    前言 周末到了,不想给大家太多的压力,今天就给大家分享一个比较简单的弹球小游戏吧。这无聊的周末又有事可以做了,nice… 先看一下我们的最终效果图 我们分9步来讲解如何写这个小游戏 1.创建游戏的主界面 我们用Python的内置模块Tkinter来完成了,它是Python的标准GUI工具包,可以非常方便在制作GUI小工具,因为是跨平台的,可以方便的在 win…

    Python开发 2023年4月2日
    00
  • Python 最有用的25个代码段

    前言 Python是一种通用的高级编程语言。用它可以做许多事,比如开发桌面 GUI 应用程序、网站和 Web 应用程序等。 作为一种高级编程语言,Python 还可以让你通过处理常见的编程任务来专注应用程序的核心功能。并且,编程语言的简单语法规 则进一步简化了代码库的可读性和应用程序的可维护性。 与其他编程语言相比,Python 的优势在于: 1.与主要平台…

    Python开发 2023年4月2日
    00
  • 用Python制作销售数据可视化看板,展示分析一步到位

    前言 在数据时代,销售数据分析的重要性已无需赘言。 只有对销售数据的准确分析我们才有可能找准数据变动(增长或下滑)的原因。 然后解决问题、发现新的增长点才会成为可能! 今天就给大家介绍一个用Python制作销售数据大屏的方法。 主要使用Python的Streamlit库、Plotly库、Pandas库进行搭建。 其中Pandas处理数据,Plotly制作可视…

    Python开发 2023年4月2日
    00
  • 5 个方便好用的 Python 自动化脚本,拿来就用

    前言 相比大家都听过自动化生产线、自动化办公等词汇,在没有人工干预的情况下,机器可以自己完成各项任务,这大大提升了工作 效率。 编程世界里有各种各样的自动化脚本,来完成不同的任务。 尤其Python非常适合编写自动化脚本,因为它语法简洁易懂,而且有丰富的第三方工具库。 这次我们使用Python来实现几个自动化场景,或许可以用到你的工作中。 1、自动化阅读网页…

    Python开发 2023年4月2日
    00
  • Python 视频制作神器 — Manim入门篇

    今天分享一篇文章,是关于如何使用 Manim 这个工具 Python 工具库来制作视频的。 据我所知,目前应该是没有专门的书籍和教程来介绍这个工具的。至于教程,不同版本的Manim有一部分文档,其中 Manim社区 版的文档相对而言要完善些。 本次仅介绍 Manim 中 文本 的使用,使用的版本为 Manim Community v0.14.0,本文内容主要…

    Python开发 2023年4月2日
    00
  • Python 实现校园网自动登录

    背景 我在的学校校园网登录是web式的,即随便打开一个网页就会自动跳转到登录页面,然后输入用户名密码,点登录,便可以上网了。 但这种登录方式有个缺点:登录状态不会一直保持下去。即过一段时间就会掉线,然后你需要重新登陆才行。这个时间大概是一天。 这就蛋疼了,想让实验室的电脑随时保持联网状态怎么办呢?(有时候我需要远程我的电脑) 这个时候可以用python脚本解…

    Python开发 2023年4月2日
    00
  • 【Python+Selenium】 实现对excel文件的读写操作,轻轻松松一步到位

    前言 利用selenium在做自动化测试的时候,经常会用到数据来做批量测试,常用的方式有读取txt文件,xml文件,csv文件以及excel文 件几种。 使用 excel 来做数据管理时,需要利用 xlrd、xlwt 开源包来读写 excel。 1、安装xlrd、xlwt pip install xlrd pip install xlwt   2、对exce…

    Python开发 2023年4月2日
    00
合作推广
合作推广
分享本页
返回顶部