in cpp/spectrum/core/ResizeUtil.cpp [217:253]
ResizeDecision calculateResizeDecisionWithSampling(
const image::Size& inputSize,
const folly::Optional<image::Ratio>& samplingRatio,
const folly::Optional<requirements::Crop>& cropRequirement,
const folly::Optional<requirements::Resize>& resizeRequirement,
const float thresholdForSkippingScaling) {
if (!samplingRatio.has_value()) {
// if we don't sample, go ahead for cropping
auto result = calculateResizeDecisionWithCropping(
inputSize,
inputSize,
resizeRequirement,
cropRequirement,
thresholdForSkippingScaling);
return result.noSampling();
}
// otherwise we'll have to update the input size and the cropping
// values
auto sizeAfterSampling = image::sizeZero;
try {
sizeAfterSampling =
inputSize.scaled(*samplingRatio, numeric::RoundingMode::Up);
} catch (const SpectrumException&) {
return ResizeDecision(inputSize).rate(RESIZE_RATING::INVALID);
}
const auto cropRequirementAfterSampling =
maybeSampleCropRequirement(*samplingRatio, cropRequirement);
auto result = calculateResizeDecisionWithCropping(
inputSize,
sizeAfterSampling,
resizeRequirement,
cropRequirementAfterSampling,
thresholdForSkippingScaling);
return result.sampling(samplingRatio.value(), sizeAfterSampling);
}