我想了解为什么这个perl模块总是会创建此错误消息: 在我的剧本中,我用一些图片的exif信息做了很多事情,这很好。
这里是我最小化的脚本:
#! /usr/bin/perl
use strict;
use warnings;
use Image::EXIF;
my $foto = "test/DSC01340.JPG";
my $exif = Image::EXIF->new;
print "exif is defined\n";
$exif->file_name($foto);
print "got exif info\n";
输出:
exif is defined
(null): maker note not supported
got exif info
所以行“$ exif-> file_name($ foto);”导致消息发送到stderr。我的所有照片都收到了这条消息,但为什么呢?
在此消息中: How to disable the warning in module Image::EXIF 有人想简单地压制这条消息。
但我想了解并且最好不要创建此消息,而不仅仅是重定向它。我的脚本之后工作正常,我得到了我想要的所有信息,所以原因是什么,这个消息首先被创建。我以错误的方式介绍它吗?我的图片是否有EXIF信息,这个模块无法理解?必须有一个原因可以创建此错误消息。
提前感谢您提出任何暗示。
答案 0 :(得分:3)
我的图片是否有EXIF信息,这个模块无法理解?
嗯,这就是消息所说的内容,所以我认为是这样。
查看来源,该模块识别许多制造商的制造商注释,因此更具体地说是以下之一:
但我想了解并且最好不要创建此消息
一些相关代码:
struct makerfun makers[] = {
{ 0, "unknown", NULL, NULL }, /* default value */
{ EXIF_MKR_CANON, "canon", canon_prop, canon_ifd },
{ EXIF_MKR_OLYMPUS, "olympus", olympus_prop, olympus_ifd },
{ EXIF_MKR_FUJI, "fujifilm", fuji_prop, fuji_ifd },
{ EXIF_MKR_NIKON, "nikon", nikon_prop, nikon_ifd },
{ EXIF_MKR_CASIO, "casio", NULL, casio_ifd },
{ EXIF_MKR_MINOLTA, "minolta", minolta_prop, minolta_ifd },
{ EXIF_MKR_SANYO, "sanyo", sanyo_prop, sanyo_ifd },
{ EXIF_MKR_ASAHI, "asahi", asahi_prop, asahi_ifd },
{ EXIF_MKR_PENTAX, "pentax", asahi_prop, asahi_ifd },
{ EXIF_MKR_LEICA, "leica", leica_prop, leica_ifd },
{ EXIF_MKR_PANASONIC, "panasonic", panasonic_prop, panasonic_ifd },
{ EXIF_MKR_SIGMA, "sigma", sigma_prop, sigma_ifd },
{ EXIF_MKR_UNKNOWN, "unknown", NULL, NULL },
};
...
/*
* Try to process maker note IFDs using the function
* specified for the maker.
*
* XXX Note that for this to work right, we have to see
* the manufacturer tag first to figure out makerifd().
*/
if (makers[t->mkrval].ifdfun) {
if (!offsanity(prop, 1, dir))
dir->next =
makers[t->mkrval].ifdfun(prop->value, md);
} else
exifwarn("maker note not supported");
答案 1 :(得分:0)
数码相机中的图像包含一些专有信息,其格式未在Exif标准中指定。
Image :: ExifTool在解释很多制造商笔记方面做得很好。其他模块可能只是跳过他们不理解的部分,所以它可能是一个警告,不是它找到制造商的注释,但不知道如何解释它。