国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

python實(shí)現(xiàn)批量修改圖片格式和尺寸

2020-02-15 21:42:01
字體:
供稿:網(wǎng)友

本文實(shí)例為大家分享了python批量處理圖片的具體代碼,供大家參考,具體內(nèi)容如下

公司的一個(gè)項(xiàng)目要求把所有4096x4096的圖片全部轉(zhuǎn)化成2048x2048的圖片,這種批量轉(zhuǎn)換圖片大小的軟件網(wǎng)上很多,我的同事原來使用的美圖看看的批量轉(zhuǎn)換,但是稍微有點(diǎn)麻煩,每次還需要指定要轉(zhuǎn)換的圖片的輸入路徑和輸出路徑,而且每次都只能處理一個(gè)文件夾,很繁瑣,于是我想到了萬能的Python,然后寫了一個(gè)腳本來批量處理圖片,同一個(gè)根目錄下的所有文件夾的子文件等的圖片全部會(huì)處理掉。

代碼中還加入了很多的異常捕獲機(jī)制和提示,希望對(duì)大家有幫助。

備注:

1.導(dǎo)入了PIL庫,是處理圖片用的,很強(qiáng)大;

2.導(dǎo)入了win32庫,是判斷隱藏文件用的,我們的項(xiàng)目需要?jiǎng)h除隱藏文件,不需要的可以直接找到刪除。

3.導(dǎo)入send2trash庫,是把刪除的文件放進(jìn)垃圾箱,而不是永久刪除,這個(gè)我只是防止刪除有用的文件而搞得,有點(diǎn)嚴(yán)謹(jǐn)了是吧,不需要的可以刪掉啊。

4.我這個(gè)腳本是Python2.7編寫的,但是在處理中文編碼的時(shí)候非常惡心,盡管最后被我解決了,這個(gè)解決的方法,我隨后會(huì)再單獨(dú)寫一篇,但是此刻我是建議大家不要用2.x版本的python 了。據(jù)說3.x的版本的已經(jīng)解決了編碼的問題。希望大家聽我的建議。

#coding=utf-8 import sys import os, glob import platform import win32file,win32con from PIL import Image from send2trash import send2trash  reload(sys) sys.setdefaultencoding('utf-8')  #new_width =2048 #width =int(raw_input("the width U want:")) #imgslist = glob.glob(path+'/*.*')  ShuiPing="水平" ShiZhuang="矢狀" GuanZhuang="冠狀"  def Py_Log(_string):   print "----"+_string.decode('utf-8')+"----"  def is_windows_system():   return 'Windows' in platform.system()  def is_hiden_file(file_Path):    if is_windows_system():      fileAttr = win32file.GetFileAttributes(file_Path)     if fileAttr & win32con.FILE_ATTRIBUTE_HIDDEN :        return True      return False    return False  def remove_hidden_file(file_path):   send2trash(file_path)   print "Delete hidden file path:"+file_path  def astrcmp(str1,str2):   return str1.lower()==str2.lower()  def resize_image(img_path):   try:     mPath, ext = os.path.splitext(img_path)     if (astrcmp(ext,".png") or astrcmp(ext,".jpg")):       img = Image.open(img_path)       (width,height) = img.size              if(width != new_width):         new_height = int(height * new_width / width)         out = img.resize((new_width,new_height),Image.ANTIALIAS)         new_file_name = '%s%s' %(mPath,ext)         out.save(new_file_name,quality=100)         Py_Log("圖片尺寸修改為:"+str(new_width))       else:         Py_Log("圖片尺寸正確,未修改")     else:       Py_Log("非圖片格式")   except Exception,e:     print e  #改變圖片類型 def change_img_type(img_path):   try:     img = Image.open(img_path)     img.save('new_type.png')   except Exception,e:     print e  #處理遠(yuǎn)程圖片 def handle_remote_img(img_url):   try:     request = urllib2.Request(img_url)     img_data = urllib2.urlopen(request).read()     img_buffer = StringIO.StringIO(img_data)     img = Image.open(img_buffer)     img.save('remote.jpg')     (width,height) = img.size     out = img.resize((200,height * 200 / width),Image.ANTIALIAS)     out.save('remote_small.jpg')   except Exception,e:     print e  def rename_forder(forder_path):   Py_Log("------------rename_forder--------------------------")   names = os.path.split(forder_path)   try:     if(unicode(ShuiPing) in unicode(names[1],'gbk')):       os.rename(forder_path,names[0]+"http://"+"01")       Py_Log(names[1]+"-->"+"01")     if(unicode(ShiZhuang) in unicode(names[1],'gbk')):       os.rename(forder_path,names[0]+"http://"+"02")       Py_Log(names[1]+"-->"+"02")     if(unicode(GuanZhuang) in unicode(names[1],'gbk')):       os.rename(forder_path,names[0]+"http://"+"03")       Py_Log(names[1]+"-->"+"03")   except Exception,e:     print e  def BFS_Dir(dirPath, dirCallback = None, fileCallback = None):   queue = []   ret = []   queue.append(dirPath);   while len(queue) > 0:     tmp = queue.pop(0)     if(os.path.isdir(tmp)):       ret.append(tmp)       for item in os.listdir(tmp):         queue.append(os.path.join(tmp, item))       if dirCallback:         dirCallback(tmp)     elif(os.path.isfile(tmp)):       ret.append(tmp)       if fileCallback:         fileCallback(tmp)   return ret  def DFS_Dir(dirPath, dirCallback = None, fileCallback = None):   stack = []   ret = []   stack.append(dirPath);   while len(stack) > 0:     tmp = stack.pop(len(stack) - 1)     if(os.path.isdir(tmp)):       ret.append(tmp)       for item in os.listdir(tmp):         stack.append(os.path.join(tmp, item))       if dirCallback:         dirCallback(tmp)     elif(os.path.isfile(tmp)):       ret.append(tmp)       if fileCallback:         fileCallback(tmp)   return ret  def printDir(dirPath):   print "dir: " + dirPath   if(is_hiden_file(dirPath)):     remove_hidden_file(dirPath)   else:     rename_forder(dirPath)  def printFile(dirPath):   print "file: " + dirPath   resize_image(dirPath)   return True   if __name__ == '__main__':   while True:     path = raw_input("Path:")     new_width =int(raw_input("the width U want:"))     try:       b = BFS_Dir(path , printDir, printFile)       Py_Log ("/r/n   **********/r/n"+"*********圖片處理完畢*********"+"/r/n  **********/r/n")     except:       print "Unexpected error:", sys.exc_info()     raw_input('press enter key to rehandle')             
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 襄城县| 舟山市| 高平市| 玉林市| 南陵县| 通城县| 绥化市| 林芝县| 五华县| 从江县| 湟中县| 望谟县| 天峻县| 萨嘎县| 革吉县| 英超| 望城县| 合山市| 广安市| 广元市| 花莲市| 柳江县| 天峨县| 马山县| 宾阳县| 通江县| 慈利县| 嘉黎县| 伊春市| 灵宝市| 铁岭县| 贡嘎县| 潞城市| 民乐县| 扬州市| 丹江口市| 沁阳市| 岳阳市| 定兴县| 海淀区| 军事|