python PIL库对图片按比例进行分割
生活随笔
收集整理的這篇文章主要介紹了
python PIL库对图片按比例进行分割
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
不做過多解釋,請自行理解 ,其中CheckPixel方法可以刪掉,寫這個方法的目的是為了排除透明的塊,使得圖片資源盡可量的小
# -*- coding: utf-8 -*- from PIL import Image import struct import sys import osnum = 0def CheckPixel(region):x, y = region.sizeempty_box = Image.new('RGBA', (int(x + 1), int(y + 1)))empty_box.paste(region,(0,0))width, height = empty_box.sizepix_array = empty_box.load()for i in range(width):for j in range(height):tuple = pix_array[i, j]if len(tuple) == 4:if tuple[3] != 0: # 非透明return Falsereturn True # 透明def CutImg(imgPath, imgSaveDir, widthNum, heightNum, imgName):global numnum +=1img = Image.open(imgPath)size = img.sizewidth = float(size[0]) / widthNumheight = float(size[1]) / heightNumprint(num, ' Image name: ', imgName, ' (寬,高):',size, ' 切割后 (寬,高): ',(width, height) , '\n')for i in range(widthNum):for j in range(heightNum):box = (width * j, height * i, width * (j + 1), height * (i + 1))region = img.crop(box)if CheckPixel(region): # 檢查是否透明,透明不存儲continuenew_i = inew_j = jif i < 10:new_i = '0' + str(i)if j < 10:new_j = '0' + str(j)region.save(imgSaveDir + '\\' + imgName.split('.')[0] + '_{}{}.png'.format(new_i, new_j))def TraverseDir(now_Dir, new_dir, widthNum, heightNum):try:if not os.path.exists(new_dir):os.mkdir(new_dir)for roots, dirs, files in os.walk(now_Dir):# 操作根目錄下的圖片for imgName in files:if imgName.endswith('png') or imgName.endswith('jpg'):# imgNum = imgName.split('.')[0]imgSaveDir = new_dir # 僅僅為了展示字段的作用if not os.path.exists(imgSaveDir):os.mkdir(imgSaveDir)imgPath = roots + '\\' + imgNameCutImg(imgPath, imgSaveDir, widthNum, heightNum, imgName)if len(dirs) != 0:for dir in dirs:new_nowDir = now_Dir + '\\' + dirnew_newDir = new_dir + '\\' + dirTraverseDir(new_nowDir, new_newDir, widthNum, heightNum)breakelse:breakexcept IOError:print("執行出錯,請退出重新嘗試!!!")if __name__ == '__main__':print("start...")print()widthNum, heightNum = map(int, input('請輸入要切割的比例,比如3*3,請輸入3 3(中間以空格分開): \n\n').split(' '))exedir_root = sys.argv[0][:-11]basedir = sys.argv[1]dirname = basedir.split('\\')[-1]new_dir = exedir_root + '\\' + dirname + '_cut'print('---------------------------------------------------------')print('\n原路徑: ', basedir)print('\n保存路徑: ', new_dir, '\n')print('---------------------------------------------------------\n')TraverseDir(basedir, new_dir, widthNum, heightNum)# TraverseDir('C:\\Users\Administrator\Desktop\新建文件夾\\1', 'C:\\Users\Administrator\Desktop\新建文件夾\\1_cut', 3,3)print('\n---------------------------------------------------------\n')print('切割的圖片總數為:%d \n' % num)print('已完成!!!')os.system("pause")總結
以上是生活随笔為你收集整理的python PIL库对图片按比例进行分割的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 李开复写给女孩子们的
- 下一篇: linux 无线网卡ping不同,请教高