Python批量修改图片格式和尺寸

备注:

1.导入了PIL库,是处理图片用的,很强大;

2.导入了的win32库,是判断隐藏文件用的,我们的项目需要删除隐藏文件,不需要的可以直接找到删除。

3.导入send2trash库,是把删除的文件放进垃圾箱,而不是永久删除,这个我只是防止删除有用的文件而搞得,有点严谨了是吧,不需要的可以删掉啊。

4.我这个脚本是Python2.7编写的,但是在处理中文编码的时候非常恶心,尽管最后被我解决了,这个解决的方法,我随后会再单独写一篇,但是此刻我是建议大家不要用2.x版本的python了。据说3.x的版本的已经解决了编码的问题。希望大家听我的建议。

  1. #编码= utf-8的
  2. 导入 系统
  3. 导入 os,glob
  4. 导入 平台
  5. 导入 win32file,win32con
  6. 从 PIL  导入 图像
  7. 从 send2trash  导入 send2trash
  8. 重装(SYS)
  9. sys.setdefaultencoding('utf-8' )
  10. #new_width = 2048
  11. #width = int(raw_input(“width U want:”))
  12. #imgslist = glob.glob(路径+'/ *。*')
  13. ShuiPing = “水平”
  14. ShiZhuang = “矢状”
  15. GuanZhuang = “冠状”
  16. def  Py_Log(_string):
  17. 打印“----” + _string.decode('utf-8' )+ “----”
  18. def  is_windows_system():
  19. 返回“窗口” 在 platform.system()
  20. def  is_hiden_file(file_Path):
  21. 如果 is_windows_system():
  22. fileAttr = win32file.GetFileAttributes(file_Path)
  23. 如果 fileAttr&win32con.FILE_ATTRIBUTE_HIDDEN:
  24. 返回True
  25. 返回False
  26. 返回False
  27. def  remove_hidden_​​file(file_path):
  28. send2trash(FILE_PATH)
  29. 打印“删除隐藏的文件路径:” + file_path
  30. def  astrcmp(str1,str2):
  31. 返回 str1.lower()== str2.lower()
  32. def  resize_image(img_path):
  33. 尝试:
  34. mPath,ext = os.path.splitext(img_path)
  35. 如果 (astrcmp(ext,“.  png ” )  或astrcmp(ext,“.jpg” )):
  36. img = Image.open(img_path)
  37. (宽度,高度)= img.size
  38. if (width!= new_width):
  39. new_height = int(height * new_width / width)
  40. out = img.resize((new_width,new_height),Image.ANTIALIAS)
  41. new_file_name =  '%s%s'  %(mPath,ext)
  42. out.save(new_file_name,质量= 100 )
  43. Py_Log(“图片尺寸修改为:” + str(new_width))
  44. 其他:
  45. Py_Log(“图片尺寸正确,未修改” )
  46. 其他:
  47. Py_Log(“非图片格式” )
  48. 除了 例外,e:
  49. 打印 e
  50. #改变图片类型
  51. def  change_img_type(img_path):
  52. 尝试:
  53. img = Image.open(img_path)
  54. img.save('new_type.png' )
  55. 除了 例外,e:
  56. 打印 e
  57. #处理远程图片
  58. def  handle_remote_img(img_url):
  59. 尝试:
  60. request = urllib2.Request(img_url)
  61. img_data = urllib2.urlopen(request).read()
  62. img_buffer = StringIO.StringIO(img_data)
  63. img = Image.open(img_buffer)
  64. img.save('remote.jpg' )
  65. (宽度,高度)= img.size
  66. out = img.resize((200 ,height *  200  / width),Image.ANTIALIAS)
  67. out.save('remote_small.jpg' )
  68. 除了 例外,e:
  69. 打印 e
  70. def  rename_forder(forder_path):
  71. Py_Log(“------------ rename_forder --------------------------” )
  72. names = os.path.split(forder_path)
  73. 尝试:
  74. 如果(UNICODE(热水瓶)  中 的Unicode(名称[ 1 ],'GBK' )):
  75. os.rename(forder_path,名称[ 0 ] + “\\”+“ 01 ”)
  76. Py_Log(名称[ 1 ] + “ - >” + “01” )
  77. 如果(unicode(石庄)  in  unicode(names [ 1 ],'gbk' )):
  78. os.rename(forder_path,名称[ 0 ] + “\\”+“ 02 ”)
  79. Py_Log(名称[ 1 ] + “ - >” + “02” )
  80. 如果(unicode(管庄)  in  unicode(names [ 1 ],'gbk' )):
  81. os.rename(forder_path,名称[ 0 ] + “\\”+“ 03 ”)
  82. Py_Log(名称[ 1 ] + “ - >” + “03” )
  83. 除了 例外,e:
  84. 打印 e
  85. def  BFS_Dir(dirPath,dirCallback =  None ,fileCallback =  None ):
  86. 队列= []
  87. ret = []
  88. queue.append(dirPath);
  89. 而 len(队列)>  0 :
  90. tmp = queue.pop(0 )
  91. 如果(os.path.isdir(tmp)):
  92. ret.append(TMP)
  93. 对于 项目  在 os.listdir(TMP):
  94. queue.append(os.path.join(tmp,item))
  95. 如果 dirCallback:
  96. dirCallback(TMP)
  97. elif (os.path.isfile(tmp)):
  98. ret.append(TMP)
  99. 如果 fileCallback:
  100. fileCallback(TMP)
  101. 返回 RET
  102. def  DFS_Dir(dirPath,dirCallback =  None ,fileCallback =  None ):
  103. stack = []
  104. ret = []
  105. stack.append(dirPath);
  106. 而 len(stack)>  0 :
  107. tmp = stack.pop(len(stack) -  1 )
  108. 如果(os.path.isdir(tmp)):
  109. ret.append(TMP)
  110. 对于 项目  在 os.listdir(TMP):
  111. stack.append(os.path.join(tmp,item))
  112. 如果 dirCallback:
  113. dirCallback(TMP)
  114. elif (os.path.isfile(tmp)):
  115. ret.append(TMP)
  116. 如果 fileCallback:
  117. fileCallback(TMP)
  118. 返回 RET
  119. def  printDir(dirPath):
  120. 打印“dir:”  + dirPath
  121. if (is_hiden_file(dirPath)):
  122. remove_hidden_​​file(dirPath)
  123. 其他:
  124. rename_forder(dirPath)
  125. def  printFile(dirPath):
  126. 打印“文件:”  + dirPath
  127. resize_image(dirPath)
  128. 返回True
  129. 如果 __name__ == ' __main__  ' :
  130. 而真:
  131. path = raw_input(“Path:” )
  132. new_width = int(raw_input(“width U want:” ))
  133. 尝试:
  134. b = BFS_Dir(path,printDir,printFile)
  135. Py_Log(“\ r \ n ********** \ r \ n” + “*********图片处理完毕*********” + “\ r \ n ********** \ r \ n“ )
  136. 除了:
  137. 打印“意外的错误:” ,sys.exc_info()
  138. raw_input('按回车键重新处理' )
 

