本文已参与「新人创作礼」活动,一起开启掘金创作之路。 我这边遇到一个简单的需求
我们从网上找来一批资源但是发现图片不是在同一个位置没有居中,这样的图片对于我们来说是不能直接使用的,所以需要把图片的像素位置整体移动一下,本来这是美术的工作,但是美术抱怨这个工作量太大了,所以这个工具就出来了。先把代码贴出来吧,python 2.7.8 版本的。
photo.py
`#!/usr/bin/env python
coding=utf-8
import os from PIL import Image import shutil
mainFile = u'生成'.encode("gb2312") def CreateDir(path): isExists=os.path.exists(path)
# 判断结果
if not isExists:
# 如果不存在则创建目录
# 创建目录操作函数
os.makedirs(path)
print path+ u'创建成功'.encode("gb2312")
return True
else:
# 如果目录存在则不创建,并提示目录已存在
#print path+u'目录已存在'.encode("gb2312")
return False
def transparent_back(img): img = img.convert('RGBA') L, H = img.size #if L == 1 or H == 1: #return False
return img
def combine_photo(): tip = u'请输入路径:'.encode("gb2312") inputPath = raw_input(tip)
tip = u'请输入宽W:'.encode("gb2312")
W = raw_input(tip)
imageW = int(W)
tip = u'请输入长H:'.encode("gb2312")
H = raw_input(tip)
imageH = int(H)
path = ''
for x in inputPath:
path += x
if x == '\\':
path += '\\'
CreateDir(path+'\\'+mainFile)
#print(os.listdir(path))
for dirName in os.listdir(path):
dealDir = path+'\\'+dirName
print(dealDir)
if os.path.isdir(dealDir) and dirName != mainFile:
for pngName in os.listdir(dealDir):
if os.path.isfile(dealDir+'\\'+pngName):
img1 = Image.open(dealDir+'\\'+pngName)
img2 = transparent_back(img1)
str = pngName[0:-4]
saveFile = path+'\\'+mainFile+'\\'+dirName
if img2 != False:
toImage = Image.new('RGBA', (imageW, imageH),(255,255,255,0))
print u'处理图片'.encode("gb2312"),dealDir+'\\'+pngName
pos = []
txtName = dealDir+'\\Placements\\'+str+'.txt'
print u'打开目标txt'.encode("gb2312"),txtName
fp = open(txtName,'r')
done = False
while not done:
aline = fp.readline()
if aline != '' and aline != ' ':
if int(aline):
pos.append(int(aline))
else:
pos.append(0)
else:
done = True
fp.close()
if len(pos) == 0:
pos = [0,0]
r, g, b, a = img2.split()
toImage.paste(img2, (imageW/2+pos[0]-24,imageH/2+pos[1]-18))
CreateDir(saveFile)
toImage.save(saveFile+'\\'+str+'.png')
else:
print u'复制文件'.encode("gb2312"),
shutil.copy(dealDir+'\\'+pngName,saveFile+'\\'+str+'.png')
combine_photo() `
我们可以直接拿来用,同时脚本支持设置图片的大小,我设置的就是500*500
好了,就分享到这里了。