将目录或指定文件使用img2py进行处理

img2py 可以将图片文件存成文本文件,但它不支持多个文件处理,这特别在我的目录下有许多的文件,如果一个个处理的话,会非常麻烦。于是为了解决目录及支持多个文件的问题,我编写了下面的小程序,希望对你有用。

import wx.tools.img2py as img2py
import getopt
import sys
import os
import os.path

def usage():
    print """
%s [-d directory][-h] -o outputfile files
""" % sys.argv[0]

def main():
    if len(sys.argv) == 1:
        usage()
        sys.exit(1)
    try:
        opts, fileArgs = getopt.getopt(sys.argv[1:], "d:o:h")
    except getopt.GetoptError:
        usage()
        sys.exit(1)

    imagedir = ''
    outputfile = ''
    for opt, val in opts:
        if opt == "-h":
            usage()
            sys.exit(1)
        elif opt == "-d":
            imagedir = val
        elif opt == "-o":
            outputfile = val

    convert(outputfile, imagedir, fileArgs)

def isImageFile(filename):
    f, ext = os.path.splitext(filename)
    if os.path.isfile(filename) and ext.lower() in ('.gif', '.png', '.bmp', '.jpg', '.ico'):
        return True
    else:
        return False
           
def convert(outputfile, dir='', imagefiles=[]):
    files = []
    files.extend(imagefiles)
    if dir:
        f = [os.path.join(dir, x) for x in os.listdir(dir) if os.path.isfile(os.path.join(dir, x))]
        files.extend(f)
    files = list(set([x for x in files if isImageFile(x)]))
    for i, x in enumerate(files):
        name = os.path.splitext(os.path.basename(x))[0].lower()
        cmd =[]
        if i != 0:
            cmd.append('-a')
        cmd.append('-n')
        cmd.append(name.capitalize())
        cmd.append(x)
        cmd.append(outputfile)
        os.system("img2py %s" % " ".join(cmd))
   
if __name__ == '__main__':
    main()

我们在写gui程序的时候,经常会用到一些图标图片资 源,对此有几种解决办法,有人喜欢用zip模块将其打包,用的时候取出来,因为python读取zip文件也是很方便的,有人则干脆不打包,直接放在一个 子目录中,用的时候直接读取。而我则喜欢将其转换为.py文件,作为模块调用。

我在看wxPython程序的例程的时候,[encode_bitmaps.py]发现它的图片是从一个模块(.py文件)中调入的,于是很好奇,顺藤摸瓜,于是发现:

wxPython安装好之后,会在 wx\tools 目录下安装一些工具,其中名为img2py.py的工具。
这个工具可以很方便的将我们程序中所用到的图片或者图标资源转换成py文件,这样我们在需要使用这些图片资源的时候,只需要
import 这些扩展名为.py的模块文件即可

在命令行下输入img2py.py并回车,可以查看详细的帮助信息。而一般情况下,我们所要做的,只是将图片转换为.py文件

例如,我有一个ico文件,想用其作为我程序的托盘图标

那么我可以这样做

首先,将其转换为 .py 文件

img2py.py myicon.ico myicon.py 

 

然后,在程序中导入这个模块

import myicon 

最后,当我需要用它的时候,只需要:

icon = myicon.geticonIcon() 

注意,如果你的myicon.py中没有geticonIcon()方法,只需要加入如下一行语句即可:

geticonIcon = icon.GetIcon 

怎么样,是不是很方便?

在 wx\tools 目录下还有一些其他的工具,具体用法还有待大家发掘

--------------------------------------------------

目的:
        即为img2py的用处,img2py是将图像转为以py文件存储的程序,简化了程序过程中读文件的处理。

开发环境:eclipse+pydev插件

步骤:
1,在 eclipse工程中增加个含有main函数的模块,用来处理图片到py,代码如下:
'''
Created on 2009-6-16
@author: fengxuanshuo

This is a way to save the startup time when running img2py on lots of
files...

'''
import sys
from wx.tools import img2py

command_lines = [
                 "-a -F -n book   pictures/right_menu/222.png   ../main/images.py",
                 "-a -F -n boo   pictures/right_menu/111.png   ../main/images.py",
                 "-a -F -n ook_red   pictures/right_menu/000.png   ../main/images.py",
                 ]

if __name__ == '__main__':
    for line in command_lines:
        args = line.split()
        img2py.main(args)

其中command_lines为命令行执行内容,程序需要的图片都可以处理,而且目标文件可以有多个,名字自己取。

2,执行新增加的模块,就会发现 main目录多了个images.py文件。

3,更新eclipse pydev工程:pydev插件并没有常用的那个add file to project选项,不过有pydev->source format python files.

4,然后再原工程里面就可以用图片py文件了(可能有些版本,在生成py文件的时候不会加import相关库的语句,需要手动添加)

5,images.py 在wxpython demo 中的用法
定义全局变量 images: images =None
在app里面声明全局的images : globel images
import imgaes as i
images = i

其他py文件类似,这么做的好处在demo的注释里面说了,不罗嗦了,over


Total views.

© 2013 - 2024. All rights reserved.

Powered by Hydejack v6.6.1