Ich arbeite gerade an einem Projekt, bei dem ich ein TIFF-Bild in eine Datei mit allen Tags und einer Datei mit allen Bilddaten aufteilen und ein TIFF-Bild aus diesen Dateien rekonstruieren soll . Das einzige Problem ist, dass LibTIFF anscheinend keine einfache Möglichkeit bietet, alle Tags eines Bildes zu erfassen. Ich habe versucht, mit TIFFGetTagListCount und dann TIFFGetField das Tag abzurufen, aber das gibt nur eine kleine Teilmenge der Tags zurück. Ich habe angefangen, meine eigene Version zu rollen, aber ich möchte nur überprüfen, ob ich etwas übersehen habe, da dies ein ziemlich offensichtliches Feature ist, das in der Bibliothek enthalten sein sollte.LibTIFF: Alle Tags aus einem TIFF-Bild extrahieren
Antwort
addingtags.html in the libtiff documentation enthält Informationen zum Umgang mit nicht standardmäßigen Tags (standardmäßig werden sie ignoriert). Könnte das das Problem sein?
Nicht standardmäßige Tags sind nicht das Problem, da einfache Standard-Tags wie TIFF_IMAGEWIDTH und TIFF_IMAGELENGTH anscheinend nicht in die Anzahl der Tag-Listen aufgenommen werden. Es ist eigentlich ziemlich seltsam. –
Sie können tif_dir
Feld des Bildes verwenden. Es ist eine Struktur mit mindestens den folgenden Feldern:
td_customValueCount
enthält die Anzahl der ‚kundenspezifischen‘ -Tag Zählungentd_customValues
ist die Liste dertd_customValueCount
Variablenwerte (von 0 indexiert), und ist vom TypTIFFTagValue *
.
So sollen Sie in der Lage sein, so etwas zu tun (in wahrer Art und Weise von Online-Code, dann ist dies nicht getestet, natürlich!):
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 See. Ich hoffe, das hilft.
Das Dienstprogramm tiffdump (das mit libtiff geliefert wird) führt dies aus, aber wenn man sich den Code anschaut, sieht es so aus, als würden sie hauptsächlich in der Bibliothek arbeiten. Sie rufen tatsächlich lseek
und read
, um die Tag-Informationen zu lesen.
Dies kann auch nützlich sein: http://www.lfd.uci.edu/~gohlke/code/tifffile.py.html
Drucken Alle Tags mit 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
Hier wird das schließt Sie für das Scannen aller Tags erhalten können:
#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
}
Beachten Sie, dass Sie müssen berücksichtigen, dass einige Tags zweimal erscheinen (LONG und SHORT Version), aber nur eine von diesen wird Wert haben. Der richtige zu verwendende Typ kann im Header (TIFFDirectory struct) nachgeschlagen werden.
Es gibt auch andere Fänge auf, wie man die Tags liest, aber das wird zumindest machen Sie Schleife über alle von ihnen (die Standard). Tipps finden Sie unter tif_dirinfo.c, wenn Sie nicht weiterkommen.
Nun, da 'tif_dir.h' eine interne Kopfzeile ist (d. H. Nicht von der eingebauten Bibliothek offen gelegt wurde), verursacht sie alle möglichen Probleme wie Neudefinitionen, fehlende Abhängigkeiten, etc. Irgendwelche anderen Möglichkeiten? –
@Anish Ramaswamy Nicht, dass ich weiß. Wie gesagt, wird dies von der LibTIFF-Quelle reverse-engineered. Wenn Sie Probleme mit Neudefinitionen haben, versuchen Sie, sie in einer separaten Übersetzungseinheit oder einer kleinen Bibliothek zu isolieren.Wie für fehlende Deklination. - Andere Includes müssen ebenfalls hinzugefügt werden. IIRC, nur Header werden tun, keine Notwendigkeit, irgendwelche .c von der lib zu kompilieren. – user362515
Das scheint einfach unelegant zu sein. Ich bin immer noch auf der Jagd. Vielen Dank! –
- 1. Alle extrahieren HTML-Tags aus der bestimmten Seite In Ruby
- 2. Alle Werte aus einem XMP extrahieren
- 3. NLP - Kategorien/Tags aus Text extrahieren
- 4. Anker-Tags aus Anfrage extrahieren URI
- 5. Extrahieren von benutzerdefinierten Tags aus Textdatei
- 6. extrahieren Text aus tex, entfernen Latex Tags
- 7. Extrahieren Sie alle JSON-Schlüssel aus unbekannten JSON-Struktur
- 8. Extrahieren von HTML zwischen Tags
- 9. regex alle Teil zwischen zwei charachters zu extrahieren oder Tags
- 10. Python: extrahieren Sie alle Teilketten zwischen Tags innerhalb String
- 11. Regex zu extrahieren alle URLs aus string
- 12. Alle Bilder aus der PDF-Datei extrahieren
- 13. regex: finde alle unkommentierten Tags
- 14. Extrahieren von Text aus einem Div-Tag
- 15. Extrahieren Sie alle <script> Tags aus einer HTML-Datei und speichern Sie diese in einem NSArray- Objective C
- 16. Extrahieren von Geheimnissen aus einem eingebetteten Chip
- 17. So extrahieren Sie Schlüsselwörter (Tags) aus dem Text
- 18. Extrahieren neuer Elemente aus einem RSS-Feed
- 19. In einem TIFF erstellen ein Sub IFD mit Thumbnail (libtiff)
- 20. Extrahieren von Text aus einem contentEditable div
- 21. Java regex extrahieren Daten zwischen einem href-Tags
- 22. Extrahieren von Textfragmenten aus einem HTML-Body (in. NET)
- 23. Inkompatibel openCV und libtiff libs auf OSX
- 24. Extrahieren von Farben aus einem Bild
- 25. Extrahieren von Tagen aus einem numpy.timedelta64 Wert
- 26. URLs aus einem String extrahieren mit PHP
- 27. Eindimensionales Array aus einem Multidimension-Array extrahieren
- 28. Extrahieren bestimmter Spalten aus einem Datenrahmen
- 29. Extrahieren von Dateinamen aus einem Pfad MYSQL
- 30. Einen Wert aus einem URL-Fragment extrahieren
Aus Neugier haben Sie eine Lösung für dieses Problem gefunden? –