python实现批量按比例缩放图片效果

时间:2021-07-05 12:59:14

本文实例为大家分享了python实现批量按比例缩放图片的具体代码,供大家参考,具体内容如下

把脚本文件放在要缩放的文件夹下面。

双击运行脚本,输入要缩放的系数。脚本会在当前目录下创建一个scaledImg_xxxx文件夹,如果已经存在,会强制删除,如果删除失败会提示手动删除这个文件夹,再双击运行就可以了。

resizeImg.py

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#!/usr/bin/python
# -*- coding:utf8 -*-
 
#author@skillart www.
 
import os
import shutil
import Image 
to_scale = 0.5
processIndex = 0
def resizeImg(imgPath):
  global processIndex
  fileList = []
  files = os.listdir(imgPath)
  for f in files:
    filePath = imgPath + os.sep + f
    if(os.path.isfile(filePath)):
      fileList.append(f)
    elif(os.path.isdir(filePath)):
      resizeImg(filePath)
  for fileName in fileList:
    processIndex+=1
    fileFullName = imgPath+os.sep+fileName
    suffix = fileName[fileName.rfind('.'):]
    if(suffix == '.png' or suffix == '.jpg'):
      print 'processing the '+str(processIndex)+'th file:'+fileFullName
      img = Image.open(fileFullName)
      w,h = img.size
      tw = int(w * to_scale)
      th = int(h * to_scale)
      reImg = img.resize((tw,th),Image.ANTIALIAS)
      reImg.save(fileFullName)
      del reImg
if __name__ == '__main__':
  scaleStr = raw_input('input to_scale: ')
  to_scale = float(scaleStr)
  scaledPath = '.\\scaledImg_xxxx';
  if os.path.isdir(scaledPath):
    flag = raw_input('the output dir is exist, sure to del it(y/n)')
    if flag == 'y' or flag == 'yes':
      try:  
        shutil.rmtree(scaledPath)
      finally:
        raw_input('remove dir failed , please removed the dir manually.')
    else:
      exit
  shutil.copytree('.\\',scaledPath)  
  resizeImg(scaledPath)
  raw_input("resize success")

生成Icon

generateIcon.py

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#!/usr/bin/python
# -*- coding:utf8 -*-
 
#author@skillart www.
 
import os
import shutil
import Image 
def resizeImg(imgPathName):
  print imgPathName
  iconDict = {'Icon.png':'72x72','Icon@2x.png':'144x144','Icon-29.png':'29x29','Icon-40.png':'40x40','Icon-50.png':'50x50',
  'Icon-57.png':'57x57', 'Icon-58.png':'58x58','Icon-72.png':'72x72','Icon-76.png':'76x76','Icon-80.png':'80x80',
  'Icon-100.png':'100x100','Icon-114.png':'114x114','Icon-120.png':'120x120','Icon-144.png':'144x144','Icon-152.png':'152x152',
  'FlipCycleTileLarge.png':'300x300','FlipCycleTileMedium.png':'300x300','FlipCycleTileSmall.png':'300x300',
  'IconicTileMediumLarge.png':'300x300','IconicTileSmall.png':'300x300','ApplicationIcon.png':'300x300','icon.png':'72x72'}
  if os.path.isfile(imgPathName) == False:
    print('open imgPathName failed , check the' + imgPathName + "is exist!")
    exit
  img = Image.open(imgPathName)
  index = imgPathName.rfind(os.sep)
  prefix = imgPathName[:index+1]
  for key, value in iconDict.items():
    # print key,value
    v_split = value.split('x')
    w,h = int(v_split[0]),int(v_split[1])
    fileName = prefix + key
    reImg = img.resize((w,h),Image.ANTIALIAS)
    reImg.save(fileName)
    print fileName,w,h
  del img
if __name__ == '__main__':
  scaledPath = '.\\createIcon'
  if os.path.isdir(scaledPath):
    flag = raw_input('the output dir is exist, sure to del it(y/n)')
    if flag == 'y' or flag == 'yes':
      try:  
        shutil.rmtree(scaledPath)
      finally:
        raw_input('remove dir failed , please removed the dir manually.')
    else:
      exit
  shutil.copytree('.\\',scaledPath) 
  fileList = []
  files = os.listdir(scaledPath)
  for f in files:
    filePath = scaledPath + os.sep + f
    if os.path.isfile(filePath) :
      suffix = filePath[filePath.rfind('.'):]
      if(suffix == '.png' or suffix == '.jpg'):
        print filePath
        resizeImg(filePath)
        break
  raw_input("resize success")

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。

原文链接:https://blog.csdn.net/skillart/article/details/50536929