使用python进行Base64编码工具GUI版本
本文最后更新于 408 天前,其中的信息可能已经有所发展或是发生改变。

============ 2015/2/24 更新 =================
1.修正了一处手敲代码错误(笔误)导致的无法解码的问题.
2.引入了正则表达式匹配解码字符串,使用更加方便,可以不按照格式存储CSS,您甚至可以复制一大段HTML文档(只要其中含有Base64编码的字符)及可成功解析出图片文件.


============ 2015/2/23 更新 =================
1.加入了记住路径,以及设置初始路径为Desktop,更方便选文件.
2.设置了默认文件筛选,有利于大家更方便使用.
3.修正了一个报错类型错误.


============ 2015/2/22 更新 =================
1.测试发现问题(好大的bug)生成的文件永远在这个盘的根目录,并不是那个文件夹,早上起来就赶紧改了改.
2.另外,在里面加入了成功之后打开文件夹的功能,使用更加方便.


从三十之后,就一直想把那个Base64工具GUI化,要不然用起来也真是不方便
可是怎奈小编没有开发GUI的经验,于是买了一本书,从零开始学
学了一点皮毛,就看不下去了,手痒痒,总是想上机实验下。
可是代码一敲都是错的··············这真是一个悲伤的故事
就在这么让人苦恼的过程中,GUI的版本出来了!!!~~~~
真心想吐槽一下,我虽然对于GUI没有多大的把握,也没有什么经验,但是总是觉得 tkinter就是Python的一个鸡肋····(又是一个嘴炮)

鸡肋鸡肋,食之无味,弃之可惜

曹操

感觉这句话用来形容tkinter真是在恰当不过了,单单就是创建自定义窗口来说,都是比较麻烦的,但是tkinter在简单用的时候,真心还是不错的,两三行代码就能创建一个文件对话框,这都要归功于前人给我们造的轮子啊!!
不过,关于那个Base64库把”+”写成”-“把”/”写成”_”,我一直觉得前人造的轮子有问题·········
好了,废话不多说,在百度云上已经分享了最新的下载地址,点击这里去下载


说明一下,我使用的py2exe把Python文件编译成exe,文件体积有点大,下载的压缩包在8M左右,但是原文件仅有9KB(经过精简,压缩包到了4M)
还有一件事,因为不知道什么原因,在tkinter中指定的ico在编译完成之后会报错,所以EXE文件版本用的默认的图标


choosefile

这个是软件的界面:

help
root


不得不说,这个界面到挺像那些牛皮癣广告的~~~~~


下面贴代码:

#/usr/bin/env python
# -*- coding:utf-8 -*-
#Author:[email protected]
#Only Support Python2.7 or higher version
import tkinter.filedialog as tkFileDialog
from tkinter import *
import tkinter.messagebox as messagebox
import base64,os
import webbrowser,time
import re
text = ['txt','css']
image = ['png','bmp','pcx','jpg','jpeg','gif']
rem = 'Desktop'
class Question:
    def __init__(self,parent):
        top = self.top = Toplevel(parent)
        top.title("请选择")
        top.resizable(False, False)
        top.iconbitmap('ico.ico')
        Label(top,text='请选择您要对TXT文件进行的操作').pack()
        Button(top,text="编码",command=self.code).pack(side="right")
        Button(top,text="解码",command=self.decode).pack(side="left")
    def code(self):
        global select
        select = 'code'
        self.top.destroy()
    def decode(self):
        global select
        select = 'decode'
        self.top.destroy()
class GetHelp:
    def __init__(self,parent):
        top = self.top = Toplevel(parent)
        top.resizable(False, False)
        top.title("帮助")
        top.iconbitmap('ico.ico')
        newtext = Message(top,text=
'''这个程序用来对文件(例如TXT等文本文件,常见格式的图片文件)进行编码
\n您同时可以使用该程序对已经进行过BASE64编码的文件(例如CSS文件)进行解码
\n现阶段支持的文本文件有TXT,CSS格式
\n现阶段支持的图片格式有GIF,PNG,JPG,BMP,JPEG,PCX等
\n根据图片进行的BASE64编码可以直接在网页上使用,非常方便
\n如果提示您无法创建新文件,请检查您的用户是否有写文件夹的权限
\n你可以通过将文件转移至非系统目录以保证您的操作成功
\n如果提示您文件编码错误,则说明您解码文件的编码格式并不是Base64
'''
        ,width='450').pack()
        button1 = Button(top,text="源代码以及更多",command=self.more)
        button2 = Button(top,text="我知道了,返回",command=self.destroy)
        button1.pack(side="right")
        button2.pack(side="left")
    def destroy(self):
        self.top.destroy()
    def more(self):
        time.sleep(0.5)
        webbrowser.open('https://init.blog/archives/810')
