python 批处理压缩图片

        巧合之下,需要一个能够批处理压缩图片的程序来帮我的私人图库做一个压缩。在网上找了一些软件,但是都没有遇到合适的(或者免费的bushi),于是想到能不能用自己拙劣的python写个小程序呢?

        于是在网上搜寻处理图片的库,然后找他们的compress,可是结果是一大堆的resize,要是有哪位好心人可以给我介绍下两者的区别或者compress的合适的库,不胜感激啊(~ ̄▽ ̄)~

         所以没错,下面的就是用pillow的resize里滤波采样的那个参数弄的伪压缩,opencv和numpy里也是有这个参数的,因为这个比较顺手,就用了这个,所以诶~别跑啊~大人!!

        那下面就开始咯

import os
from PIL import Image

首先引用两个库,os是读取文件目录用的,pillow就是主角啦,处理图片,然后捏就是这样啦

def compress_pic(src_file,save_file,choice):
    fileName = os.listdir(src_file)
    print(fileName)

    # # 如果目录不存在,则创建目录
    # if not os.path.exists('D:/PycharmProjects/pythonProject4/images/'):
    #     os.mkdir('D:/PycharmProjects/pythonProject4/images/')    #目录记得是/的,复制过来的要改下
    # # 循环读取每一张图片
    for img in fileName:
        old_pic = Image.open(src_file + '/' + img)
        print(old_pic.size)
        if choice == '方式一':
            new_image = old_pic.resize(old_pic.size, Image.BICUBIC)#两种采样方式二选一,下面的会更加高质量,内存稍大
        else:
            new_image = old_pic.resize(old_pic.size,Image.ANTIALIAS)#第一个参数是元组(宽,高),也可以用获得size的方式来获取等比例缩小或者原图
        print (new_image)
        # os.mkdir('D:/PycharmProjects/pythonProject4/Newimage01/')
        new_image.save(save_file + '/' + img)
        # new_image.save('D:/PycharmProjects/pythonProject4/newhigh/'+img)d定义

定义一个函数compress_pic,至于为什么要用函数,其实 类也可以,但这里程序比较少内容,所以就直接用了,另外,待会还得做个小GUI来方便其他人用这个程序

三个参数 src_file,save_file,choice  分别为 要处理的图库所在的文件夹,压缩后要保存的文件夹所在位置(要提前建立,当然程序里也可以改成如果没有就帮建),压缩方式的选择(一二都可以,区别没感觉)另外想说的是,  这里是可以资源管理器直接打开然后复制到我们的窗口里面的,路径里的“/”“\”会在程序里处理。

然后是我们的GUI程序,我选择了最简单的pysimplegui,人如其名好吧。

import main
import PySimpleGUI as sg

sg.theme('BluePurple')

# 定义窗口的布局
layout = [  [sg.Text('输入你需要修改的照片的文件夹位置,复制粘贴下来即可,如D:\image'),sg.InputText()],
            [sg.Text('输入你需要修改的照片的保存的文件夹位置(需要提前新建哦)'), sg.InputText()],
            [sg.Text('输入你要的压缩方式,如‘方式一’或者‘方式二’,不要输入引号,前者压缩质量高,后者差点'), sg.InputText()],
            # sg.Combo(
            #         ['选项一,高质量', '选项二,较差'],
            #         default_value='选项一',
            #         size=(10, 1)),  #TODO 用不了combo 解释器没有全局设置,未解决
            [sg.Button('Ok'), sg.Button('Cancel')] ]

# 创建展示窗口
window = sg.Window('图像批处理', layout)




# 事件循环并获取输入值
while True:
    event, values = window.read()
    if event in (None, 'Cancel'):
        break
    # print('You entered ', type(values[0].replace('\\','/')))     #修改路径用的
    # print('You entered ', values[0].replace('\\','/'))     #修改路径用的
    src_file = values[0].replace('\\','/')
    save_file = values[1].replace('\\','/')
    # sg.popup('You entered',  values[0].replace('\\','/'))
    # #todo 弹出窗口确认未设置
    choice = values[2]
    main.compress_pic(src_file,save_file,choice)

window.close()

 

基本就这样,不难读懂,然后还有几个TODO未解决,搞定的小伙伴一定要让我康康哦( ͡• ͜ʖ ͡• ) 

然后,接下来就是封装成exe文件,让你那没有朋友的技术,哦不是,没有技术的朋友,没有环境的电脑也能使用这个程序,在 pycharm的terminal输入下面的命令行

 pyinstaller -F -w windows.py -n compress -p main.py

然后就生成一个exe啦,可以发给你的小伙伴了,另外可能要管理员权限,或者文件夹用D盘的 

效果如下

 

 两个程序补在下面

main.py
import os
from PIL import Image

def compress_pic(src_file,save_file,choice):
    fileName = os.listdir(src_file)
    print(fileName)

    # 如果目录不存在,则创建目录
    if not os.path.exists('D:/PycharmProjects/pythonProject4/images/'):
        os.mkdir('D:/PycharmProjects/pythonProject4/images/')    #目录记得是/的,复制过来的要改下
    # 循环读取每一张图片
    for img in fileName:
        old_pic = Image.open(src_file + '/' + img)
        print(old_pic.size)
        if choice == '方式一':
            new_image = old_pic.resize(old_pic.size, Image.BICUBIC)#两种采样方式二选一,下面的会更加高质量,内存稍大
        else:
            new_image = old_pic.resize(old_pic.size,Image.ANTIALIAS)#第一个参数是元组(宽,高),也可以用获得size的方式来获取等比例缩小或者原图
        print (new_image)
        new_image.save(save_file + '/' + img)

 

import main
import PySimpleGUI as sg

sg.theme('BluePurple')

# 定义窗口的布局
layout = [  [sg.Text('输入你需要修改的照片的文件夹位置,复制粘贴下来即可,如D:\image'),sg.InputText()],
            [sg.Text('输入你需要修改的照片的保存的文件夹位置(需要提前新建哦)'), sg.InputText()],
            [sg.Text('输入你要的压缩方式,如‘方式一’或者‘方式二’,不要输入引号,前者压缩质量高,后者差点'), sg.InputText()],
            # sg.Combo(
            #         ['选项一,高质量', '选项二,较差'],
            #         default_value='选项一',
            #         size=(10, 1)),  #TODO 用不了combo 解释器没有全局设置,未解决
            [sg.Button('Ok'), sg.Button('Cancel')] ]

# 创建展示窗口
window = sg.Window('图像批处理', layout)

# 事件循环并获取输入值
while True:
    event, values = window.read()
    if event in (None, 'Cancel'):
        break
    src_file = values[0].replace('\\','/')
    save_file = values[1].replace('\\','/')
    choice = values[2]
    main.compress_pic(src_file,save_file,choice)

window.close()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值