用途都在各个函数名称之前的注释上了,用途函数注释上了,[Python]代码#


[Python]代码

# -*- coding: utf-8 -*-import numpyimport Imageimport osimport sys#中文字符集def encodeChinese(msg):    type = sys.getfilesystemencoding()    return msg.decode('UTF-8').encode(type)#检测图片类型def check_imgMode(filedir):    try:        img = Image.open(filedir)        return img.mode    except:        errInfo = encodeChinese('这不是图片: ') + str(filedir) + '\n'        print errInfo        return errInfo#检测文件后缀,返回文件后缀def check_fileMode(filedir):    fPostfix = os.path.splitext(filedir)[1]    return fPostfix#打开一个图片文件def open_imgFile(filedir):    im = Image.open(filedir)    im.load()    return im#输入被检测文件夹路径def input_rootdir():    print encodeChinese('请输入要检测的文件夹路径: ')    rootdir = raw_input()    print rootdir    return rootdir#输入错误日志路径def input_logdir():    print encodeChinese('请输入错误日志路径: ')    logdir = raw_input()    print logdir    return logdir#输入处理完成图片保存路径def input_targetdir():    print encodeChinese('请输入处理完成后文件保存路径: ')    targetdir = raw_input()    return targetdir#检测文件大小def check_fileSize(filedir):    try:        f = open(filedir,'rb')        f.seek(0,2)        fSize = f.tell()        #print 'fSize: ' + str(type(fSize))        #f.close()        return f.tell()    except:        print encodeChinese('获取文件大小时发生错误')#检测图片alpha通道def check_png_alpha(rootdir,errLogDir):    errFile = open(errLogDir,'w')    for parent,dirnames,filenames in os.walk(rootdir):        for filename in filenames:            fName = filename            filename = rootdir + os.sep + filename            if check_fileMode(filename) == '.png':                if check_imgMode(filename) == 'RGBA':                    print filename                    try:                        img = open_imgFile(filename)                    except:                        filename = parent + os.sep + fName                        print encodeChinese('这不是图片: ') + str(filename) +'\n'                        errFile.write(encodeChinese('这不是图片: ') + '\n')                        errFile.write(str(filename) + '\n')                        errFile.write('\n')                    alpha = img.split()[3]                    arr = numpy.asarray(alpha)                    count = 0                    for i in range(0,img.size[0]-1):                        for j in range(0,img.size[1]-1):                            if arr[j][i] < 128:                                count += 1                                if count > 10:                                    break                    if count > 10:                        filename = parent + os.sep + fName                        print str(filename) + ' is have alpha,count = ' + str(count)                    else:                        filename = parent + os.sep + fName                        errFile.write(encodeChinese('这张图片约等于没有alpha通道: ') + '\n')                        errFile.write(str(filename) + '\n')                        errFile.write('\n')                else:                    filename = parent + os.sep +fName                    errFile.write(encodeChinese('虽然这是一张png图片,但是它没有alpha通道: ') + '\n')                    errFile.write(str(filename) + '\n')                    errFile.write('\n')            else:                filename = parent + os.sep +fName                errFile.write(encodeChinese('这不是png格式的文件: ') + '\n')                errFile.write(str(filename) + '\n')                errFile.write('\n')    errFile.close()#检测图片类型(类型,大小,分辨率)def check_texture(rootdir,errLogDir):    errFile = open(errLogDir,'w')    for parent,dirnames,filenames in os.walk(rootdir):        for filename in filenames:            fName = filename            filename = rootdir + os.sep + filename            if (check_fileMode(filename) == '.jpg' or check_fileMode(filename) == '.png'):                fSize = check_fileSize(filename)                if(fSize / 1024 > 1024):                    filename = parent + os.sep + fName                    print rootdir                    errFile.write(filename+'\n')                    err_sizeFile=encodeChinese('文件大小超过1024')                    errFile.write(err_sizeFile + ': ' + str(check_fileSize(filename)/1024) +'\n')                    errFile.write('\n')                elif(fSize / 1024 <= 1024):                    img = open_imgFile(filename)                    imgSize = img.size                    if(imgSize[0] % 64 != 0 or imgSize[1] % 64 != 0):                        print parent                        print filename                        print img.size                        value=parent+os.sep+fName                        errSize=img.size                        errFile.write(value+'\n')                        err_bigFile=encodeChinese('文件分辨率错误')                        errFile.write(err_bigFile)#'the image so big: ')                        errFile.write(str(errSize)+'\n')                        errFile.write('\n')            else:                outPath=parent+os.sep+fName                errFile.write(outPath+'\n')                err_File=encodeChinese('文件格式不正确')                errFile.write(err_File)#'the File err')                errFile.write('\n')                print fName    errFile.close()#自动裁剪贴图,扩边(只是png格式贴图)def autoCutImage(rootdir,targetDir):    for parent,dirnames,filenames in os.walk(rootdir):        for filename in filenames:            fName = filename            filename = rootdir+os.sep+filename            fPostfix = check_fileMode(filename)            value_r = 0            value_g = 0            value_b = 0            count = 0            if(fPostfix =='.png'):                #os.chmod(filename,stat.S_IWRITE)                img = open_imgFile(filename)                if img.mode == 'RGBA':                    rgba = encodeChinese('这张是RGBA图片')                    print rgba                    img.load()                    data = img.getdata()                    data_a = list()                    for item in data:                        if(item[3] < 128):                            data_a.append((item[0],item[1],item[2],0))                        else:                            data_a.append((item[0],item[1],item[2],255))                    for item in data:                        if(item[3])== 255:                            count += 1                            value_r += item[0]                            value_g += item[1]                            value_b += item[2]                    value_r = value_r / count                    value_g = value_g / count                    value_b = value_b / count                    print value_r                    print value_g                    print value_b                    print count                    newdata = list()                    for item in data_a:                        if item[3] == 0:                            newdata.append((value_r,value_g,value_b,item[3]))                            #print newdata[0]                        elif item[3] == 255:                            newdata.append((item[0],item[1],item[2],item[3]))                            #print newdata[0]                            #print data_a                    print len(newdata)                    img.putdata(newdata)                    try:                        img.save(targetDir + os.sep+fName);                    except:                        print encodeChinese('保存文件出现错误,请检查被保存的文件夹是否存在,亦或是其它引起的错误')                    print str(fName) + ' save'             #如果它没有alpha通道                elif img.mode == 'RGB':                    print 'RGB'                    img.load()                    #转换出一个alpha通道                    img = img.convert('RGBA')                    datas = img.getdata()                    mydata = list()                    newdata = list()                    for item in data:                        if item[0] == 0 and item[1] == 0 and item[2] == 0:                            mydata.append((item[0],item[1],item[2],0))                        else:                            mydata.append((item[0],item[1],item[2],255))                    for item in data:                        if item[3] == 255:                            count += 1                            value_r += item[0]                            value_g += item[1]                            value_b += item[2]                    value_r = value_r / count                    value_g = value_g / count                    value_b = value_b / count                    for item in mydata:                        newdata.append((value_r,value_g,value_b,item[3]))                    img.putdata(newdata)                    try:                        img.save(targetDir + os.sep + fName)                    except:                        print encodeChinese('保存文件出错,请检查被保存文件夹路径是否正确,亦或是其他原因导致')          #如果它不是png格式            elif(fPostfix == '.jpg'):                print '\n'                print fName + encodeChinese(' 是一张JPG图片,请用工具4进行裁剪')            else:                    not_png = encodeChinese('这张贴图既不是png也不是jpg,这张贴图的名字是: ')                    print not_png + fName#jpg格式图片裁剪def jpgCutImage(rootdir,targetDir):    for parent,dirnames,filenames in os.walk(rootdir):        for filename in filenames:            fName = filename;            print fName            filename = rootdir + os.sep + filename            fPostfix = check_fileMode(filename)            #fn,fPostfix = os.path.splitext(filename)            if(fPostfix == '.jpg'):                print fName + encodeChinese('  请按照红绿蓝顺序依次输入背景色参数,\    我们将按照您输入的数值进行裁剪:') + '\n'                try:                    print encodeChinese('红色的参数(0~255): ')                    red = int(raw_input())                except:                    print encodeChinese('您输入的不是数字,请重新输入红色参数(0~255): ')                    red = int(raw_input())                try:                    print encodeChinese('绿色的参数(0~255): ')                    green = int(raw_input())                except:                    print encodeChinese('您输入的不是数字,请重新输入绿色参数(0~255): ')                    green = int(raw_input())                try:                    print encodeChinese('蓝色的参数(0~255): ')                    bule = int(raw_input())                except:                    print encodeChinese('您输入的不是数字,请重新输入蓝色参数(0~255): ')                    bule = int(raw_input())                item = list()                 item.append((red,green,bule))                print item[0][0]                print item[0][1]                print item[0][2]                print 'item: ' + str(item) + '\n'                img = Image.open(filename)                #img = img.convert('RGBA')                newImg = Image.new('RGBA',img.size)                print 'newImg.mode: ' + str(newImg.mode)                imgData = img.getdata()                newData = list()                for newItem in imgData:                    if(newItem[0] == item[0][0] and newItem[1] == item[0][1] and newItem[2] == item[0][2]):                        newData.append((newItem[0],newItem[1],newItem[2],0))                    else:                        newData.append((newItem[0],newItem[1],newItem[2],255))                        #print encodeChinese('不相等的情况: ') + str(newItem) + '\n'                print 'hello'                newImg.putdata(newData)                fName,fpost = fName.split('.')                print 'fName ' + str(fName)                fpost =fName + '.png'                print 'fpost :' + str(fpost)                newImg.save(targetDir + os.sep + fpost)                try:                    alpha = newImg.split()[3]                    print 'alpha'                except:                    print 'err'#选择工具def select_tools():    select = raw_input()    if select == '1':        rootdir = input_rootdir()        errLogDir = input_logdir()        check_png_alpha(rootdir,errLogDir)    elif select == '2':        rootdir = input_rootdir()        errLogDir = input_logdir()        check_texture(rootdir,errLogDir)    elif select == '3':        rootdir = input_rootdir ()        targetDir = input_targetdir()        autoCutImage(rootdir,targetDir)    elif select =='4':        rootdir = input_rootdir()        targetDir = input_targetdir()        jpgCutImage(rootdir,targetDir)    elif select =='5':        print encodeChinese('谢谢您的使用^_^')        exit()    else:        print encodeChinese('您输入的数字有误,请您重新启动程序....')#显示菜单def menuDisplay():    print encodeChinese('按照数字选择工具,并根据提示输入相应参数: ')    print encodeChinese('1.检测图片alpha通道')    print encodeChinese('2.检测图片格式')    print encodeChinese('3.根据alpha通道裁剪贴图')    print encodeChinese('4.裁剪JPG图片贴图')    print encodeChinese('5.退出')    select_tools()def main():    print '\n'    print encodeChinese('#################################################################')    print encodeChinese('#####################欢迎使用图片处理工具########################')    print encodeChinese('#################################################################')    print '\n'    menuDisplay()main()

评论关闭