Οργάνωση των 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 Κλάση