Python写图片格式批量处理工具!你还一张一张转格式吗?

图片格式 WebP、JPEG、PNG、SVG 及转换 在当今数字时代,图像在网页设计和应用中扮演着至关重要的角色;选择适当的图像格式直接影响着网站的加载速度、用户体验和整体性能。 阅读详情

前言

某个夜深人静的夜晚,夜微凉风微扬,月光照进我的书房~ 当我打开文件夹以回顾往事之余,惊现许多看似杂乱的无聊代码。我拍腿正坐,一个想法油然而生:“生活已然很无聊,不如再无聊些叭”。 于是,我决定开一个专题,便称之为kimol君的无聊小发明。 妙…啊~~~

就在昨天,正当我在刺激战场厮杀时,“叮叮叮”,微信来消息了。我心想:“这是肾马情况?” 我打开一看,原来是小姐姐让我帮忙处理照片~ 乐于助人的我(小声嘀咕:“我信你个鬼,坏得很”),自然是立马放下游戏,奔向助人的前线,于是:

原文地址:【kimol君的无聊小发明】-用python写图片格式批量处理工具_kimol君的博客-优快云博客 如有侵权联系小编删除

没有错~ 面对来自小姐姐的任务,kimol君自是当仍不让,打开美图秀秀,嗖嗖两下便搞定了,成功收获两颗小爱心❤️❤️~

正当我沾沾自喜的时候,小姐姐又发来一个压缩包,说是同学和闺蜜的,让我帮忙一起弄一下。我打开一看:

37张照片,我能怎么办? 我也很绝望呀…

毕竟有一颗炙热助人的心(画外音:“毕竟是小姐姐让帮忙”),不可能放着不管,但总不能一张一张的调叭,看来只能写一个小工具来批量处理了。

一、思路分析

其实,照片处理要求很简单,主要是两个方面:一个是调整图片尺寸(即宽x高),另一个是调整图片的大小(即压缩)。为了实现这两个功能,利用python中的PIL库即可,其安装方法如下:

pip install pillow

说明:PIL官方版不支持python3,不过非官方pillow可作为其替代品。 导入相关的库:

from PIL import Image

读取图片:

image = Image.open('xxx.jpg')

利用resize()函数即可对图片的尺寸进行调整:

image = image.resize((width, height))

其中width和height分别为预期调整的图片宽和图片高。

利用save()函数即可对图片进行压缩,进而调整其大小:

image.save('out.jpg', quality=60)

其中quality表示压缩的比例。

二、调整尺寸

首先一个函数,用于调整图片的尺寸:

def resize(inImage, width, height, inplace=False):
    '''
    将图片调整为指定尺寸
    ----------------------------
    参数 inImage:需要处理的图片地址
    参数   width:预期图片宽度
    参数  height:预期图片高度
    参数 inplace:是否覆盖原文件
    ----------------------------
    返回 outImage:压缩后的图片地址
    '''
    if not inplace: # 如果不覆盖
        outImage = '%s-out.%s'%(inImage.split('.')[0],inImage.split('.')[1])
    else:
        outImage = inImage
    image = Image.open(inImage)
    image = image.resize((width, height))
    image.save(outImage)
    print('"%s"调整成功!(尺寸:%dx%d)'%(inImage, width, height))
    return outImage

三、调整大小

首先定义一个函数,用于获取图片的文件大小:

def get_size(fileName):
    '''
    获取图片文件的大小(KB)
    --------------------
    参数 fileName: 文件名
    --------------------
    返回 fileSize:文件的大小
    '''
    fileSize = os.path.getsize(fileName)
    fileSize /= 1024 # 将单位转为KB
    return fileSize

然后,通过不断调整压缩比率quality,来使得图片到达指定的大小,具体过程如下:

