Οργάνωση των TIFF Δεδομένων Ετικέτας

 

Ο προσδιορισμός TIFF, για να διευκολύνει αυτούς που αναπτύσσουν εφαρμογές, στην επιλογή των κατάλληλων ετικετών που πρέπει να γράψουν σ` ένα TIFF αρχείο και στο ποιες ετικέτες είναι σημαντικό να διαβάζονται, ορίζει την έννοια των βασικών τύπων TIFF εικόνων. Αυτοί οι βασικοί τύποι ορίζονται από τον τύπο των δεδομένων εικόνας που αποθηκεύονται : bilevel (δύο επιπέδων), gray-scale, palette-color και full-color. Κάθε βασικός τύπος έχει ένα ελάχιστο σύνολο από ετικέτες, οι οποίες απαιτούνται να εμφανίζονται σε κάθε τύπο TIFF αρχείου.

Στο προσδιορισμό TIFF 5.0, αυτοί οι βασικοί τύποι αναφέρονται ως Κλάσεις (Classes) TIFF. Κάθε TIFF αρχείο αποτελείται από ένα κοινό βασικό τύπο (Class X) και από μια πρόσθετη κλάση που εξαρτάται από τον τύπο των δεδομένων εικόνας που αποθηκεύονται. Οι κλάσεις ήταν Class B (bilevel), Class G (gray-scale), Class P (palette-color) και Class R (full-color RGB).

Ο προσδιορισμός TIFF 6.0 ξανά-ορίζει αυτές τις κλάσεις σε τέσσερις ξεχωριστούς βασικούς τύπους σύνθετης TIFF αρχείου. Η Class X συνδυάζεται με κάθε από τις άλλες τέσσερις κλάσεις για να σχηματίσει τους βασικούς τύπους : bilevel, gray-scale, palette-color, full-color. Ωστόσο, η έννοια των κλάσεων είναι αυτή που υπερισχύει για τον λόγο ότι τα περισσότερα αρχεία που υπάρχουν σήμερα είναι

H μεταβλητή IFDOffset είναι μία 32-bit  τιμή, όπου είναι η offset θέση του πρώτου Καταλόγου Αρχείου Εικόνας  (IFD) στο  TIFF αρχείο. Αυτή η τιμή μπορεί να περαστεί ως μια παράμετρος σε μία συνάρτηση ψαξίματος  (seek function)  ενός αρχείου, για να βρει την αρχή των πληροφοριών του αρχείου εικόνας. Αν το IFD βρίσκεται ακριβώς μετά την επικεφαλίδα, η τιμή του IFDOffset είναι 08 h.

 

ΚΑΤΑΛΟΓΟΣ ΑΡΧΕΙΟΥ ΕΙΟΝΑΣ (Image File Directory-IFD)

 Ένας Κατάλογος αρχείου εικόνας (IFD) είναι μια συλλογή πληροφοριών, παρόμοιος με μια επικεφαλίδα, και χρησιμοποιείται για να περιγράψει τα raster δεδομένα με τα οποία συνδέεται. Περιέχει πληροφορίες σχετικά με το  ύψος, πλάτος και βάθος της εικόνας, τον αριθμό των χρωματικών επιπέδων και τον τύπο της συμπίεσης  που χρησιμοποιείται στα raster δεδομένα. Αντίθετα  με μια τυπική, στατική επικεφαλίδα, ένα  IFD  είναι δυναμικό και μπορεί να ποικίλει σε μέγεθος, ακόμα μπορεί να βρεθεί οπουδήποτε μέσα σ` ένα TIFF αρχείο ενώ περισσότερα του ενός  IFD, μπορούν να υπάρχουν μέσα σ` ένα αρχείο. Η μορφή ενός  IFD φαίνεται στο σχήμα TIFF-I

Μια εσφαλμένη εντύπωση για το TIFF, είναι ότι η πληροφορία που αποθηκεύεται στις IFD ετικέτες, είναι στην πραγματικότητα μέρος της επικεφαλίδας του TIFF. Στην πραγματικότητα, ενώ είναι αλήθεια ότι τα άλλα formats αποθηκεύουν στην επικεφαλίδα, τον τύπο της πληροφορίας που βρίσκεται στο IFD, η επικεφαλίδα του TIFF δεν περιέχει αυτή την πληροφορία. Ωστόσο, είναι πιθανόν να θεωρήσεις το IFD στο TIFF αρχείο ως μια προέκταση της επικεφαλίδας του.

Ένα TIFF αρχείο μπορεί να περιέχει οποιονδήποτε αριθμό εικόνων. Κάθε εικόνα θεωρείται ως ένα ξεχωριστό υπό-αρχείο (subfile), το οποίο είναι ένα raster, και έχει ένα IFD που περιγράφει τα raster δεδομένα. Κάθε, TIFF υπό-αρχείο μπορεί να γραφεί ως ένα ξεχωριστό TIFF αρχείο ή μπορεί να αποθηκευτεί με άλλα υπό-αρχεία σε ένα μόνο TIFF αρχείο. Κάθε raster υπό-αρχείο και IFD μπορεί να υπάρχει οπουδήποτε στο TIFF αρχείο μετά τις επικεφαλίδες και μπορεί να υπάρχει μόνο ένα  IFD ανά εικόνα.

Αυτό μπορεί να ακούγεται μπερδεμένο, αλλά δεν είναι πραγματικά. Έχουμε δει ότι η TIFF επικεφαλίδα περιέχει μία offset τιμή που δείχνει την θέση του πρώτου IFD στο TIFF αρχείο. Για να βρούμε το IFD, αυτό που πρέπει να κάνουμε είναι να ψάξουμε σ’ αυτό το offset και να διαβάσουμε την πληροφορία του IFD. Το τελευταίο πεδίο κάθε IFD περιέχει μια offset τιμή για το επόμενο IFD, αν υπάρχει. Αν η offset τιμή του IFD είναι 00h, τότε δεν υπάρχουν περισσότερες εικόνες για διάβασμα στο TIFF αρχείο.

Ένα IFD μπορεί να ποικίλει σε μέγεθος, επειδή μπορεί να περιέχει ένα μεταβλητό αριθμό εγγραφών δεδομένων, που ονομάζονται ετικέτες (tags). Κάθε ετικέτα περιέχει ένα μοναδικό κομμάτι πληροφορίας, ακριβώς όπως τα πεδία μέσα σε μία επικεφαλίδα. Ωστόσο, υπάρχει μια διαφορά : οι ετικέτες μπορούν να προστεθούν και να διαγραφούν, από ένα IFD με πολύ μεγάλη ευκολία - ενώ τα πεδία μίας τροποποιήσιμης επικεφαλίδας, από την άλλη μεριά, είναι σταθερά κι αμετακίνητα.

Επίσης ο αριθμός των ετικετών που βρίσκονται μέσα σ’ ένα  IFD  μπορεί να ποικίλει ενώ ο αριθμός των πεδίων σ’ ένα τύπο επικεφαλίδας είναι σταθερός.

 Η μορφή ενός Καταλόγου Αρχείου Εικόνας (IFD) φαίνεται στην παρακάτω δομή.

 

typedef   struct _TifIfd 

  {

   WORD  NumDirEntries ;   / *   Aριθμος  Ετικετών  στο  IFD  * /

    TIFTAG  TagList  []  ;      / *   Πινακας  Ετικετών  στο  * /

    DWORD  NextIFDOffset  ;  / *  Tο  offset  του επόμενου  ΙFD  * /  

   }   ΤIFIFD  ;

 

Η μεταβλητή  ΝumDirEntries, είναι μία 2- byte τιμή που δηλώνει τον αριθμό των ετικετών που υπάρχουν στο IFD. κάθε δομή ετικέτας είναι μεγέθους 12-bytes και στον κώδικα παραπάνω αναπαριστάται, από έναν πίνακα από δομές δεδομένων τύπου  tiftag. Ο αριθμός των ετικετών ανά IFD περιορίζεται σε 65535.

Η μεταβλητή NextIFDOffset περιέχει την offset θέση, της αρχής του επόμενου IFD. Aν δεν υπάρχουν περισσότερα IFD, τότε η τιμή του πεδίου αυτού είναι 00h.

 

EΤΙΚΕΤΕΣ  (Tags)

 Όπως αναφερθήκαμε προηγουμένως, η ετικέτα μπορεί να θεωρηθεί ως ένα πεδίο δεδομένων σ’ ένα αρχείο επικεφαλίδας. Αν και γνωρίζουμε ότι ένα πεδίο δεδομένων επικεφαλίδας μπορεί να περιέχει δεδομένα μόνο ενός σταθερού μεγέθους και τα οποία είναι συνήθως τοποθετημένα μόνο σε μια σταθερή θέση μέσα σ’ ένα αρχείο επικεφαλίδας, ωστόσο μία ετικέτα μπορεί να περιέχει ή να δείχνει τα δεδομένα που έχουν μέγεθος οποιονδήποτε αριθμό bytes και είναι τοποθετημένα οπουδήποτε μέσα σ’ ένα  IFD.

H πολυμορφία των ετικετών  TIFF, πληρώνεται με το τίμημα του μεγέθους του. Ένα πεδίο επικεφαλίδας που χρησιμοποιείται για να κρατάει ένα byte δεδομένων πρέπει να έχει μέγεθος ένα byte. Μια ετικέτα που περιέχει ένα byte πληροφορίας πρέπει πάντα να έχει μέγεθος 12!! Bytes

 Mία  TIFF  ετικέτα έχει  την παρακάτω  12-byte  δομή.

 

typedef   struct_TifTag

  {

   WORD  TafId  ;            / *   Αναγνωριστικό  Ετικέτας  * /

    WORD   DataType  ;    / *   Bαθμωτός  Τύπος  Δεδομένων  * /

    DWORD  DataCount  ;  / *   Aριθμός  πραγμάτων  που αναφέρεται η Ετικέτα * /

    DWORD   DataOffset  ;   / *  Το offset  στα  δεδομένα  * /

  }   ΤIFTAG  ;

        

        H μεταβλητή ΤafId είναι μια αναγνωριστική αριθμητική τιμή, για τον τύπο της πληροφορίας που περιέχει η ετικέτα. Πιο συγκεκριμένα, η ΤagId δηλώνει τι αναπαριστά η πληροφορία της ετικέτας. Τυπικές πληροφορίες που βρίσκονται σε κάθε TIFF αρχείο, συμπεριλαμβανομένων  του ύψους, του πλάτους της εικόνας, του βάθους κάθε pixel και του τύπου της κωδικοποίησης των δεδομένων που χρησιμοποιείται για την συμπίεση των raster δεδομένων. Οι ετικέτες φυσιολογικά δηλώνονται από τις ΤafId  τιμές τους και πρέπει πάντα να είναι γραμμένες σ’ ένα  IFD κατά αύξουσα σειρά των τιμών που βρίσκονται σε πεδίο του TafId.

H  μεταβλητή  DataType  περιέχει μία τιμή που δηλώνει τον βαθμωτό τύπο των δεδομένων που βρίσκονται σε μια ετικέτα. Οι τιμές που υποστηρίζονται είναι οι παρακάτω.         

                

1

BYTE

8-bit μη προσημασμένος ακέραιος

2

ASCII

8-bit συμβολοσειρά (που τελειώνει με NULL)

3

SHORT

16-bit μη προσημασμένος ακέραιος

4

LONG

32-bit μη προσημασμένος ακέραιος

5

RATIONAL

Δύο 32-bit μη προσημασμένοι ακέραιοι

Ο τύπος δεδομένων rational  είναι στην πραγματικότητα δύο LONG τιμές και χρησιμοποιούνται για την αποθήκευση των δύο συστατικών μιας κλασματικής τιμής. Η πρώτη τιμή αποθηκεύει τον αριθμητή και η δεύτερη τιμή αποθηκεύει τον παρανομαστή.

 

Η έκδοση TIFF6.0 πρόσθεσε τους παρακάτω νέους τύπους δεδομένων.

6

SBYTE

8-bit προσημασμένος ακέραιος

7

UNDEFINE

8-bit byte

8

SSHORT

16-bit προσημασμένος ακέραιος

9

SLONG

32-bit προσημασμένος ακέραιος

10

SRATIONAL

Δύο  32-bit προσημασμένοι ακέραιοι

11

FLOAT

4-byte μονής-ακρίβειας ΙΕΕΕ δεκαδική τιμή

12

DOUBLE

8-byte διπλής-ακρίβειας ΙΕΕΕ δεκαδική τιμή

         Με εξαίρεση τις ετικέτες, SMinSampleValue και SMaxSampleValue (οι οποίες μπορούν να χρησιμοποιήσουν οποιονδήποτε τύπο δεδομένων), κανένας από τους νέους τύπους δεδομένων δεν χρησιμοποιούνται από κάποιες TIFF 6.0 ετικέτες. Αλλά ωστόσο, αυτές υπάρχουν μόνο σε ιδιωτικές ετικέτες.

Η μεταβλητή DataCount δηλώνει τον αριθμό των πραγμάτων που αναφέρονται από την ετικέτα και δεν δείχνει το πραγματικό μέγεθος των δεδομένων. Ωστόσο, αν η DataCount έχει την τιμή 08h,δεν δηλώνει απαραίτητα ότι 8 bytes δεδομένων υπάρχουν στην ετικέτα. Αυτή η τιμή δηλώνει ότι οκτώ πράγματα υπάρχουν για τον τύπο δεδομένων που προσδιορίζεται από αυτή την ετικέτα. Για παράδειγμα, αν DataCount=08h και DataType=03h,(δηλώνει (σύμφωνα και με τον παρακάνω πίνακα ) ότι τα δεδομένα ετικέτας, είναι οκτώ συνεχείς 16-bit μη προσημασμένοι ακέραιοι, ένα σύνολο μεγέθους 32-bytes.

H μεταβλητή Dataoffset είναι μια μεταβλητή 4-bytes, που περιέχει την offset θέση των πραγματικών δεδομένων ετικέτας μέσα σ` ένα TIFF αρχείο. Αν τα δεδομένα ετικέτας είναι τέσσερα bytes ή μικρότερου μεγέθους, τότε τα δεδομένα μπορεί να βρίσκονται μέσα σ` αυτό το πεδίο. Αν τα δεδομένα ετικέτας έχουν μεγαλύτερο μέγεθος από τέσσερα bytes, τότε αυτό το πεδίο περιέχει ένα offset της θέσης των δεδομένων στο TIFF αρχείο. Αποθηκεύοντας δεδομένα μέσα στο πεδίο DAtaOffset είναι μια βελτιστοποίηση για τον TIFF προσδιορισμό, που όμως δεν απαιτείται να εκτελείται. Τα περισσότερα δεδομένα είναι τυπικά αποθηκευμένα εκτός της ετικέτας και βρίσκονται πριν ή μετά τα IFD (σχήμα TIFF-I)

 

Οργάνωση των TIFF Δεδομένων Ετικέτας

 

Ο προσδιορισμός  TIFF, για να διευκολύνει αυτούς που αναπτύσσουν εφαρμογές, στην επιλογή των κατάλληλων ετικετών που πρέπει να γράψουν σ’ ένα  ΤΙFF  αρχείο και στο ποιες ετικέτες είναι σημαντικό να διαβάζονται, ορίζει την έννοια των  “βασικών  τύπων”  TIFF  εικόνων. Αυτοί  οι  “βασικοί  τύποι”  ορίζονται από τον τύπο των δεδομένων  εικόνας που αποθηκεύονται :  bilevel  (δύο-επιπέδων), gray-scale, palette-color  και  full-color. Κάθε  “βασικός  τύπος”  έχει ένα ελάχιστο σύνολο από ετικέτες, οι οποίες απαιτούνται να εμφανίζονται σε κάθε τύπο  TIFF  αρχείου.

Στο προσδιορισμό TIFF 5.0, αυτοί οι βασικοί τύποι αναφέρονται ως κλάσεις (Classes) TIFF. Κάθε TIFF αρχείο αποτελείται από ένα κοινό βασικό τύπο (Classes X) και από μια πρόσθετη κλάση που εξαρτάται από τον τύπο των δεδομένων εικόνας που αποθηκεύονται. Οι κλάσεις ήταν Class B (bilevel), class G (gray-scale), Class P(palette-color) και Class R (full-color RGB).

Ο προσδιορισμός TIFF 6.0 ξανά-ορίζει αυτές τις κλάσεις σε τέσσερις ξεχωριστούς βασικούς τύπους σύνθεσης TIFF αρχείου. Η Class X συνδυάζεται με κάθε από τις άλλες τέσσερις κλάσεις για να σχηματίσει τους βασικούς τύπους : bilevel, gray-scale, palette-color, full-color. Ωστόσο, η έννοια των κλάσεων είναι αυτή που υπερισχύει για τον λόγο ότι τα περισσότερα αρχεία που υπάρχουν σήμερα είναι αρχεία TIFF5.0, έτσι τα αρχεία TIFF θα αναφέρονται σύμφωνα μ’ αυτές τις κλάσεις για πολλά χρόνια ακόμα.

Αξίζει ακόμη να αναφέρονται ότι μια de facto κλάση TIFF, η Class F υπάρχει ειδικά για την αποθήκευση fax εικόνων, χρησιμοποιώντας το TIFF format, και πολλοί θεωρούν την TIFF Class F ως μια εξαίρετη μορφή αποθήκευσης για δεδομένα fax.

Ο παρακάτω πίνακας περιέχει τις ελάχιστες ετικέτες που απαιτούνται και μπορεί να εμφανίζονται στο  IFD  κάθε  TIFF  6.0  “βασικό  τύπο”. Σημειώστε ότι μερικές από αυτές τις ετικέτες έχουν  default  τιμές που χρησιμοποιούνται αν η ετικέτα δεν εμφανίζεται σε κάποιο  TIFF  αρχείο.

Όνομα Κλάσης

Τύπος Ετικέτας

Όνομα Ετικέτας

Bilevel και

 Gray-scale

254

256

NewSubfile Type

Image Width

 

257

258

Image Length

BitsPerSample

 

259

262

Compression

PhotometricInterpretation

 

273

277

StripOffset

SamplewPerPixel

 

278

279

RowPerStrip

StripByteCounts

 

282

283

XResolution

YResolution

 

296

ResolutionUnit

Oι παραπάνω κλάσεις περιέχουν τις παραπάνω 13 ετικέτες συν τις παραπάνω ετικέτες

Palette-color

320

ColorMap

RGB

284

PlanarConfiguration

YCBCr

529

530

YCbCrCoefficients

YCbCrSubSampling

 

531

532

YCbCrPositioning

ReferenceBlackWhite

Class F

326

BadFaxLines

 

327

328

CleanFaxData

ConsecutiveBadFaxLines

Πίνακας -1. Ελάχιστες  Απαιτούμενες  Ετικέτες  για  Κάθε  ΤIFF  Κλάση