2009-12-15 16 views
5

मैं वर्तमान में एक परियोजना पर काम कर रहा हूँ जो मुझे आवश्यकता है सभी टैग और सभी छवि डेटा और युक्त एक फ़ाइल युक्त इन फ़ाइलों से एक TIFF चित्र फिर से संगठित करने के लिए एक फ़ाइल में एक TIFF चित्र विभाजित करने के लिए से सभी टैग निकालें । एकमात्र समस्या यह है कि ऐसा लगता है कि लिबटीएफएफ छवि से सभी टैग को पकड़ने का कोई आसान तरीका नहीं प्रदान करता है। मैंने टैग पुनर्प्राप्त करने के लिए TIFFGetTagListCount और फिर TIFFGetField का उपयोग करने का प्रयास किया है, लेकिन यह केवल टैग का एक छोटा सबसेट देता है। मैंने अपना खुद का संस्करण रोल करना शुरू कर दिया है, लेकिन मैं सिर्फ दोबारा जांच करना चाहता हूं और सुनिश्चित करना चाहता हूं कि मैं कुछ नहीं देख रहा हूं क्योंकि यह एक सुंदर स्पष्ट विशेषता जैसा लगता है जिसे लाइब्रेरी में शामिल किया जाना चाहिए।LibTIFF: एक TIFF चित्र

+0

जिज्ञासा से बाहर, तो आप इस समस्या का समाधान मिला? –

उत्तर

1

addingtags.html in the libtiff documentation (वे नजरअंदाज कर दिया रहे हैं डिफ़ॉल्ट रूप से) अमानक टैग से निपटने के बारे में जानकारी शामिल है। क्या यह समस्या हो सकती है?

+0

गैर मानक टैग मुद्दा वास्तव में, के रूप में TIFF_IMAGEWIDTH और TIFF_IMAGELENGTH की तरह साधारण मानक टैग टैग सूची गिनती में शामिल हो रहे हैं नहीं है नहीं कर रहे हैं। यह वास्तव में काफी अजीब है। –

1

आप छवि के tif_dir फ़ील्ड का उपयोग कर सकते हैं। यह कम से कम निम्नलिखित क्षेत्रों के साथ एक struct है:

  • td_customValueCount 'कस्टम' टैग गणना की संख्या में शामिल हैं,
  • td_customValuestd_customValueCount टैग मूल्यों (0 से अनुक्रमित) की सूची है, और प्रकार TIFFTagValue * की है ।

तो आप इस तरह कुछ करने के लिए सक्षम होना चाहिए (ऑनलाइन कोड के सही ढंग से, इस पाठ्यक्रम के अपरीक्षित, है!):

for (i=0; i < tiffimage->tif_dir->td_customValueCount; ++i) { 
    const TIFFFieldInfo *info = tiffimage->tif_dir->td_customValues[i].info; 
    const char *tagname = info->field_name(); 
    /* process tag */ 
} 

TIFFDirectory Struct Reference देखें। उम्मीद है की वो मदद करदे।

0

tiffdump उपयोगिता (जो libtiff के साथ जहाजों) इसे पूरा करती है, लेकिन कोड को देखते हुए, ऐसा लगता है कि वे ज्यादातर लाइब्रेरी के आसपास काम कर रहे हैं। टैग जानकारी पढ़ने के लिए वे वास्तव में lseek और read पर कॉल करते हैं।

4

सभी टैग मुद्रण tifffile.py साथ:

from tifffile import TiffFile 
for page in TiffFile(path_to_file): 
    for tag in page.tags.values(): 
     print tag.name, tag.code, tag.dtype, tag.count, tag.value 
5

यहाँ बंद कर देता है है आप सभी टैग स्कैन करने के लिए प्राप्त कर सकते हैं:

#include "LibTIFF/tif_dir.h" 
... 

TIFFDirectory *td = &tif->tif_dir; 

for (int fi = 0, nfi = tif->tif_nfields; nfi > 0; nfi--, fi++) { 
    const TIFFFieldInfo* fip = tif->tif_fieldinfo[fi]; 

    // test if tag value is set 
    // (lifted directly form LibTiff _TIFFWriteDirectory) 

     if(fip->field_bit == FIELD_CUSTOM) { 
      int ci, is_set = FALSE; 

      for(ci = 0; ci < td->td_customValueCount; ci++) 
       is_set |= (td->td_customValues[ci].info == fip); 

      if(!is_set) 
       continue; 
     } else if(!TIFFFieldSet(tif, fip->field_bit)) 
      continue; 

     // else: process the fip->field_tag 


    } 

ध्यान दें कि आपको यह ध्यान रखना होगा कि कुछ टैग दो बार (लंबे और लघु संस्करण) दिखाई देंगे, लेकिन इनमें से केवल एक मूल्य होगा। उपयोग करने के लिए सही प्रकार शामिल हेडर (TIFFDirectory संरचना) में देखा जा सकता है।

वहाँ भी

कैसे टैग को पढ़ने के लिए पर अन्य कैच, लेकिन यह कम से कम आप उन सभी से अधिक पाश कर देगा (मानक वाले)। यदि आप अटक जाते हैं तो पॉइंटर्स के लिए tif_dirinfo.c देखें।

+0

ठीक है क्योंकि 'tif_dir.h' एक आंतरिक शीर्षलेख है (यानी निर्मित लाइब्रेरी द्वारा खुलासा नहीं किया गया है), इसमें सभी प्रकार की समस्याएं जैसे कि परिभाषाएं, लापता निर्भरता इत्यादि शामिल हैं। इस के आसपास कोई अन्य तरीका? –

+0

@ अनीश रामास्वामी मुझे नहीं पता। जैसा कि कहा गया है, यह लिबटीएफएफ स्रोत से रिवर्स-इंजीनियर है। यदि आपको पुनर्वितरण के साथ समस्याएं हैं, तो इसे अलग अनुवाद इकाई या एक छोटी पुस्तकालय में अलग करने का प्रयास करें।गायब होने के लिए के रूप में। - अन्य भी शामिल किया जाना चाहिए। आईआईआरसी, केवल हेडर ही करेंगे, lib से किसी भी .c को संकलित करने की आवश्यकता नहीं है। – user362515

+0

यह बस सुरुचिपूर्ण लगता है। मैं अभी भी शिकार पर हूँ। धन्यवाद! –

संबंधित मुद्दे