Que puis-je faire à propos des images tranchées ?
Si j'essaie d'extraire des images à partir d'un fichier PDF, il arrive parfois que j'obtienne un tas de tranches de l'image originale, principalement constitué de quelques lignes d'images par tranche ou, dans les cas extrêmes, d'une seule ligne. Pourquoi est-ce que c'est cela et comment puis-je obtenir l'image entière en un seul morceau?
Il y a différentes raisons de diviser une image en tranches et de les stocker en tant qu'objets image séparés dans un fichier PDF. Une des raisons évidentes pourrait être que le logiciel de création de PDF importe une image source déjà découpée. . Un fichier TIFF contenant des bandes ou des tuiles, sans fusionner les tranches en une seule image. Une autre raison souvent trouvée est que le logiciel de création de PDF a des limites architecturales concernant la taille des données de l'échantillon d'image, e. , une application native Windows qui crée un fichier PDF à l'aide d'un pilote d'imprimante virtuel. Et, parfois, une bibliothèque graphique, comme GDI+, implémente des images masquées en créant des tranches pour les parties visibles.
Une fois que nous avons compris comment les tranches apparaissent, nous savons aussi comment assembler les pièces à nouveau. Mais ce n'est certainement pas facile. Voici comment je l'ai fait dans l'un de nos produits. Appelons ici la fusion d'image.
La fusion d'images lit l'objet de flux de contenu par objet. Si elle rencontre une image, elle met en place une surface vide et un masque d'image avec tous les bits réglés sur 'invisible'. La tranche est stockée dans la surface et les bits correspondants dans le masque sont réglés sur 'visible'. Si l'objet suivant est une image, alors la tranche est stockée de la même manière. Ce processus est répété jusqu'à ce qu'un autre type d'objet soit rencontré, ou il est évident que l'image n'est pas une slice, e. si l'espace de couleur de l'image change. Si cela se produit, alors le rectangle de toutes les tranches est calculé et l'image est copiée dans le fichier de sortie et la surface est réinitialisée à son état initial.
Je dois admettre qu'il ne s'agit pas d'un algorithme très sophistiqué et j'espère que vous aurez une meilleure approche.