def compress(inImage, targetSize, step=5, quality=75, inplace=False):
    '''
    将图片压缩到指定的大小
    -------------------------------
    参数    inImage:需要处理的图片地址
    参数 targetSize:预期压缩的大小
    参数       step:每次迭代的压缩比
    参数    quality:初始压缩比
    参数    inplace:是否覆盖原文件
    -------------------------------
    返回 outImage:压缩后的图片地址
    '''
    if not inplace: # 如果不覆盖
        outImage = '%s-out.%s'%(inImage.split('.')[0], inImage.split('.')[1])
    else:
        outImage = inImage
    fileSize = get_size(inImage)
    while fileSize > targetSize:
        image = Image.open(inImage)
        image.save('temp.jpg', quality=quality)
        fileSize = get_size('temp.jpg')
        quality -= step # 调整压缩比
        if quality < 0:
            print('"%s"压缩失败!(请调整step)'%inImage)
            return 
    if os.path.exists('temp.jpg'):
        copyfile('temp.jpg',outImage)
        os.remove('temp.jpg') # 移处临时文件
    print('"%s"压缩成功!(大小:%.2fKB)'%(inImage, fileSize))
    return outImage

四、整合代码

将resize()和compress()两个函数整合到一起:

def adjust(inImage, width, height, targetSize, inplace=False):
    '''
    将图片调整为指定格式(包括尺寸及大小)
    -------------------------------
    参数    inImage:需要处理的图片地址
    参数      width:预期图片宽度
    参数     height:预期图片高度
    参数 targetSize:预期压缩的大小
    参数    inplace:是否覆盖原文件
    -------------------------------
    返回 outImage:调整后的图片地址
    '''
    if not inplace: # 如果不覆盖
        outImage = '%s-out.%s'%(inImage.split('.')[0],inImage.split('.')[1])
    else:
        outImage = inImage
    resize(inImage, width, height, inplace=inplace)
    compress(outImage, targetSize, inplace=True)
    return outImage

调用方法如下:

if __name__ == '__main__':
    adjust('xxx.jpg', 600, 800, 100)

随后,通过写一个循环,将压缩包里的所有图片进行处理,便得到了预期的格式。

 

写在最后

其实,这个小工具还有许多可以完善的地方,比如针对压缩方式、图片质量、效率等等都能做一些优化。此外,当然也可以考虑做一个GUI以更加方便的操作。感兴趣的小伙伴,可以试试哦,没准哪天就有小姐姐找上门了呢~😋

我是kimol君,咋们下次再会~

后记

近期有很多朋友通过私信咨询有关Python学习问题。为便于交流,点击蓝色自己加入讨论解答资源基地


 

 