def getHelp():
    global GetHelp
    getHelp = GetHelp(root)
def Error(type):
    if type == 'new':
        messagebox.showerror('错误','无法生成新文件,请查看帮助!')
    elif type == 'type':
        messagebox.showerror('错误','文件格式不正确,请查看帮助!')
def base64Coding(filepath,trans):
    if trans == 'decoding':
        try:
            fileopen = open(filepath,'r')
            file = fileopen.readlines(1000000)[0]
            fileopen.close()
            filename = filepath.split('\\')[-1].split('.')[0]
            filepath = '\\'.join(filepath.split('\\')[0:-1])+'\\'
            patten = r'image/(.*);base64,(.*)((\))|(})|())
            result = re.search(patten,file)
            filetype = result.group(1)
            base64data = result.group(2)
            if filetype not in image:
                Error('type')
        except:
            Error('type')
        else:
            try:
                filenew = open(filepath+filename+'_decoding'+'.'+filetype,'wb')
            except:
                Error('new')
            else:
                try:
                    filenew.write(base64.urlsafe_b64decode(base64data))
                except:
                    messagebox.showerror('错误','出现未知错误,有可能是您的编码方式不为URL,请联系作者!')
                else:
                    messagebox.showinfo('成功','解码成功,生成的文件 '+filename+'_decoding'+'.'+filetype+' 在原文件同目录下!')
                    time.sleep(0.5)
                    os.popen("Explorer /select,"+filepath)
                finally:
                    filenew.close()
    elif trans == 'coding':
        filename = filepath.split('\\')[-1].split('.')[0]
        filepathnew = filepath.split('\\')
        filepathnew = ('\\'.join((filepathnew)[0:-1])+'\\')
        filetype = filepath.split('\\')[-1].split('.')[-1]
        if filetype in text:
            try:
                fileold = open(filepath,'rb')
                filenew = open(filepathnew+'\\'+filename+'_coding'+'.txt','wb')
            except:
                Error('new')
            else:
                base64.encode(fileold,filenew)
                messagebox.showinfo('成功','编码成功,生成的文件 '+filename+'_coding'+'.txt'+' 在原文件同目录下!')
                time.sleep(0.5)
                os.popen("Explorer /root,"+filepathnew)
            finally:
                filenew.close()
                fileold.close()
        elif filetype in image:
            try:
                fileold = open(filepath,'rb')
                filenew = open(filepathnew+'\\'+filename+'_coding'+'.css','w')
            except:
                Error('new')
            else:
                base64data = fileold.read()
                base64data = (str(base64.urlsafe_b64encode(base64data)).strip("b'"))
                base64data = ('+').join(base64data.split('-'))
                base64data = ('/').join(base64data.split('_'))
                filenew.write('data:image/'+filetype+';base64,'+base64data)
                messagebox.showinfo('成功','编码成功,生成的文件 '+filename+'_coding'+'.css'+' 在原文件同目录下!')
                time.sleep(0.7)
                os.popen("Explorer /root,"+filepathnew)
            finally:
                filenew.close()
                fileold.close()
        else:
            messagebox.showinfo('对不起','您所提交的文件类型不在我们所支持的范围内,请联系作者!')
            time.sleep(1)
    elif trans == 'text_decoding':
        filename = filepath.split('\\')[-1].split('.')[0]
        filepathnew = '\\'.join(filepath.split('\\')[0:-1])+'\\'
        filetype = filepath.split('\\')[-1].split('.')[-1]
        try:
            fileold = open(filepath,'rb')
            filenew = open(filepathnew+'\\'+filename+'_decoding'+'.txt','wb')
        except:
            Error('new')
        else:
            try:
                base64.decode(fileold,filenew)
            except:
                messagebox.showerror('错误','您所提交的文件无法使用Base64解码,请检查文件内容!')
            else:
                messagebox.showinfo('成功','解码成功,生成的文件 '+filename+'_decoding'+'.txt'+' 在原文件同目录下!')
                time.sleep(0.5)
                os.popen("Explorer /root,"+filepathnew)
        finally:
            filenew.close()
            fileold.close()
    else:    
        exit()
