Extraction d’images d’un document chargé
L’extraction d’images d’un document chargé permet aux applications d’énumérer les XObjects image après l’ouverture d’un PDF existant par LoadFromFile ou LoadFromStream, d’examiner leurs métadonnées et de décoder les images prises en charge en instances TBitmap
Main APIs
function GetLoadedImageCount: Integer: renvoie le nombre d’objets image énumérables dans le document actuellement chargéfunction GetLoadedImageInfo(ImageIndex: Integer; out AInfo: THPDFLoadedImageInfo): Boolean: obtient les métadonnées de l’image indiquée (dimensions, couleur, filtres, etc.) sans décoder les pixels ; renvoieFalseWidth/Height: dimensions en pixelsDecodable: indique si la build courante peut décoder cette image en bitmap
Supported sources
- filtres de données :
FlateDecode、LZWDecode、ASCIIHexDecode、ASCII85Decode、RunLengthDecode, ainsi que les chaînes multi-filtres (filtre de données en tête + filtre d’image en fin de chaîne) - filtres d’image :
DCTDecode(JPEG)、JPXDecode(JPEG 2000)、JBIG2Decode、CCITTFaxDecode(G3/G4) - Les chemins raster couvrent DeviceRGB, DeviceGray, Indexed, DeviceCMYK et les images en niveaux de gris ou indexées à faible profondeur de bits
Paramètres de décodage et sécurité
DecodeParmset sa clé abrégéeDPsont résolus que la valeur soit un dictionnaire ou le dictionnaire final d’un tableau de paramètres de filtresPredictor,Colors,BitsPerComponentetColumnssont appliqués après la décompression Flate ou LZW- LZW
EarlyChange=0etEarlyChange=1sont tous deux honorés - Le prédicteur TIFF 2 prend en charge les échantillons compactés de 1, 2 et 4 bits ainsi que les composants de 8 et 16 bits
- Les prédicteurs PNG exigent un tag de filtre valide pour chaque ligne complète
- Les dimensions raster et les nombres d’octets attendus sont vérifiés contre le débordement avant allocation ou décodage
- Des données compressées malformées sont rapportées comme un échec de décodage et ne sont jamais traitées comme des pixels non compressés
Exemple
var
I: Integer;
begin
Doc := THotPDF.Create(nil);
try
Doc.LoadFromFile(FileName);
for I := 0 to Doc.GetLoadedImageCount - 1 do
begin
if Doc.GetLoadedImageInfo(I, Info) and Info.Decodable then
begin
Bmp := Doc.ExtractLoadedImage(I);
try
if Bmp <> nil then
Bmp.SaveToFile(Format('image_%d.bmp', [I]));
finally
Bmp.Free;
end;
end;
end;
finally
Doc.Free;
end;
end;
API associées
- prévisualiser ou exporter les images embarquées d’un PDF existant
- transcoder en formats plus répandus les images JBIG2 / JPEG 2000 / CCITT, etc.
- inspecter les métadonnées des images (dimensions, espace colorimétrique, filtres) sans décoder tous les pixels
- Supported Image Formats