<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          用python對(duì)圖片批量壓縮和格式轉(zhuǎn)換

          共 6898字,需瀏覽 14分鐘

           ·

          2021-01-07 18:03


          留言有禮,每天都會(huì)從留言中選出三位抽取6.6元紅包


          python作為簡(jiǎn)單、易學(xué)的編程語(yǔ)言,上手入門要容易許多。如果數(shù)據(jù)分析、機(jī)器學(xué)習(xí)、人工智能這些對(duì)你來(lái)說(shuō)比較遙遠(yuǎn),用python寫一點(diǎn)實(shí)用的小腳本幫你解決問(wèn)題、提高辦公效率也是不錯(cuò)的。


          圖片縮放、格式轉(zhuǎn)換是一個(gè)常見的需求,網(wǎng)上雖然有許多這樣的工具,但是下載站的質(zhì)量參差不齊,如果沒注意的話非常容易中招。這樣不如自己用python寫一個(gè),安全有保障。


          主要用到了PIL對(duì)圖像進(jìn)行處理。tkinter用來(lái)做圖形界面,方便打包分享使用。


          實(shí)現(xiàn)效果


          實(shí)現(xiàn)代碼

          import?os
          from?PIL import?Image
          import?tkinter
          import?tkinter.filedialog
          import?tkinter.messagebox


          class?Window():
          ????def?__init__(self):
          ????????self.root = root = tkinter.Tk()
          ????????self.menu = tkinter.Menu(root)
          ????????self.submenu = tkinter.Menu(self.menu, tearoff=0)
          ????????root.config(menu=self.submenu)
          ????????self.Image = tkinter.StringVar()
          ????????self.Image.set('.bmp')
          ????????self.mstatus = tkinter.IntVar()
          ????????self.fstatus = tkinter.IntVar()
          ????????self.mstatus.set(0)
          ????????self.fstatus.set(0)
          ????????self.status = tkinter.StringVar()
          ????????self.label = tkinter.Label(root, text='輸入百分比')
          ????????self.label.place(x=5, y=5)
          ????????self.entryNew = tkinter.Entry(root)
          ????????self.entryNew.place(x=70, y=5)
          ????????self.checkM = tkinter.Checkbutton(self.root, text='批量轉(zhuǎn)換', command=self.OnCheckM, variable=self.mstatus,
          ??????????????????????????????????????????onvalue=1, offvalue=0)
          ????????self.checkM.place(x=5, y=30)
          ????????self.label = tkinter.Label(root, text='選擇文件')
          ????????self.label.place(x=5, y=55)
          ????????self.entryFile = tkinter.Entry(root)
          ????????self.entryFile.place(x=70, y=55)
          ????????self.BrowserFileButton = tkinter.Button(root, text='瀏覽', command=self.BrowserFile)
          ????????self.BrowserFileButton.place(x=220, y=55)
          ????????self.label = tkinter.Label(root, text='選擇目錄')
          ????????self.label.place(x=5, y=90)
          ????????self.entryDir = tkinter.Entry(root, state=tkinter.DISABLED)
          ????????self.entryDir.place(x=70, y=90)
          ????????self.BrowserDirButton = tkinter.Button(root, text='瀏覽', command=self.BrowserDir, state=tkinter.DISABLED)
          ????????self.BrowserDirButton.place(x=220, y=90)

          ????????self.checkF = tkinter.Checkbutton(root, text='改變文件格式', onvalue=1, offvalue=0, variable=self.fstatus,
          ??????????????????????????????????????????command=self.OnCheckF)
          ????????self.checkF.place(x=5, y=120)

          ????????frame = tkinter.Frame(root, )
          ????????frame.place(x=10, y=150)
          ????????self.rBmp = tkinter.Radiobutton(frame, variable=self.Image, value='.bmp', text='BMP', state=tkinter.DISABLED)
          ????????self.rBmp.pack(anchor='w')
          ????????self.rJpg = tkinter.Radiobutton(frame, variable=self.Image, value='.jpg', text='JPG', state=tkinter.DISABLED)
          ????????self.rJpg.pack(anchor='w')
          ????????self.rPng = tkinter.Radiobutton(frame, variable=self.Image, value='.png', text='PNG', state=tkinter.DISABLED)
          ????????self.rPng.pack(anchor='w')
          ????????self.rGif = tkinter.Radiobutton(frame, variable=self.Image, value='.gif', text='GIF', state=tkinter.DISABLED)
          ????????self.rGif.pack(anchor='w')
          ????????self.ButtonCov = tkinter.Button(root, text='轉(zhuǎn)換格式', command=self.Conv, )
          ????????self.ButtonCov.place(x=120, y=180)
          ????????self.statusLabel = tkinter.Label(root, textvariable=self.status, fg='red')
          ????????self.statusLabel.place(x=80, y=220)

          ????def?OnCheckM(self):
          ????????if?not?self.mstatus.get():
          ????????????self.entryDir.config(state=tkinter.DISABLED)
          ????????????self.entryFile.config(state=tkinter.NORMAL)
          ????????????self.BrowserFileButton.config(state=tkinter.NORMAL)
          ????????????self.BrowserDirButton.config(state=tkinter.DISABLED)
          ????????else:
          ????????????self.entryDir.config(state=tkinter.NORMAL)
          ????????????self.entryFile.config(state=tkinter.DISABLED)
          ????????????self.BrowserFileButton.config(state=tkinter.DISABLED)
          ????????????self.BrowserDirButton.config(state=tkinter.NORMAL)

          ????def?OnCheckF(self):
          ????????if?not?self.fstatus.get():
          ????????????self.rBmp.config(state=tkinter.DISABLED)
          ????????????self.rPng.config(state=tkinter.DISABLED)
          ????????????self.rJpg.config(state=tkinter.DISABLED)
          ????????????self.rGif.config(state=tkinter.DISABLED)
          ????????else:
          ????????????self.rBmp.config(state=tkinter.NORMAL)
          ????????????self.rPng.config(state=tkinter.NORMAL)
          ????????????self.rJpg.config(state=tkinter.NORMAL)
          ????????????self.rGif.config(state=tkinter.NORMAL)

          ????def?BrowserFile(self):
          ????????file = tkinter.filedialog.askopenfilename(title='Python player',
          ??????????????????????????????????????????????????filetypes=[('JPG', '*.jpg'), ('BMP', '*.bmp'), ('GIF', '*.gif'),
          ?????????????????????????????????????????????????????????????('PNG', '*.png')])
          ????????if?file:
          ????????????self.entryFile.delete(0, tkinter.END)
          ????????????self.entryFile.insert(tkinter.END, file)

          ????def?BrowserDir(self):
          ????????directory = tkinter.filedialog.askdirectory(title='Python')
          ????????if?directory:
          ????????????self.entryDir.delete(0, tkinter.END)
          ????????????self.entryDir.insert(tkinter.END, directory)

          ????def?make(self, file, format=None):
          ????????im = Image.open(file)
          ????????mode = im.mode
          ????????if?mode not?in?('L', 'RGB'):
          ????????????im = im.convert('RGB')
          ????????width, height = im.size
          ????????s = self.entryNew.get()
          ????????if?s == '':
          ????????????tkinter.messagebox.showerror('出錯(cuò)啦', '請(qǐng)輸入百分比')
          ????????????return
          ????????else:
          ????????????n = int(s)
          ????????nwidth = int(width * n / 100)
          ????????nheight = int(height * n / 100)
          ????????thumb = im.resize((nwidth, nheight), Image.ANTIALIAS)
          ????????if?format:
          ????????????thumb.save(file[:(len(file) - 4)] + '_thumb'?+ format)
          ????????else:
          ????????????thumb.save(file[:(len(file) - 4)] + '_thumb'?+ file[-4:])

          ????def?Conv(self):
          ????????n = 0
          ????????if?self.mstatus.get():
          ????????????path = self.entryDir.get()
          ????????????if?path == "":
          ????????????????tkinter.messagebox.showerror('出錯(cuò)啦', '請(qǐng)選擇路徑')
          ????????????????return
          ????????????filenames = os.listdir(path)
          ????????????if?self.fstatus.get():
          ????????????????f = self.Image.get()
          ????????????????print(f)
          ????????????????for?filename in?filenames:
          ????????????????????if?filename[-3:] in?('bmp', 'jpg', 'gif', 'png'):
          ????????????????????????self.make(path + '/'?+ filename, f)
          ????????????????????????n += 1
          ????????????else:
          ????????????????for?filename in?filenames:
          ????????????????????if?filename[-3:] in?('bmp', 'jpg', 'gif', 'png'):
          ????????????????????????self.make(path + '/'?+ filename)
          ????????????????????????n += 1
          ????????else:
          ????????????file = self.entryFile.get()
          ????????????if?file == '':
          ????????????????tkinter.messagebox.showerror('出錯(cuò)啦', '請(qǐng)選擇文件')
          ????????????????return
          ????????????if?self.fstatus.get():
          ????????????????f = self.Image.get()
          ????????????????self.make(file, f)
          ????????????????n += 1
          ????????????else:
          ????????????????self.make(file)
          ????????????????n += 1
          ????????self.status.set('成功轉(zhuǎn)換 %d 張圖片'?% n)

          ????def?mainloop(self):
          ????????self.root.minsize(280, 270)
          ????????self.root.maxsize(280, 250)
          ????????self.root.title('圖片轉(zhuǎn)換')
          ????????self.root.mainloop()


          if?__name__ == "__main__":
          ????window = Window()
          ????window.mainloop()


          END
          昨日留言中獎(jiǎng)名單

          以上三位小伙伴,加小編微信:yumeko370?領(lǐng)取小小紅包一份哦!


          1、無(wú)套路,簡(jiǎn)單領(lǐng)取百度網(wǎng)盤vip!親測(cè)有效

          2、Flash徹底死翹翹,從王者變流氓最后死于自己作死

          3、帶薪摸魚——Vs Code中的偷閑插件


          轉(zhuǎn)發(fā),點(diǎn)贊,在看,安排一下?
          瀏覽 50
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  精品多人P群无码专区 | 激情综合五月天 | 色鬼色综合 | 久久伊人春色 | 天天高清无码 |