吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

搜索
查看: 3631|回复: 74

[原创工具] Python练习小工具——照片压缩及自定义尺寸更改

  [复制链接]
似水流年2015 发表于 2020-8-23 13:03
本帖最后由 似水流年2015 于 2020-8-23 15:30 编辑

Clipboard_20200823.png

功能及使用如下:
1.点击按钮《选择照片路径》,在弹出的窗口中,按着ctrl多选照片,或者直接ctrl+a全选照片。
2.在界面的输入框中,输入要压缩的百分比数值  或 修改尺寸数值(例如高100  宽30)
3.按需点击按钮《尺寸输出保存》 或 点击按钮《压缩输出保存》
4.在弹出的保存窗口中,选择要保存到哪个文件夹,选择完要保存的文件夹后,稍等片刻,压缩或尺寸更改完毕,会自动弹出保存的文件夹窗口。

0823 15:28分修改了一下:

1.楼下有朋友评论说只能更改正方形尺寸,没鸟用,想想有道理,就改成了自定义高和宽度!
2.另外有朋友评论说运行时先弹出命令窗口,再弹出窗体,被吓到怕有毒,百度查了一下,在打包命令后面加上--noconsole 就可以在运行时,不出现黑窗口了。


完整打包命令为:pyinstaller -F -i 01.ico 01.py  --noconsole
其中-i为增加图标命令,图标名为当前打包目录下的01.ico文件   01.py是源码文件。--noconsole 顾名思义,不要输出的意思,也就是运行时只显示窗体,不显示黑色的cmd命令窗口


重新打包了exe文件:https://www.lanzoux.com/iGuQmfypjsb



源码在下面:注释比较详细,新手可以试试练习一下

[Asm] 纯文本查看 复制代码
#先声明,以下注释只是按个人理解写的,别杠,咋样方便记忆就咋样理解,初学者别深究,我只是个菜鸟,说深奥了我也不懂,何必自寻烦恼,影响自学的动力呢。

from PIL import Image as img
from tkinter import filedialog,Tk,Listbox,Button,BOTH,StringVar,Label,Entry,END
from os import startfile

#定义一个字典,里面含有路径列表,之所以定义字典,是因为可以在局部里直接调用,如果定义空列表,还需要在方法里加声明 gloal
Files_Names={
    "path":[]
}

def win_soft():  #画各类控件
    app=Tk()    #画主窗口
    app.title("照片压缩")  #设置主窗口标题

    Label(app,text="照片压缩及剪裁",font=("微软雅黑",25,"bold")).pack()  #画标签并设置显示的文字,字体,加粗
    Listbox(app,name='l_b',bg="#f2f2f2",fg="red").pack(fill=BOTH,expand=True)  #画列表框并指定名字,方便后续根据名字调用获取Listbox实例,指定背景,前景,显示方式
    Button(app,text="选择照片路径",command=ui_update).pack(fill=BOTH) #command指定了当按下按钮,会调用哪个方法

    Label(app, text="尺寸大小:自定义任意尺寸", font=("微软雅黑", 10)).pack(fill=BOTH, expand=True)
    defaul_val = StringVar(value='80')   #创建一个StringVar类型的值,值是80
    Entry(app,textvariable=defaul_val,name="scr_input_h").pack(fill=BOTH,expand=True)  #textvariable只接收StringVar类型的值,所以这里传入上面的StringVar类型值,当成默认值
    defaul_val = StringVar(value='80')   #创建一个StringVar类型的值,值是80
    Entry(app,textvariable=defaul_val,name="scr_input_w").pack(fill=BOTH,expand=True)  #textvariable只接收StringVar类型的值,所以这里传入上面的StringVar类型值,当成默认值
    #app.resizable(width=False, height=False)  设置窗体是否可以改变
    Button(app, text="尺寸输出保存", command=scer_img).pack(fill=BOTH)  # left


    Label(app, text="压缩百分比:0~95", font=("微软雅黑", 10)).pack(fill=BOTH, expand=True)
    defaul_val = StringVar(value='60')
    Entry(app,textvariable=defaul_val,name="ys_input").pack(fill=BOTH,expand=True)
    Button(app, text="压缩输出保存",command=compress).pack(fill=BOTH)  #left

    app_width=300      #设置窗口宽度
    app_height=500     #设置窗口高度
    win_width=int((app.winfo_screenwidth()-app_width)/2)          #设置窗口距离左上角原点的 宽度  屏幕总宽度-软件窗口宽度  再除2,即软件距离左侧窗口的宽度  转为整数,因为下面geometry只接受字符串型整数
    win_height=int((app.winfo_screenheight()-app_height)/2)       #设置窗口距离左上角原点的 高度  屏幕总宽度-软件窗口高度  再除2,即软件距离顶边的高度  转为整数,因为下面geometry只接受字符串型整数
    app.geometry("%sx%s+%s+%s"%(app_width,app_height,win_width,win_height))  #设置窗口显示的宽高度 及 距离原点的长宽度
    return app  #把创建好的实例对象返回主程序,其中在各控件里加app,意思为绑定主窗口,届时可以用 app.children["name"]  来调用。

