图片处理工具

145 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。 我这边遇到一个简单的需求

我们从网上找来一批资源但是发现图片不是在同一个位置没有居中,这样的图片对于我们来说是不能直接使用的,所以需要把图片的像素位置整体移动一下,本来这是美术的工作,但是美术抱怨这个工作量太大了,所以这个工具就出来了。先把代码贴出来吧,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

好了,就分享到这里了。