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

重要!此版本已经不再更新,正式使用版本为GUI版本,到这里查看详情


2015/2/21更新
此工具GUI版本已经完成,修复了两个重大bug(关于大家测试反馈的那个url编码无法使用问题),原因已经查明,是因为python提供的base64库编译出来的url有问题,小编修改了一下这个问题,就能正常显示了。GUI的二进制文件版本已经可以下载,点击 这里查看GUI版本信息&下载地址&源代码


前一阵子学习CSS知识时,知道了图片可以通过 BASE64 编码
成为文件,这样可以有助于减少图片的请求,总之感觉就是舒服啊,于是找了找,网上这方面资源还真不少,可是找来找去的,试了好多遍,大多数的python代码都用不成········
于是,三十这天,下决心自己写一个,由于最近学PHP有点多,Python都有点忘了,写的有些慢。
写到最后的时候感觉整个人都不好了,画了张图片说明思路:

PythonBase64
PythonBase64程序思路理清
  • 这个程序可以给txt文档中的字符进行Base64编码,之后直接生成一个编码过后txt文档,里面写着编码过后的东东
  • 这个程序可以给 gif/png/jpeg 等常见的图像格式编码,生成代码会直接保存为CSS文件,可以直接复制至src或者background后面使用之后就会出现图像,代码保存下来会比图片大1/3左右
  • 可以进行反编码,以上的功能均可实现逆向操作
  • 帮助就是这个页面,会自动打开网页别觉得是病毒~~
  • 有什么问题,或程序哪里写的有缺陷报错,可以在下面留言,也可以发邮件到我的邮箱
  • 有时间会写一个网页版的或者给这个东西加个GUI,美观一些(网页版的可能性大,上线会通知大家哦~)

说明一下,最后真的感觉有些累,但是又想写完,就有些冗余的写了一个针对text格式文本的转换代码块(不想再去想那么多······)
代码水平还是很臭,网各位大神路过不吝啬指点!
以下是源代码:

#!/usr/bin/env python
#Author:[email protected]
import base64
import webbrowser,os,time
text = ['txt','css','html']
image = ['png','bmp','pcx','jpg','jpeg','gif','tiff','dxf']
def Error(type):
    if type == 'new':
        print ('无法生成新文件,请查看帮助!')
        time.sleep(2)
        webbrowser.open('https://init.blog/archives/810')
        time.sleep(1)
        exit()
    elif type == 'type':
        print ('文件格式不对,去看看帮助再来试试!')
        time.sleep(2)
        webbrowser.open('https://init.blog/archives/810')
        time.sleep(1)
        exit()
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 = filepath.split('\\')[0]
            base64data = file.split(',')[-1].strip(')')
            filetype = file.split(';')[0].split('/')[-1]
            codingtype = file.split('(')[0]
        except:
            Error('type')
        else:
            try:
                filenew = open(filepath+filename+'_decoding'+'.'+filetype,'wb')
            except:
                Error(new)
            else:
                if codingtype == 'url':
                    filenew.write(base64.urlsafe_b64decode(base64data))
                    filenew.close()
                    print ('解码成功,生成的文件 '+filename+'_decoding'+'.'+filetype+' 在原文件同目录下!')
                else:
                    filenew.write(base64.decodingstring(base64data))
                    filenew.close()
                    print ('解码成功,生成的文件 '+filename+'_decoding'+'.'+filetype+' 在原文件同目录下!')
    elif trans == 'coding':
        filename = filepath.split('\\')[-1].split('.')[0]
        filepathnew = filepath.split('\\')[0]
        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)
                print ('编码成功,生成的文件 '+filename+'_coding'+'.txt'+' 在原文件同目录下!')
            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'"))+');'
#在这里修正了python提供的base64的编码问题
                base64data = ('+').join(base64data.split('-'))
                base64data = ('/').join(base64data.split('_'))
#Python提供的base64 URL编码把“+”写成了“—”,把“/”写成了“_”。上面的两句话就是用来替换的。
                filenew.write('url(data:image/'+filetype+';base64,'+base64data)
                print ('编码成功,生成的文件 '+filename+'_coding'+'.css'+' 在原文件同目录下!')
            finally:
                filenew.close()
                fileold.close()
        else:
            print ('您所提交的文件类型不在我们所支持的范围内,谢谢使用!')
            time.sleep(3)
    elif trans == 'text_decoding':
        filename = filepath.split('\\')[-1].split('.')[0]
        filepathnew = filepath.split('\\')[0]
        filetype = filepath.split('\\')[-1].split('.')[-1]
        try:
            fileold = open(filepath,'rb')
            filenew = open(filepathnew+'\\'+filename+'_decoding'+'.txt','wb')
        except:
            Error('new')
        else:
            base64.decode(fileold,filenew)
            print ('解码成功,生成的文件 '+filename+'_decoding'+'.txt'+' 在原文件同目录下!')
        finally:
            filenew.close()
            fileold.close()
    else:    
        exit()
def start():
    while True:
        filepath = input("\n输入您想要编码/解码的文件路径,将会自动识别,输入help查看帮助:")
        if filepath == 'help':
            webbrowser.open('https://init.blog/archives/810')
            os.system('cls')
            continue
        if os.path.isfile(filepath) == True:
            if filepath.split('.')[-1] == 'txt':
                select = input('可以编码也可以解码,请输入‘code’(编码) or ‘decode’(解码)选择:')
                if select == 'code':
                    base64Coding(filepath,'coding')
                elif select == 'decode':
                    base64Coding(filepath,'text_decoding')
            elif filepath.split('.')[-1] in text:
                base64Coding(filepath,'decoding')
                break
            else:
                base64Coding(filepath,'coding')
                break
        else:
            print ("文件位置不对,请重新输入!")
            continue
if __name__ == "__main__":
    while True:
        start()

就是三十了,外面还算热闹,但是总感觉年味越来越淡了,春晚估计又要被吐槽了~~

祝大家在新的一年里万事如意,工作顺利,童鞋们学习进步~~~

暂无评论

发送评论 编辑评论


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