Was kann ich gegen geschichtete Bilder tun?
Wenn ich versuche, Bilder aus einer PDF-Datei zu extrahieren, passiert es manchmal, dass ich eine Menge Scheiben des Originalbilds erhalte, die hauptsächlich aus ein paar Bildzeilen pro Scheibe bestehen oder in extremen Fällen nur aus einer Zeile. Warum ist das so und wie kann ich das gesamte Bild in einem Stück erhalten?
Es gibt verschiedene Gründe, ein Bild in Fragmente zu unterteilen und diese als separate Bildobjekte in einer PDF-Datei zu speichern. Ein offensichtlicher Grund könnte sein, dass die PDF-Erstellungssoftware ein bereits in Fragmente unterteiltes Quellbild importiert, z. B. eine TIFF-Datei mit Streifen oder Kacheln, ohne die Fragmente zu einem Bild zusammenzuführen. Ein weiterer häufiger Grund ist, dass die PDF-Erstellungssoftware architektonische Grenzen hinsichtlich der Größe der Bildstammdaten hat, z. B. eine Windows-native Anwendung, die eine PDF-Datei über einen virtuellen Druckertreiber erstellt. Und manchmal implementiert eine Grafikbibliothek wie GDI+ maskierte Bilder, indem sie Fragmente für die sichtbaren Teile erstellt.
Sobald wir verstanden haben, wie Fragmente entstehen, wissen wir auch, wie wir die Teile wieder zusammenfügen können. Aber das ist sicherlich nicht einfach. So habe ich es in einem unserer Produkte gemacht. Lassen Sie uns hier von der Bildfusion sprechen.
Die Bildfusion liest den Inhaltsstrom Objekt für Objekt. Wenn sie auf ein Bild stößt, richtet sie eine leere Fläche und eine Bildmaske mit allen Bits auf 'unsichtbar' ein. Das Fragment wird in der Fläche gespeichert und die entsprechenden Bits in der Maske werden auf 'sichtbar' gesetzt. Wenn das nächste Objekt ein Bild ist, wird das Fragment auf die gleiche Weise gespeichert. Dieser Prozess wird wiederholt, bis ein anderer Objekttyp auftritt oder es offensichtlich ist, dass das Bild kein Fragment ist, z. B. wenn sich der Farbraum des Bildes ändert. Wenn dies geschieht, wird das umschließende Rechteck aller Fragmente berechnet und das Bild in die Ausgabedatei kopiert, und die Fläche wird auf ihren ursprünglichen Zustand zurückgesetzt.
Ich muss zugeben, dass dies kein sehr ausgeklügelter Algorithmus ist, und ich hoffe, Sie haben einen besseren Ansatz.