Python可以生成文本转换,因此可以在代码中使用

时间:2018-03-25 09:18:44

标签: python-2.7 list python-imaging-library

裁剪是从列表中生成的:

 count = 0
 for Crop in param:
     count = count +1
     St=chr(ord('`') + count)
     print  St,"=im.crop(",Crop,")"

导致:

a =im.crop( (0, 0, 640, 0) )
b =im.crop( (0, 40, 640, 40) )
c =im.crop( (0, 80, 640, 80) )
d =im.crop( (0, 120, 640, 120) )
e =im.crop( (0, 160, 640, 160) )
f =im.crop( (0, 200, 640, 200) )
g =im.crop( (0, 240, 640, 240) )
h =im.crop( (0, 280, 640, 280) )

我想使用结果实际裁剪几个部分的图像,使用枕头变量重新组装。

1 个答案:

答案 0 :(得分:0)

您可能对eval函数-https://docs.python.org/3/library/functions.html#eval感兴趣。或者,您可以将生成的Python代码保存到文件中,然后导入/运行该文件。

但是,通常不鼓励使用这些选项中的任何一个,因为输入并不总是可信赖的。

我为您提供以下代码,该代码可以解析您的代码字符串并安全地运行它-即,它可以按您期望的方式裁剪图像,而不会让您自己运行任何可能包含的其他代码。

from PIL import Image

im = Image.new('RGB', (1000, 1000))

input = """
a =im.crop( (0, 0, 640, 0) )
b =im.crop( (0, 40, 640, 40) )
c =im.crop( (0, 80, 640, 80) )
d =im.crop( (0, 120, 640, 120) )
e =im.crop( (0, 160, 640, 160) )
f =im.crop( (0, 200, 640, 200) )
g =im.crop( (0, 240, 640, 240) )
h =im.crop( (0, 280, 640, 280) )
"""

output = {}
for line in input.strip().split("\n"):
    variable, operation = line.split('=')

    if operation.startswith('im.crop('):
        coords = operation.split('im.crop')[1].replace('(', '').replace(')', '').split(',')
        result = im.crop([int(coord) for coord in coords])

    output[variable.strip()] = result
print(output)