Метод THotPDF.OptimizeLoadedImagesByVisualCost

Выполняет ограниченный поиск качества для подходящих загруженных изображений JPEG и JPEG 2000 и принимает кандидата с наименьшей стоимостью, который удовлетворяет и лимиту качества, и лимиту экономии

Объявление

function OptimizeLoadedImagesByVisualCost(
    const Options: THPDFImageRecompressionCostOptions;
    out AInfo: THPDFImageRecompressionCostInfo): Integer;

Модель стоимости

Каждый закодированный кандидат декодируется и сравнивается с декодированным источником по выборочным luma- и chroma-остаткам на нормированной шкале перцептивной ошибки от 0 до 100

Кандидаты с ошибкой выше MaximumPerceptualError или экономией ниже MinimumSavingsBytes отбраковываются до подсчёта оценки

score = VisualErrorWeight * sqr(error / MaximumPerceptualError)
      + ByteCostWeight * (candidateBytes / sourceBytes)

Побеждает наименьшая оценка; при равенстве оценок предпочтение отдаётся меньшему закодированному размеру, а затем более высокому качеству, поэтому повторные запуски дают одинаковый результат

THPDFImageRecompressionCostOptions

MinimumQuality, MaximumQuality и QualityStep задают ограниченный перебор качества, причём максимальное качество всегда участвует, даже если шаг не делит диапазон нацело

SampleStride управляет детерминированным прореживанием пикселей от 1 до 64, а два неотрицательных веса позволяют сделать ставку либо на визуальную точность, либо на компактный вывод

THPDFImageRecompressionCostOptions.Default перебирает качество от 30 до 90 с шагом 10, ограничивает перцептивную ошибку значением 3, требует экономии хотя бы одного байта, берёт каждый четвёртый пиксель по каждому измерению и взвешивает визуальную ошибку и стоимость байтов поровну

THPDFImageRecompressionCostInfo

Результат сообщает количество просмотренных и подходящих изображений, перезаписи JPEG и JPEG 2000, попытки кодирования, отказы по визуальной ошибке и по стоимости байтов, суммы выбранных качеств, максимальную принятую перцептивную ошибку, итоговые объёмы в байтах и статус DeterministicSelection

Безопасность

Маски изображений, colour-key маски, spot-цвета, изображения Lab и не-RGB источники ICCBased остаются без изменений, а конвертируемые калиброванные RGB-источники сохраняют явно заданное калиброванное выходное цветовое пространство

Отмена проверяется перед каждым изображением и каждой попыткой кодирования, и исходный stream не заменяется, пока не выбран полный принятый кандидат

Оптимизация ресурсов и изображений