Perl模块Image :: EXIF导致错误消息

时间:2013-05-29 20:55:29

标签: perl perl-module exif stderr

我想了解为什么这个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信息,这个模块无法理解?必须有一个原因可以创建此错误消息。

提前感谢您提出任何暗示。

2 个答案:

答案 0 :(得分:3)

  

我的图片是否有EXIF信息,这个模块无法理解?

嗯,这就是消息所说的内容,所以我认为是这样。

查看来源,该模块识别许多制造商的制造商注释,因此更具体地说是以下之一:

  • 该模块无法识别的制造商特定格式的信息,或
  • 在制造商注释标记之前未遇到制造商标记,以指示制造商注释字段的格式。
  

但我想了解并且最好不要创建此消息

  • 为该制作者maker notes添加对Image :: EXIF,
  • 的支持
  • 向Image :: 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在解释很多制造商笔记方面做得很好。其他模块可能只是跳过他们不理解的部分,所以它可能是一个警告,不是它找到制造商的注释,但不知道如何解释它。