Python批量修改图片格式和尺寸的更多相关文章

  1. Python 批量修改图片格式和尺寸

    公司的一个项目要求把所有4096x4096的图片全部转化成2048x2048的图片,这种批量转换图片大小的软件网上很多,我的同事原来使用的美图看看的批量转换,但是稍微有点麻烦,每次还需要指定要转换的图 ...

  2. python批量修改图片名称

    import os class BatchRename(): def rename(self): # windows环境 """ os.rename() 方法用于命名文件 ...

  3. python 批量修改图片大小

    一个文件夹下面有好多图片格式是jpg大小是1920*1080,把它们处理成1280*720并按原先图片的名保存在另一路径下这里首先要找到给定路径下所有的图片文件,然后在修改图片文件的大小,这里用到PI ...

  4. python 批量更换图片格式脚本

    问题:将某文件下的所有jpg的图片更换为png的图片 简单的实现: # -*- coding:utf-8 -*- from os.path import splitext import glob fr ...

  5. python:批量修改文件名批量修改图片尺寸

    批量修改文件名  参考博客:https://www.cnblogs.com/zf-blog/p/7880126.html 功能:批量修改文件名 1 2 3 4 5 6 7 8 9 10 11 12 1 ...

  6. 使用Adobe Photoshop CC 2015批量修改图片尺寸

    最近在工作中遇到一个问题,当时客户给的图片尺寸与我要求的图片不符,由于图片非常的多,如果一张一张的修改,十分的麻烦,后来经过一位同事的指点,发现Adobe Photoshop CC 2015可以实现批 ...

  7. python 将png图片格式转换生成gif动画

    先看知乎上面的一个连接 用Python写过哪些[脑洞大开]的小工具? https://www.zhihu.com/question/33646570/answer/157806339 这个哥们通过爬气 ...

  8. 【faster-rcnn】训练自己的数据——修改图片格式、类别

    修改图片格式 matlab代码 其实内部一些代码是用了rbg的fast-rcnn代码的. \datasets\VOCdevkit2007\VOCcode\VOCinit.m里面,查找'jpg',改成' ...

  9. 利用python批量修改word文件名的方法示例

    利用python批量修改word文件名的方法示例 最近不小心把硬盘给格式化了,由于当时的文件没有备份,所以一下所有的文件都没有了,于是只能采取补救措施,用文件恢复软件恢复了一部分的数据出来,但是恢复完 ...

