THotPDF.OptimizeLoadedImagesByVisualCost-Methode
Führt eine begrenzte Qualitätssuche für geeignete geladene JPEG- und JPEG-2000-Bilder durch und übernimmt den Kandidaten mit den geringsten Kosten, der sowohl Qualitäts- als auch Einsparvorgaben erfüllt
Deklaration
function OptimizeLoadedImagesByVisualCost(
const Options: THPDFImageRecompressionCostOptions;
out AInfo: THPDFImageRecompressionCostInfo): Integer;
Kostenmodell
Jeder kodierte Kandidat wird dekodiert und über stichprobenartige Luma- und Chroma-Residuen auf einer normierten Wahrnehmungsskala von 0 bis 100 mit der dekodierten Quelle verglichen
Kandidaten oberhalb von MaximumPerceptualError oder unterhalb von MinimumSavingsBytes werden vor der Bewertung verworfen
score = VisualErrorWeight * sqr(error / MaximumPerceptualError)
+ ByteCostWeight * (candidateBytes / sourceBytes)
Der niedrigste Score gewinnt; bei Gleichstand folgen kleinere kodierte Größe und dann höhere Qualität, sodass wiederholte Läufe dasselbe Ergebnis liefern
THPDFImageRecompressionCostOptions
MinimumQuality, MaximumQuality und QualityStep definieren die begrenzten Qualitätstests; die maximale Qualität wird immer einbezogen, selbst wenn der Schritt den Bereich nicht teilt
SampleStride steuert deterministisches Pixel-Subsampling von 1 bis 64, während die beiden nicht-negativen Gewichte dem Aufrufer erlauben, visuelle Treue oder kompakte Ausgabe zu bevorzugen
THPDFImageRecompressionCostOptions.Default durchsucht die Qualität 30 bis 90 in Zehnerschritten, begrenzt den Wahrnehmungsfehler auf 3, verlangt ein gespartes Byte, samplet jedes vierte Pixel in jeder Dimension und gewichtet visuellen Fehler und Bytekosten gleich
THPDFImageRecompressionCostInfo
Das Ergebnis meldet gescannte und geeignete Bildanzahlen, JPEG- und JPEG-2000-Rewrites, Kodierungstests, visuelle und Bytekosten-Verwürfe, gewählte Qualitätssummen, den maximal akzeptierten Wahrnehmungsfehler, Bytetotalen und den DeterministicSelection-Status
Sicherheit
Image-Masks, Colour-Key-Masks, Spot-Farben, Lab-Bilder und nicht-RGB-ICCBased-Quellen bleiben unverändert, während konvertierbare kalibrierte RGB-Quellen einen expliziten kalibrierten Ausgabefarbraum behalten
Abbruch wird vor jedem Bild und jedem Kodierungstest geprüft, und kein Quellstream wird ersetzt, solange kein vollständiger akzeptierter Kandidat gewählt wurde