Doris
Doris

Reputation: 1

Perl module Image::EXIF causes error message

I like to understand why this perl module is always creating this error message: In my script I do many things with the exif information of some pictures, that works fine.

Here my minimized script:

#! /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";

And the output:

exif is defined
(null): maker note not supported
got exif info

So the line "$exif->file_name($foto);" is causing the message to stderr. I get this message with all my pictures, but why?

In this message: How to disable the warning in module Image::EXIF someone wants to simply supress this message.

But I would like to understand and preferable not create this message, not just redirecting it. My script works fine afterwards, I get all information I want, so what is the reason, this message is created in the first place. Do I introduce it the wrong way? Do my picture have EXIF information, which this module can not understand? There must be a reason why this error message is created.

Thank you in advance for any hint, on this matter.

Upvotes: 0

Views: 274

Answers (2)

Steve Sanbeg
Steve Sanbeg

Reputation: 887

Images from digital cameras include some proprietary information whose format isn't specified in the Exif standards.

Image::ExifTool does a good job at interpreting a lot of maker notes. Other modules may just skip over the parts they don't understand, so it's probably a warning to not that it found the maker note, but doesn't know how to interpret it.

Upvotes: 0

ikegami
ikegami

Reputation: 385916

Do my picture have EXIF information, which this module can not understand?

Well, that's what the message says, so I presume so.

Looking into the source, the module recognises the maker notes of many makers, so it's more specifically one of the following:

  • It's information in a maker-specific format the module doesn't recognise, or
  • No manufacturer tag was encountered before the maker note tag to indicate the format of the maker note field.

But I would like to understand and preferable not create this message

  • Add support for that maker's maker notes to Image::EXIF,
  • Add a configuration option to Image::EXIF to silence this warning, or
  • remove the maker notes from your image.

Some relevant code:

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");

Upvotes: 3

Related Questions