THotPDF.OptimizeLoadedImagesByVisualCost Method
Przeprowadza ograniczone wyszukiwanie jakości dla kwalifikujących się wczytanych obrazów JPEG i JPEG 2000 i przyjmuje kandydata o najniższym koszcie, który spełnia jednocześnie limity jakości i oszczędności
Deklaracja
function OptimizeLoadedImagesByVisualCost(
const Options: THPDFImageRecompressionCostOptions;
out AInfo: THPDFImageRecompressionCostInfo): Integer;
Model kosztu
Każdy zakodowany kandydat jest dekodowany i porównywany ze zdekodowanym źródłem przez próbkowane reszty luminancji i chrominancji na znormalizowanej skali błędu percepcyjnego od zera do 100
Kandydaci powyżej MaximumPerceptualError lub poniżej MinimumSavingsBytes są odrzucani przed scoringiem
score = VisualErrorWeight * sqr(error / MaximumPerceptualError)
+ ByteCostWeight * (candidateBytes / sourceBytes)
Wygrywa najniższy wynik, przy remisie decyduje mniejszy rozmiar zakodowany, a potem wyższa jakość, więc powtórzone uruchomienia dają ten sam wynik
THPDFImageRecompressionCostOptions
MinimumQuality, MaximumQuality i QualityStep definiują ograniczone próby jakości, przy czym maksymalna jakość jest zawsze uwzględniana, nawet gdy krok nie dzieli zakresu
SampleStride steruje deterministycznym subsamplingiem pikseli od 1 do 64, a dwie nieujemne wagi pozwalają wywołującemu preferować wierność wizualną albo zwięzły wynik
THPDFImageRecompressionCostOptions.Default przeszukuje jakość od 30 do 90 co 10, ogranicza błąd percepcyjny do 3, wymaga co najmniej jednego zaoszczędzonego bajtu, próbuje co czwarty piksel w każdym wymiarze i waży błąd wizualny oraz koszt bajtowy po równo
THPDFImageRecompressionCostInfo
Wynik raportuje liczbę obrazów przeskanowanych i kwalifikujących się, przepisania JPEG i JPEG 2000, próby kodowania, odrzucenia wizualne i kosztowe, sumy wybranych jakości, maksymalny zaakceptowany błąd percepcyjny, sumy bajtów oraz status DeterministicSelection
Bezpieczeństwo
Maski obrazów, maski colour-key, kolory spot, obrazy Lab i źródła ICCBased poza RGB pozostają bez zmian, natomiast konwertowalne skalibrowane źródła RGB zachowują jawną, skalibrowaną przestrzeń barw wyjściowych
Anulowanie jest sprawdzane przed każdym obrazem i próbą kodowania, a żaden źródłowy stream nie zostaje zastąpiony, dopóki nie zostanie wybrany kompletny, zaakceptowany kandydat