def CallFileDialog():
    filepathtemp = tkFileDialog.askopenfilename(
        filetypes=[('图像文件','*.png *.jpg *.bmp .jpeg .gif .pcx'),
                   ('文本文件','*.txt *.css'),
                   ('所有文件','*')],title='选择一个文件',initialdir=rem)
    show.set(filepathtemp)
def queryReal():
    global filepath
    if len(filepath) == 0:
        if len(Entry.get()) == 0:
            return False
        else:
            return Entry.get()
def start():
    if queryReal() == False:
        messagebox.showerror('错误','选择的文件不能为空!')
    else:
        filepath = queryReal()
        rem = filepath
        try:
            filepath = ('\\').join(filepath.split('/'))
        except:
            pass
        if os.path.isfile(filepath) == True:
            if filepath.split('.')[-1] == 'txt':
                global Question
                question = Question(root)
                root.wait_window(question.top)
                if select == 'code':
                    base64Coding(filepath,'coding')
                elif select == 'decode':
                    base64Coding(filepath,'text_decoding')
            elif filepath.split('.')[-1] in text:
                base64Coding(filepath,'decoding')
            elif filepath.split('.')[-1] in image:
                base64Coding(filepath,'coding')
            else:
                messagebox.showinfo('很抱歉','很抱歉,您所提交的文件类型不在支持的范围内,请联系作者!')
        else:
            messagebox.showerror('错误','选择的文件不存在,请检查!')
#主窗口创建
root = Tk()
show = StringVar()
root.title("Base64文件转换器")
root.iconbitmap('ico.ico')
root.resizable(False, False)
root.geometry("350x110+200+20")
#Label创建显示
labelInfo1 = Label(root,text='此程序用来对文件进行Base64编码,也可以将编码过的文件还原',fg='black')
labelInfo1.pack(side="top")
labelHelp = Label(root,text='输入/选择您想要编码/解码的文件路径,将会自动识别').pack()
labelAuthor = Label(root,text='作者: [email protected]',fg='red')
labelAuthor.pack(side='bottom')
#button创建显示
button = Button(root,text="选择文件",command=CallFileDialog)
buttonStart = Button(root,text="开始转换",command=start,state="normal")
buttonHelp = Button(root,text="帮助",command=getHelp)
buttonHelp.pack(side="right")
buttonStart.pack(side="right")
button.pack(side="right")
#Entry创建显示
Entry = Entry(root,textvariable = show,width="28")
Entry.pack(side='left')
filepath = show.get()
#menu创建显示
class section:
    def onPaste(self):
        try:
            self.text = root.clipboard_get()
        except TclError:
            pass
        show.set(str(self.text))
    def onCopy(self):
        self.text = Entry.get()
        root.clipboard_append(self.text)
    def onCut(self):
        self.onCopy()
        try:
            Entry.delete('sel.first','sel.last')
        except TclError:
            pass
section = section()
menu = Menu(root,tearoff=0)
menu.add_command(label="复制",command=section.onCopy)
menu.add_separator()
menu.add_command(label="粘贴",command=section.onPaste)
menu.add_separator()
menu.add_command(label="剪切",command=section.onCut)
def popupmenu(event):
    menu.post(event.x_root,event.y_root)
Entry.bind("",popupmenu)
root.mainloop()

把上面的代码存储为.pyw格式然后去这里把图标下载一下,放到与这个文件同目录下,就能正常使用了。
写代码不易,望大家珍惜!!!

把上面的代码存储为.pyw格式然后去这里把图标下载一下,放到与这个文件同目录下,就能正常使用了。
写代码不易,望大家珍惜!!!

暂无评论

发送评论 编辑评论


|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