Reputation: 1
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
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
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:
But I would like to understand and preferable not create this message
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