IronPython - 更改多个图像文件的元数据

时间:2018-06-04 13:36:38

标签: c# python image metadata ironpython

我很擅长编写代码(C#或python),而且我在更改代码以处理多个项目时遇到问题。我认为,因为C#PropertyItem类没有构造函数,所以你必须首先获取现有图像的属性项然后更改它并分配给新图像。

如果您不确定我所指的是什么,请在评论中查看。

https://msdn.microsoft.com/en-us/library/system.drawing.imaging.propertyitem(v=vs.110).aspx

在任何一种情况下,以下代码都可以对单个图像进行更改。

import sys
sys.path.append(r'C:\Python27\DLLs')
sys.path.append(r'C:\Python27\Lib')
import os
import clr
clr.AddReference('System.Drawing')
from System.Drawing import Image
import System.Text

objImageB = Image.FromFile('C:\Temp\Test.jpg')

propitems = objImageB.PropertyItems

item = propitems[0]
tag = 'MyTag'
data = System.Text.ASCIIEncoding.Unicode.GetBytes(tag)
data[data.Length -1]
item.Type = 1
item.Id = 40092
item.Len = data.Length
item.Value = data
objImageB.SetPropertyItem(item)
objImageB.Save('C:\Temp\Test2.jpg', System.Drawing.Imaging.ImageFormat.Jpeg)

但是,我想要为代码提供一个图像列表,并让它为标记分配一个值列表,1到1.所以一个与标签列表长度相同的图像列表,这就是我遇到麻烦的地方,特别是创建属性项目,正如我在上面代码的第15-22行所做的那样。

例如: Image 1.jpg Image 2.jpg Image 3.jpg

将具有以下关联值: 这个,那个,其他 This2,That2,其它2 This3,That3,Other3

我已经开始创建一些代码,用于创建我想要开始的值列表,但不知道在那之后去哪里创建每个图像的属性项,然后分配它并保存每个图像。

这是我开始的代码,如果它有帮助,但我可能偏离轨道,所以不要让它绕开你的答案,如果是这样。

import sys
sys.path.append(r'C:\Python27\DLLs')
sys.path.append(r'C:\Python27\Lib')
import os
import os.path
from itertools import *
import clr
clr.AddReference('System.Drawing')
from System.Drawing import Image
import System.Text

fstring = []
for i in IN[0]:
    fstring.append(str(i))

images = []
for i in fstring:
    images.append(Image.FromFile(i))

fnames = []
for i in IN[0]:
    fnames.append(os.path.basename(i))

tags = []
for i in IN[1]:
    tags.append(i)

propitems = []
for i in images:
    propitems.append(i.PropertyItems)

#item = [i[0] for i in propitems]

pitem = propitems[0][0]

data = []
for i in tags:
    data.append(System.Text.ASCIIEncoding.Unicode.GetBytes(i))

作为参考,我使用的是名为dynamo的架构程序,它使用铁蟒。它是一个可视化脚本程序,IN [0]和IN [1]将成为输入,IN [0]是图像列表,IN [1]是我想要分配给它的字符串列表。评论每个图像的元数据。

最后,由于我上面使用的程序,我仅限于IronPython 2.7。我没有找到一种方法来使用Pillow和Python来完成这项工作,我想我只是坚持使用C#方式在IronPython中完成它。

提前感谢您的帮助!

0 个答案:

没有答案