在Facebook上传的许多图片都包含IPTC/IIM字段,这些字段显然是在上传过程中自动添加的:
例如,查看在Facebook上传的这个(个人)图像,并使用Jeffrey的Exif Viewer进行解码:http: //goo.gl/j8LTxx
这是什么?
有没有人知道一些开源Java库,用于读取和写入 JPEG和TIFF的IPTC元数据?现在我正在使用Apache Sanselan.不幸的是,它只能读取IPTC而不是写入(http://commons.apache.org/sanselan/formatsupport.html).
非常感谢您的帮助.
丹尼斯.
我正在将图像上传到服务器,然后处理图像.有趣的是,上传图像后,关键字丢失了.虽然有其他图像属性.
解析标记没有问题,因此请忽略下面的代码段.
using (var xmp = Xmp.FromFile(workingFilePath, XmpFileMode.ReadOnly))
{
var iptc = new Iptc(xmp);
var Keywords = iptc.Keywords;
}
Run Code Online (Sandbox Code Playgroud)
注意:我正在使用FineUploader上传图片.
FineUploader配置 -
var manualUploader = new qq.FineUploader({
element: document.getElementById('fine-uploader-manual-trigger'),
template: 'qq-template-manual-trigger',
request: {
endpoint: '/image/uploadimage',
params: {
datestamp: datetimeStamp
}
},
callbacks: {
},
autoUpload: false,
multiple: true
});
qq(document.getElementById("trigger-upload")).attach("click", function () {
manualUploader.uploadStoredFiles();
});
Run Code Online (Sandbox Code Playgroud)
Fineuploader日志 -
[Fine Uploader 5.10.1] Received 1 files.
[Fine Uploader 5.10.1] Attempting to validate image.
[Fine Uploader 5.10.1] Generating new thumbnail for …
Run Code Online (Sandbox Code Playgroud) 我想在图像元数据块的中间添加一些字符串.根据某些特定标记.我必须在字节级别上执行它,因为.NET不支持自定义元数据字段.
构建块就像1C 02 XX YY YY ZZ ZZ ZZ ...
XX是我需要追加的字段的ID,YY YY是它的大小,ZZ =数据.
我想应该或多或少地读取所有图像数据直到这个标记(1C 02 XX)然后增加大小字节(YY YY),在ZZ的末尾添加数据然后添加原始文件的其余部分?它是否正确?
我该怎么做呢?它需要使用4-5 MB JPEG文件尽可能快地工作.
我对存储有EXIF/IPTC数据的图像有一些问题.
当我使用imageCreateFromJpeg
(旋转/裁剪等)时,新存储的文件不保留EXIF/IPTC数据.
我当前的代码如下所示:
<?php
// Before executing - EXIF/IPTC data is there (checked)
$image = "/path/to/my/image.jpg";
$source = imagecreatefromjpeg($image);
$rotate = imagerotate($source,90,0);
imageJPEG($rotate,$image);
// After executing - EXIF/IPTC data doesn't exist anymore.
?>
Run Code Online (Sandbox Code Playgroud)
难道我做错了什么?
我正在尝试使用Javascript从JPEG文件中提取IPTC照片标题信息.(我知道我可以做这个服务器端,但我正在寻找一个Javascript解决方案.)
我找到了这个脚本,它提取了EXIF信息...但我不知道如何调整它以获取IPTC数据.
是否存在提供此类功能的现有脚本?如果没有,您如何修改EXIF脚本以解析IPTC数据?
UPDATE
我修改了上面链接的EXIF脚本.它可以满足我的需求,但它并不是百分之百地抓取正确的数据.
在401行之后,我补充说:
else if (iMarker == 237) {
// 0xED = Application-specific 13 (Photoshop IPTC)
if (bDebug) log("Found 0xFFED marker");
return readIPTCData(oFile, iOffset + 4, getShortAt(oFile, iOffset+2, true)-2);
}
Run Code Online (Sandbox Code Playgroud)
然后在脚本的其他地方,我添加了这个功能:
function readIPTCData(oFile, iStart, iLength) {
exif = new Array();
if (getStringAt(oFile, iStart, 9) != "Photoshop") {
if (bDebug) log("Not valid Photoshop data! " + getStringAt(oFile, iStart, 9));
return false;
}
var output = '';
var count = 0;
two = new Array(); …
Run Code Online (Sandbox Code Playgroud) 我的所有照片都有GPS坐标.我想包括城市,州,邮政等的标签/ IPTC数据.但我所拥有的只是GPS坐标.我怎样才能以自动化方式获取这些信息并获得有意义的信息(我有成千上万的照片,因此将每个照片输入谷歌地图都行不通).
我写了一个相当广泛的脚本来管理图像.
PHP映像库默认情况下剥离元数据.所以嵌入式数据(如关键字,描述,作者等)已经消失.我写了一个相当广泛的图像管理系统,但遗憾的是IPTC管理仍然缺乏.
在过去,我写了很多自己的函数,但现在我想使用一个库:
环顾四周,我似乎无法找到一个现代或完整的包:
如果有人知道某处可用的任何类或功能集,那就太棒了.我到处寻找,找不到一个.
谢谢你的帮助.我搜索过,找不到像样的图书馆.
我正在寻找一些库来从Jpg文件读取/写入IPTC元数据.开源或付费,没关系.
它应该适用于.NET 3.5和c#.
有人知道这样的图书馆吗?我用Google搜索但没有找到任何东西.
我有一个正在运行的应用程序,可以更改扫描图像的某些元数据。这一直很好,直到我们添加了预处理程序以使用GIMP控制台自动裁剪图像的边框。
我们更改了EXIF数据中的多个字段,但这仍然可以正常工作。但是,如果我想更改任何IPTC字段,则会收到错误“属性已损坏”。
对于非裁剪图像,我可以毫无问题地更改EXIF和IPTC。对于裁剪后的图像,我可以毫无问题地更改EXIF。如果我更改了IPTC信息中的任何内容,则会出现异常。
难道我做错了什么?还是在如何更改图像的EXIF / IPTC数据上还有其他解决方案?
正如在其他帖子中所发现的,我从图像中提取了BitmapMetadata。然后我将其克隆,使其可编辑。之后,我添加了填充以能够添加额外的信息。
据我所知,元数据看起来没有错。在其他工具(如IrfanView或EXIFTool)中,我可以正确更改IPTC标题。
我创建了一个显示问题的测试项目。包含裁剪前后的示例图像。
If isJpg Then
oMetaData.SetQuery("/app13/{ushort=0}/{ulonglong=61857348781060}/iptc/{str=Headline}", "TEST_HEADLINE")
Else
oMetaData.SetQuery("/ifd/{ushort=33723}/{str=Headline}", "TEST_HEADLINE")
End If
Run Code Online (Sandbox Code Playgroud)
System.ArgumentException:属性已损坏。---> System.Runtime.InteropServices.COMException:位图属性大小无效。(来自HRESULT的异常:0x88982F42)