Python图片格式转换工具深度解析[附源码】 本文介绍了一款基于PyQt5和PIL(Pillow)开发的现代化图片格式转换工具,支持100+种图片格式。该项目采用分层架构设计,核心功能包括智能格式转换、多线程批量处理、配置管理和内存优化等。通过整合PIL、OpenCV和ImageMagick等库,实现了高性能的图像处理能力。GUI界面采用现代化设计,支持拖拽操作和实时进度监控。性能方面,优化后的工具在处理1000张图片(2.5GB)时可达到60文件/秒的处理速度。文章详细解析了项目的技术架构、核心算法和优化策略,为开发者提供了构建专业级图像处理应用的技 阅读详情

相关推荐

Python脚本—批量图片格式转换

使用Python的`os、sys、PIL`库完成批量图片格式转换

python_plus的博客 1832

【kimol君的无聊小发明】—用python写图片格式批量处理工具

【kimol君的无聊小发明】—用python写图片格式批量处理工具前言一、思路分析二、调整尺寸三、调整大小四、整合代码写在最后 前言 某个夜深人静的夜晚,夜微凉风微扬,月光照进我的书房~ 当我打开文件夹以回顾往事之余,惊现许多看似杂乱的无聊代码。我拍腿正坐,一个想法油然而生:“生活已然很无聊,不如再无聊些叭”。 于是,我决定开一个专题,便称之为kimol君的无聊小发明。 妙…啊~~~ 就在昨天,正当我在刺激战场厮杀时,“叮叮叮”,微信来消息了。我心想:“这是肾马情况?” 我打开一看,原来是小姐姐让我帮忙

kimol君的博客 2万+

Python :AVIF 图片与其他图片格式间的批量转换

Python :AVIF 图片与其他图片格式间的批量转换

weixin_43993310的博客 1905

python 批量处理图片文件(做到图片不变形)

对此次项目中主要涉及到的内容做下说明: 1、需要收集大量资料(包括收集不同信息和图片); 2、资料太多需要做同样的操作处理(包括修改文件名和修改图片尺寸)。 一、修改文件名 import cv2 import os from PIL import Image import xlrd import requests import logging ''' 将图片设定为指定尺寸,并且总体图片内容不变形 设定的尺寸为:750*315 ''' # image_size_h = 315

m0_52874284的博客 6184

新手向:自动化图片格式转换工具

本文介绍了一个实用的Python图片批量格式转换工具,使用Pillow库实现。该工具支持JPG、PNG、BMP、WebP等格式互转,可设置输出质量,自动处理RGB模式转换。文章详细解析了代码实现,包括文件夹遍历、格式检查、转换保存等核心功能,并提供了使用方法和扩展建议。该脚本适合需要统一管理图片格式或减小文件体积的场景,具有简单易用、批量处理的特点。

这个人的博客 2505

python 批量处理图片程序

如果需要源代码,请留言 功能:自动循环访问文件夹内图片文件,获取exit信息并保存至excel,图片重命名

哄女朋友神器来了,python教你怎么把女朋友无数张图片合成一张图

千图成像:用N张图片拼凑成一张图片。 实现原理:先将所要成像的图片转化成马赛克图片,然后从图库中用对应颜色的图片替换相应色块。 图库中的图片处理:标记图库中每张图片的混合颜色,用于替换目标色块,并记录每张图片的特征用于成像,增加成像质量。 0,起源 很久前在刷微博的时候看到了这条,被他给震撼到了,图片是由LOL近千张皮肤图片组合构成的(难道这是用ps做的,还是一张张拼的,应该不可能吧),就在昨天突然就想起了这个事,就决定也做一个,随即便展开了行动。搜到了这篇文章,看了下图片的构成,决定先取得所有皮肤的

Ugyfyv的博客 1928

雷达信号处理DDC数字下变频

由于接收到的雷达信号频率较高,不能对其进行直接采样并数据处理,所以需要对雷达信号进行预处理,在降低其采样率的同时,将其由中频降低到低频,然后对输出的基带信号进行后续的解析,以便于获取雷达信号的特征参数。 本文采用数字正交下变频,将单通道信号转化为正交双通道信号,数字下变频(DDC)的原型为模拟下变频,通过对窄带雷达信号或单频信号进行数字混频,然后对信号进行正交采样,提取 I、Q 两路正交分量,最后通过滤波去除信号中的高频分量,将信号由中高频搬移至低频。 模拟下变频的系统框图如下: 其数学推导.

qq_44033461的博客 5227

python画女朋友照片_Python中使用turtle库画与女朋友纪念日-Go语言中文社区

纪念日小礼物import turtle, timedef drawGap(): #绘制数码管间隔turtle.penup()turtle.fd(5)def drawLine(draw): #绘制单段数码管drawGap()turtle.pendown() if draw else turtle.penup()turtle.fd(40)drawGap()turtle.right(90)def d...

weixin_42391485的博客 904

WSL2 Ubuntu复现FoundationPose项目(docker)

复现一个基于深度学习的物体姿态估计框架FoundationPose项目,使用docker,WSL2

woaidawangwang的博客 2000

ptrade量化策略之沪深300指数增强

本策略的核心是在沪深300股票池中选股,选择的股票都是市值比较大,业绩比较好的白马股,根据市场相对位置以及基本面因子来选择股票

qq_29301281的博客 1190

重温Faster RCNN算法(1)--原理

原文:http://www.telesens.co/2018/03/11/object-detection-and-classification-using-r-cnns/ 在这篇文章中,我将详细描述VGG16 的 R-CNN(Regions with CNN features),最近引入的基于深度学习的目标检测和分类方法是如何工作的。事实证明,R-CNN在自然图像中检测和分类对象方面非常有效,其...

The space of Shining 1055

114.Android简单的动态切换app的图标,两种方式

- 默认的图标-->-- 需要切换的图标-->android:label="短信"-- 默认activity-->

曹二少的博客 5572

max格式转obj小工具_Python写图片格式批量处理工具!你还一张一张转格式吗?

原标题:Python写图片格式批量处理工具!你还一张一张转格式吗?前言 某个夜深人静的夜晚,夜微凉风微扬,月光照进我的书房~当我打开文件夹以回顾往事之余,惊现许多看似杂乱的无聊代码。我拍腿正坐,一个想法油然而生:“生活已然很无聊,不如再无聊些叭”。于是,我决定开一个专题,便称之为kimol君的无聊小发明。妙…啊~~~ 就在昨天,正当我在刺激战场厮杀时,“叮叮叮”,微信来消息了。我心想:...

weixin_39726697的博客 315

LilyPad三色LED共阳极控制:从原理到Arduino编程实战

RGB LED作为可编程光源的核心组件,通过红、绿、蓝三原色的加色混合原理,能够生成丰富的色彩。其内部结构主要分为共阳极和共阴极两种类型,这决定了驱动电路的设计和编程逻辑。在电子织物和可穿戴设备领域,掌握RGB LED的控制技术对于实现动态光效和交互反馈至关重要。本文以LilyPad三色LED为例,深入解析其共阳极特性,并详细演示如何结合Arduino进行PWM编程,从而精准控制颜色与亮度,为智能服装、互动艺术装置等项目提供可靠的照明解决方案。

weixin_30237719的博客 603

SOME/IP协议详解「总目录」

SOME/IP系列文章总目录

雪云飞星的博客 2万+

jpg图片转base64 python_Python写图片格式批量处理工具!你还一张一张转格式吗?...

前言某个夜深人静的夜晚,夜微凉风微扬,月光照进我的书房~当我打开文件夹以回顾往事之余,惊现许多看似杂乱的无聊代码。我拍腿正坐,一个想法油然而生:“生活已然很无聊,不如再无聊些叭”。于是,我决定开一个专题,便称之为kimol君的无聊小发明。妙…啊~~~就在昨天,正当我在刺激战场厮杀时,“叮叮叮”,微信来消息了。我心想:“这是肾马情况?” 我打开一看,原来是小姐姐让我帮忙处理照片~ 乐于助人的我(小声...

weixin_39814378的博客 98

RK3568平台开发系列讲解(DMA篇)DMA engine使用

DMA传输属于异步传输,在启动传输之前,slave driver需要将此次传输的一些信息(例如src/dst的buffer、传输的方向等)提交给dma engine(本质上是dma controller driver),dma engine确认okay后,返回一个描述符(由struct dma_async_tx_descriptor抽象)。DMA_PREP_PQ_DISABLE_P、DMA_PREP_PQ_DISABLE_Q、DMA_PREP_CONTINUE,PQ有关的操作,TODO。

内核笔记 1723

python实现批量图片格式转换

本文重点介绍普通图片格式怎么相互转换,如jpg格式图片怎么批量转化为png格式。在深度学习项目中,有时我们收集到的数据集图片格式不统一,有的代码支持多种格式图片输入,有的则只支持个别格式,所以这时,我们需要通过脚本来转换图片格式。不说废话,直接上代码。提示:以下是本篇文章正文内容,下面案例可供参考以上就是今天要讲的内容,脚本超级好用,学好python,大大提高工作效率!

实力派,无需多言! 6812

华为OD机试双机位C卷-恢复数字序列 (Py/Java/C/C++/Js/Go)

华为OD机试双机位C卷 恢复数字序列,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解。华为OD机试 - 恢复数字序列。

qq_45776114的博客 1203

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

11.图片格式批量转换器

编程基础第一期《11-30》-- 在图像处理工作中,我们经常需要将大量图片从一种格式转换为另一种格式。本教程将介绍如何使用Python的Pillow库开发一个简单但功能强大的图片格式批量转换器,帮助你高效处理图片格式转换任务。Pillow库的基本使用文件系统操作命令行参数解析GUI界面开发批处理和异常处理图像处理基础知识物物而不物于物,念念而不念于念。

笨笨轻松熊的博客 1214

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

关于图片格式转换(png、jpg转tif)

关于图片格式转换(png、jpg转tif) 看来网上很多文章,图片格式的转换有opencv库和PIL库,由于只是简单对图像进行格式转换,所以选择了PIL库(Pillow支持最新的3.x版本)进行相应的转换工作。相比之下,PIL库更加方便快捷。 简介 PIL(Python Image Library)是python的第三方图像处理库,但是由于其强大的功能与众多的使用人数,几乎已经被认为是python...

Soul_taker的博客 1万+

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

上一篇: Python十大装B语法!你会几种?
下一篇: 你不一定全知道的四种Python装饰器实现详解!
pythonlaodi
博客等级 码龄6年 286粉丝 244原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值