SaveAs hívásrafunction OptimizeImages(const Options: TPdfImageOptimizeOptions; out Report: TPdfImageOptimizeReport): Boolean;
A SaveAs* újraírásokkal szemben az OptimizeImages a natív PDFium képobjektum-API-n keresztül szerkeszti az aktuális memóriabeli dokumentumot, illeszkedve az AddImage / GenerateContent szerkesztési modellhez
Minden oldal bejárásra kerül, és minden képobjektum tényleges elhelyezési DPI-je kiolvasásra kerül az FPDFImageObj_GetImageMetadata hívásból; ha a max(vízszintes, függőleges) DPI / TargetDpi hányados eléri a MinDpiRatio értéket, a kép felbontása csökkentésre kerül
A felbontáscsökkentés méri a lokális luminancia-részletességet, és a skálából, a tartalomosztályból és a preferált minőségből box, bilineáris, bikubikus, Lanczos vagy bilevel szűrőt választ, majd a kisebb, azonos formátumú bitmapet a FPDFImageObj_SetBitmap hívással írja vissza
A BGRA minták premultiplied-alpha térben akkumulálódnak, és csak a célpixelnél kerülnek visszaszorzásra, így az újramintavételezett élek körül nem keletkeznek áttetsző színperemek
Minden érintett oldal a FPDFPage_GenerateContent hívással kerül véglegesítésre; a hívó ezt követően a szokásos SaveAs hívással menti az optimalizált dokumentumot
TPdfImageOptimizeOptions.TargetDpi adja meg a kívánt tényleges DPI-t; a MinDpiRatio megakadályozza a célt csak kis mértékben meghaladó képek újrakódolásátPreserveBilevel érintetlenül hagyja az 1 bites bilevel képeket (ImageMask / vonalas szkennelések); ha letiltott, a bilevel szűrő területi szavazást és bináris küszöbölést alkalmaz az éles élek megőrzéséreMinDimension kihagy minden olyan képet, amelynek szélessége vagy magassága a küszöb alá esik, mivel az apró képek jellemzően ikonok vagy dekoratív elemek; az alapérték 8ResampleFilter rögzített szűrőt vagy pirfAdaptive értéket választ; a ContentClass auto, foto vagy vonalas szándékot ad meg, a PreferredQuality pedig 0-tól 1-ig hangolja az adaptív választástMaxWorkingBytes korlátozza minden célbitmap allokációját a stride-kitöltéssel együtt; a keretet túllépő képek változatlanok maradnak, és növelik a BudgetExceededCount értékétSelectPdfImageCodec súlyoz egy TPdfImageCodecCandidate értéket (UniqueColorCount, EntropyBitsPerByte, PlacementDpi, HasAlpha, IsBilevel, OriginalCodec, geometria és mért kódolt bájthossz kíséretében), és egy TPdfImageCodecDecision választ ad, amelynek SelectedBytes és ReplaceOriginal mezői jelentik a nyertes kódolástTPdfImageResampleFilter az adaptív választás mellett pirfBox, pirfBilinear, pirfBicubic, pirfLanczos és pirfBilevel rögzített választásokat kínál; a TPdfImageContentClass pedig piccAuto, piccPhoto és piccLineArt értékeketTPdfImageOptimizeReport tartalmazza a BoxFilterCount, BilinearFilterCount, BicubicFilterCount, LanczosFilterCount, BilevelFilterCount, PeakWorkingBytes, AverageDetailScore értékeket, az optimalizált, kihagyott, hibás és kerettúllépés darabszámait, valamint strukturált hibaüzenetetSaveAs érvényesíti; maga az OptimizeImages csak a memóriabeli képobjektumokat írja újra
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');