2013-05-29 30 views
0

我喜歡理解爲什麼這個perl模塊總是創建這個錯誤信息: 在我的腳本中,我用許多圖片的exif信息做了很多事情,工作正常。Perl模塊Image :: 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($照片);」導致信息stderr。我用我的所有照片得到這個消息,但是爲什麼?

在此消息中: How to disable the warning in module Image::EXIF 有人想簡單地抑制此消息。

但我想明白,最好不要創建此消息,而不僅僅是重定向它。我的腳本事後工作得很好,我得到了我想要的所有信息,所以這是什麼原因,首先創建了這條消息。我是否以錯誤的方式介紹它?我的照片是否有EXIF信息,這個模塊無法理解?必須有一個爲什麼會創建此錯誤消息的原因。

非常感謝您提供任何關於此事的提示。

+1

您可以隨時打開Image :: EXIF模塊,查看它生成此消息的位置,然後按照代碼查看它是如何到達那裏的。 – Narthring

回答

3

我的圖片是否有EXIF信息,這個模塊無法理解?

好吧,這就是消息說的,所以我認爲是這樣。

展望源,模塊識別許多製造商的製造商說明,所以它更具體執行下列操作之一:

  • 它是在一個特定的製造商格式的模塊不能識別信息,或
  • 製造商提示標籤之前沒有遇到製造商標籤來指明製造商提示字段的格式。

但我想了解和最好不要創建此消息

  • 添加該製造商的maker notes到圖像:: EXIF支持,
  • 添加配置選項圖片: :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"); 
+0

添加到我的答案。 – ikegami

0

的圖像包括一些專有信息,其格式不以Exif標準規定。

Image :: ExifTool在解釋很多製造商筆記方面做得很好。其他模塊可能會跳過他們不理解的部分,因此可能不是它發現製造者註釋,而是不知道如何解釋它。

+0

謝謝大家的幫助。我想我可以證實這一點。 – Doris

+0

我下載了一個deprate工具來顯示所有exif信息: – Doris

+0

和「Maker Note」我得到:「8848字節未定義數據」 – Doris