0

我想了解为什么这个 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);” 导致消息发送到标准错误。我收到带有我所有照片的这条消息,但为什么呢?

在此消息中: 如何禁用模块 Image::EXIF 中的警告 有人想简单地抑制此消息。

但是我想理解并且最好不要创建此消息,而不仅仅是重定向它。之后我的脚本工作正常,我得到了我想要的所有信息,那么原因是什么,首先创建了这条消息。我是否以错误的方式介绍它?我的图片有没有EXIF信息,这个模块看不懂?创建此错误消息一定是有原因的。

在此先感谢您的任何提示。

4

2 回答 2

3

我的图片有没有EXIF信息,这个模块看不懂?

嗯,这就是消息所说的,所以我想是的。

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

  • 它是模块无法识别的制造商特定格式的信息,或者
  • 在制造商注释标记之前没有遇到制造商标记来指示制造商注释字段的格式。

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

  • 在 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");
于 2013-05-29T20:59:13.993 回答
0

来自数码相机的图像包含一些专有信息,其格式未在 Exif 标准中指定。

Image::ExifTool 在解释许多制造商注释方面做得很好。其他模块可能只是跳过了他们不理解的部分,所以它可能是一个警告,它没有找到制造商注释,但不知道如何解释它。

于 2013-05-30T03:09:50.007 回答