SaveAsfunction OptimizeImages(const Options: TPdfImageOptimizeOptions; out Report: TPdfImageOptimizeReport): Boolean;
A diferencia de las reescrituras SaveAs*, OptimizeImages edita el documento actual en memoria a través de la API nativa de objetos de imagen de PDFium, siguiendo el modelo de edición de AddImage / GenerateContent
Se recorre cada página y el DPI efectivo de colocación de cada objeto de imagen se lee de FPDFImageObj_GetImageMetadata; cuando max(horizontal, vertical) DPI / TargetDpi alcanza MinDpiRatio, la imagen se remuestrea hacia abajo
El remuestreo mide el detalle de luminancia local, selecciona un filtro box, bilineal, bicúbico, Lanczos o bilevel según la escala, la clase de contenido y la calidad preferida, y escribe el mapa de bits más pequeño del mismo formato de vuelta con FPDFImageObj_SetBitmap
Las muestras BGRA se acumulan en el espacio de alfa premultiplicado y solo se desmultiplican en el píxel de destino, lo que evita franjas de color transparentes alrededor de los bordes remuestreados
Cada página tocada se confirma con FPDFPage_GenerateContent; quien llama entonces guarda el documento optimizado con la llamada habitual a SaveAs
TPdfImageOptimizeOptions.TargetDpi establece el DPI efectivo deseado; MinDpiRatio evita recodificar imágenes que están solo marginalmente por encima del objetivoPreserveBilevel deja intactas las imágenes bilevel de 1 bit (ImageMask / escaneos de arte lineal); cuando está deshabilitado, el filtro bilevel aplica votación de área y un umbral binario para preservar bordes nítidosMinDimension omite cualquier imagen cuyo ancho o alto quede por debajo del umbral, ya que las imágenes diminutas suelen ser iconos o elementos decorativos; el valor predeterminado es 8ResampleFilter selecciona un filtro fijo o pirfAdaptive; ContentClass aporta la intención automática, de foto o de arte lineal y PreferredQuality ajusta la selección adaptativa de 0 a 1MaxWorkingBytes acota cada asignación de mapa de bits de destino incluido el relleno de stride; las imágenes fuera de presupuesto permanecen sin cambios e incrementan BudgetExceededCountSelectPdfImageCodec pondera un TPdfImageCodecCandidate (UniqueColorCount, EntropyBitsPerByte, PlacementDpi, HasAlpha, IsBilevel, OriginalCodec, más la geometría y las longitudes de bytes codificados medidas) y responde con un TPdfImageCodecDecision cuyo SelectedBytes y ReplaceOriginal reportan la codificación ganadoraTPdfImageResampleFilter ofrece las opciones fijas pirfBox, pirfBilinear, pirfBicubic, pirfLanczos y pirfBilevel además de la selección adaptativa; TPdfImageContentClass ofrece piccAuto, piccPhoto y piccLineArtTPdfImageOptimizeReport incluye BoxFilterCount, BilinearFilterCount, BicubicFilterCount, LanczosFilterCount, BilevelFilterCount, PeakWorkingBytes, AverageDetailScore, los conteos de optimizadas, omitidas, fallidas y fuera de presupuesto, y un mensaje de fallo estructuradoSaveAs; OptimizeImages en sí solo reescribe objetos de imagen en memoria
Options:= TPdfImageOptimizeOptions.Default;
Options.TargetDpi:= 150;
Options.ResampleFilter:= pirfAdaptive;
Options.MaxWorkingBytes:= 64 * 1024 * 1024;
Pdf.OptimizeImages(Options, Report);
WriteLn('downsampled ', Report.OptimizedCount, ' images');
Pdf.SaveAs('optimized.pdf');