def ui_update():
    file_names = filedialog.askopenfilenames()  # 返回选择的文件夹里的文件路径 列表
    if file_names!="":                     #只要选择的文件夹路径不为空
        Files_Names["path"]=file_names    #完整的照片路径赋值给 全局变量
        list_box=a.children["l_b"]    #读取出列表框对象
        list_box.delete(0,END)        #对象调用删除全部列表框
        for i in file_names:
            list_box.insert(END,i.split("/")[-1])   #循环插入文件名到列表框

def compress():
    file_names_new=filedialog.askdirectory()   # 返回选择的保存图片的文件路径 列表
    if file_names_new!="":           #只要选择的文件夹路径不为空
        for i in Files_Names["path"]:     #读取出全局变量里的照片路径
            img_byte=img.open(i)         #根据照片路径循环打开要压缩的照片
            img_byte.save(file_names_new+"/new_"+i.split("/")[-1],quality=a.children["ys_input"].get()) #压缩另存到新路径
        startfile(file_names_new)  #完成后自动打开 压缩图片所在的文件夹

def scer_img():
    file_names_new=filedialog.askdirectory()    # 返回选择的保存图片的文件路径 列表
    if file_names_new!="":            #只要选择的文件夹路径不为空
        for i in Files_Names["path"]:     #读取出全局变量里的照片路径
            img_byte = img.open(i)        #根据照片路径循环打开要压缩的照片
            s_h=int(a.children["scr_input_h"].get())     #获取到要保存的尺寸高度
            s_w=int(a.children["scr_input_w"].get())  # 获取到要保存的尺寸宽度
            str_file_name=("%s/new_%sx%s_%s")%(file_names_new,str(s_h),str(s_w),i.split("/")[-1]) #保存的图片路径
            img_byte.resize((s_w,s_h)).save(str_file_name)  #用resize方法保存图片,即为裁剪后的。
        startfile(file_names_new)  # 完成后自动打开 压缩图片所在的文件夹

a=win_soft()  #返回创建完所有控制的实例
a.mainloop()  #循环等待所有控制的消息,另外这个不调用,整个窗体也不会显示

免费评分

参与人数 25吾爱币 +31 热心值 +20 收起 理由
ASP0000 + 1 + 1 谢谢@Thanks!
这孩纸真逗 + 1 + 1 谢谢@Thanks!
ssk148150105 + 1 我很赞同!
ablepolet + 2 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
南极昼夜 + 1 热心回复!
咋瓦路多 + 1 用心讨论,共获提升!
xinren4081 + 1 + 1 鼓励转贴优秀软件安全工具和文档!
拍砖转用ID + 1 + 1 谢谢@Thanks!
yulechan + 1 + 1 谢谢@Thanks!
bullshit + 1 + 1 谢谢@Thanks!
zb848 + 1 + 1 谢谢@Thanks!
断章 + 1 + 1 我很赞同!
lybsanbai-2020 + 1 + 1 谢谢@Thanks!
lzy13 + 1 + 1 谢谢@Thanks!
张伯伦 + 1 + 1 我很赞同!
aqiyue + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
yanglinman + 1 谢谢@Thanks!
UPC + 1 + 1 谢谢@Thanks!
shroer + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
时流 + 1 + 1 用心讨论,共获提升!
GXW1693 + 1 热心回复!
RongJ + 1 + 1 感谢您的宝贵建议,我们会努力争取做得更好!
风之暇想 + 7 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
miqi1314 + 1 + 1 我很赞同!
Alex27933 + 1 用心讨论,共获提升!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| 似水流年2015 发表于 2020-8-23 13:56
旋风中的小聪明 发表于 2020-8-23 13:14
试了一下还可以,不过这个cmd窗口弹出真的把我吓到了(昨天刚被 start dos整过)

好像打包时,有一个指令,能禁止cmd窗口显示,只显示窗体。。。下次再弄练手小工具时,查一下如何使用,解决黑窗口的出现。
 楼主| 似水流年2015 发表于 2020-8-23 15:30
旋风中的小聪明 发表于 2020-8-23 13:14
试了一下还可以,不过这个cmd窗口弹出真的把我吓到了(昨天刚被 start dos整过)

修改了,重新上传,已经禁止命令窗口的出现
miqi1314 发表于 2020-8-23 13:06
Alex27933 发表于 2020-8-23 13:08
向大佬学习,我也会点Python,但是绝对做不到像楼主的水平
mingrq 发表于 2020-8-23 13:09
先留着,谢谢分享!
 楼主| 似水流年2015 发表于 2020-8-23 13:12
Alex27933 发表于 2020-8-23 13:08
向大佬学习,我也会点Python,但是绝对做不到像楼主的水平

夸奖了,我是对着网上视频教程,学习来写的。
旋风中的小聪明 发表于 2020-8-23 13:14
试了一下还可以,不过这个cmd窗口弹出真的把我吓到了(昨天刚被 start dos整过)
daymissed 发表于 2020-8-23 13:23
python太厉害了。
绫音 发表于 2020-8-23 13:24
学习一下  感谢楼主分享
shroer 发表于 2020-8-23 14:24
更改尺寸 只能输出正方形照片,没啥鸟用,建议楼主修改下,能按长或者宽度 等比例缩放
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 提醒:禁止复制他人回复等『恶意灌水』行为,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2020-9-24 03:26

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表