read/write Windows 图片标签(关键字)
read/write Windows image tags (keywords)
.
如何从 Windows 上的文件中 read/write 这些 标签?
我试图在 javascript 和 node.js 中实现它,但未能在任何语言,所以我正在寻找任何线索。
.
单词 tags(有时称为 keywords)似乎很不幸地被选中了,因为它似乎通常描述某个网站的任何元数据文件,例如 EXIF。然而,在 windows 中,您可以将此类 描述性标签 保存为文件 tags 之一。首先 - 关于它们的真正称呼有什么想法吗?
我知道您可以使用各种程序修改它们,例如。在 Adobe Bridge 中,它们被称为文件的 关键字。
.
注意:我确实意识到这不是存储文件标签的最佳解决方案。我真的只需要使用这些,因为我正在使用的图像库大量使用它们。
[编辑.1]
@Ben Fortune:感谢提供线索!尽管如此,Exif-parser 提供了一种读取这些标签的方法,但不允许写入。
答案是:
- 这些 Windows 标签 真的叫做 EXIF XPKeywords。 See the full list here
使用 Exif Parser 解析文件对阅读很有帮助,但是它们以十进制 ASCII 码返回。使用
String.fromCharCode()
并遍历返回的整数,我设法将标签作为字符串获取。
然而,对于阅读和写作,我最终选择了 exiftool。因此,我使用
function run_cmd(cmd, args, callBack ) {
var spawn = require('child_process').spawn;
var child = spawn(cmd, args);
var resp = "";
child.stdout.on('data', function (buffer) { resp += buffer.toString() });
child.stdout.on('end', function() { callBack (resp) });
} // ()
将 exiftool 作为 shell 命令执行 (More on spawning shell command)
.
待读我路过
run_cmd('exiftool', ['-XPKeywords', myFilepath])
阅读 XPKeywords 标签和
theShellResult.match(/:(.*)/)
仅过滤掉关键字 (Nicely explained here)。
.
为了编写(附加) 新的 XPKeywords,我只是将参数更改为:
var writeArg = "-XPKeywords<$XPKeywords " + myNewKeywords
run_cmd('exiftool', [writeArg, myFilepath])
.
我找到了绕过它的方法,但我知道它不是通过 shell 命令执行的,所以我会很平静。因此,问题仍然悬而未决——你能建议一个好的接口来读取和写入 node.js 中的 EXIF 标签吗?
我不想调用外部命令。您可以使用名为 node-ipct 的节点模块。该模块提取包括XPKeywords在内的ipct信息。
.
如何从 Windows 上的文件中 read/write 这些 标签?
我试图在 javascript 和 node.js 中实现它,但未能在任何语言,所以我正在寻找任何线索。
.
单词 tags(有时称为 keywords)似乎很不幸地被选中了,因为它似乎通常描述某个网站的任何元数据文件,例如 EXIF。然而,在 windows 中,您可以将此类 描述性标签 保存为文件 tags 之一。首先 - 关于它们的真正称呼有什么想法吗?
我知道您可以使用各种程序修改它们,例如。在 Adobe Bridge 中,它们被称为文件的 关键字。
.
注意:我确实意识到这不是存储文件标签的最佳解决方案。我真的只需要使用这些,因为我正在使用的图像库大量使用它们。
[编辑.1]
@Ben Fortune:感谢提供线索!尽管如此,Exif-parser 提供了一种读取这些标签的方法,但不允许写入。
答案是:
- 这些 Windows 标签 真的叫做 EXIF XPKeywords。 See the full list here
使用 Exif Parser 解析文件对阅读很有帮助,但是它们以十进制 ASCII 码返回。使用
String.fromCharCode()
并遍历返回的整数,我设法将标签作为字符串获取。
然而,对于阅读和写作,我最终选择了 exiftool。因此,我使用
function run_cmd(cmd, args, callBack ) { var spawn = require('child_process').spawn; var child = spawn(cmd, args); var resp = ""; child.stdout.on('data', function (buffer) { resp += buffer.toString() }); child.stdout.on('end', function() { callBack (resp) }); } // ()
将 exiftool 作为 shell 命令执行 (More on spawning shell command)
.
待读我路过
run_cmd('exiftool', ['-XPKeywords', myFilepath])
阅读 XPKeywords 标签和
theShellResult.match(/:(.*)/)
仅过滤掉关键字 (Nicely explained here)。
.
为了编写(附加) 新的 XPKeywords,我只是将参数更改为:
var writeArg = "-XPKeywords<$XPKeywords " + myNewKeywords
run_cmd('exiftool', [writeArg, myFilepath])
.
我找到了绕过它的方法,但我知道它不是通过 shell 命令执行的,所以我会很平静。因此,问题仍然悬而未决——你能建议一个好的接口来读取和写入 node.js 中的 EXIF 标签吗?
我不想调用外部命令。您可以使用名为 node-ipct 的节点模块。该模块提取包括XPKeywords在内的ipct信息。