随机推荐

  1. Https之秘钥交换过程分析

    一.概念回顾 A <------M------> B场景:A.B两个人之间通讯,A传输信息M给B,假定是在不安全的通路上传输. 1.明文传输 被中间人C拦截下来,可以随意篡改A发送给B的消 ...

  2. 【android】 如何把gif图片下载到本地

    以上图片大家可以看到,虽然是个jpg格式的文件,但是本质上是个动图. 但是发现在咱的图片模块下,本地存储的图片只有一帧,问题出在哪里呢? http获取到的byte[]数据是没问题的 断点跟踪了下,发现 ...

  3. java synchronized关键字的底层实现

    每个对象都有一个锁(Monitor,监视器锁),class对象也有锁,如果synchronized关键字修饰同步代码块,通过反编译可以看到,其实是有个monitorenter和monitorexit指 ...

  4. $一步一步学Matlab(4)——使用Matlab进行初等数学运算

    Matlab可以看成是一个功能强大的计算器,那么既然是计算器,进行基本的数学运算绝对是必不可少的.本文主要讲解如何用Matlab做初等数学运算,所谓"初等数学运算",可以理解成是小 ...

  5. laravel 图片上传 ajax 方式

    laravel 图片上传 //后台轮播图上传 $("#img-upload").on('submit',function(e){ e.preventDefault(); var f ...

  6. 谷歌技术"三宝"之谷歌文件系统(转)

    原文地址:http://blog.csdn.net/opennaive/article/details/7483523 题记:初学分布式文件系统,写篇博客加深点印象.GFS的特点是使用一堆廉价的商用计 ...

  7. 20145331 《Java程序设计》第2周学习总结

    20145331<Java程序设计>第2周学习总结 教材学习内容总结 3.1 类型.变量与运算符 •注释://(单行注释).//(多行注释)./ */(javadoc文档注释 )注释的内容 ...

  8. 【读书笔记】《深入浅出nodejs》第三章 异步I/O

    1. 为什么要异步I/O (1)用户体验上: 并发的优势: M+N+... -> max(M,N,...)  --> 使后端能够快速的响应资源 *并发的劣势:... (2)资源分配: 单线 ...

  9. tiny4412的烧录工具minitool安装【学习笔记】

    烧录了半天,在win10下一直就是烧录不进去,但是在Ubuntuh环境却可以,找了很久终于找到了,原来在win10安装minitool驱动的时候没有注意到报了错误,错误内容是驱动的数字签名问题,后来禁 ...

  10. Linux 网站文件和数据库全量备份 一键脚本(支持FTP,Google Drive)

    原文连接: https://teddysun.com/469.html 此文为转载,建议查看秋水大神的原文,排版更容易查看,另外,建议查看脚本源码,方便了解脚本运行过程, 脚本已测试,大神的脚本一如既 ...