使用javascript读取jpeg xmp元数据

问题描述 投票:0回答:2

有没有办法用javascript读取jpg元数据?我主要感兴趣的是 xmp 评级值(Windows 资源管理器中显示 5 颗星的评级)。拍摄照片的时间也很有趣。

我知道我可以使用服务器端代码获取此数据,但我想避免额外的往返来获取此信息。

我的用例是一个简单的画廊网站,我想在其中显示 Windows 资源管理器中给出的评级,可能还包括照片拍摄时间等信息。

javascript windows jpeg xmp
2个回答
2
投票

JPEG 中的 XMP 元数据实际上只是嵌入到 JPEG 中的纯文本。

如果您将 JPEG 作为文本文件打开,然后按 ctr-f“xmp”,您将看到 XMP 元数据。它将采用 xml 格式。

在 javascript 中,您可以使用文件读取器 api 来读取文本,然后解析 xmp 字符串以检索您要查找的信息。


0
投票

函数 readPersonsFromMetadata() { var people = new Array();

if (ExternalObject.AdobeXMPScript == undefined) ExternalObject.AdobeXMPScript = new ExternalObject('lib:AdobeXMPScript');

var xmp = new XMPMeta(activeDocument.xmpMetadata.rawData);
var ns = "http://www.metadataworkinggroup.com/schemas/regions/";

// The face rectangles are stored in the jpeg metadata by Lightroom Classic

for (var i = 1; i < 1000; i++) {
    var personName = xmp.getProperty(ns, "mwg-rs:Regions/mwg-rs:RegionList[" + i + "]/mwg-rs:Name");

    if (personName == undefined) break;  // exit if we got to the end of the rectangles
    if (personName.Length == 0) continue; // Skip over blank names

    // x, y, w, and h are in the range 0 to 1.0 and represent a fraction of the document width and height
    var x = parseFloat(xmp.getProperty(ns, "mwg-rs:Regions/mwg-rs:RegionList[" + i + "]/mwg-rs:Area/stArea:x"));
    var y = parseFloat(xmp.getProperty(ns, "mwg-rs:Regions/mwg-rs:RegionList[" + i + "]/mwg-rs:Area/stArea:y"));
    var w = parseFloat(xmp.getProperty(ns, "mwg-rs:Regions/mwg-rs:RegionList[" + i + "]/mwg-rs:Area/stArea:w"));
    var h = parseFloat(xmp.getProperty(ns, "mwg-rs:Regions/mwg-rs:RegionList[" + i + "]/mwg-rs:Area/stArea:h"));
    persons.push(new Array(personName, x, y, w, h));
}

try { ExternalObject.AdobeXMPScript.unload(); ExternalObject.AdobeXMPScript = undefined; }
catch (e) { alert('Unable to unload the AdobeXMPScript library!'); }
return persons;

};

© www.soinside.com 2019 - 2024. All rights reserved.