Когда масштабирование шаблонов, cairo использует билинейную интерполяцию по умолчанию, что должно выглядеть разумно. Однако, когда downscaling , cairo в настоящее время (по состоянию на 1.12.14) не имеет надлежащих шаблонов antialias. Невозможно получить это, не говоря уже о добавлении функции к самому каиру, хотя см. Ниже потенциальное обходное решение.
Параметр «antialias» в каире контролирует сглаживание растрированных фигур и текста, а не шаблонов. Параметр, который контролирует сглаживание для шаблонов, называется «cairo_pattern_set_filter» и имеет следующие значения:
CAIRO_FILTER_FAST, //usually the same as NEAREST
CAIRO_FILTER_GOOD, //usually the same as BILINEAR
CAIRO_FILTER_BEST, //usually the same as BILINEAR
CAIRO_FILTER_NEAREST, //for upscaling, this is pixel-replication
CAIRO_FILTER_BILINEAR, //for upscaling, this is linear interpolation
CAIRO_FILTER_GAUSSIAN //not implemented, should not be used
Но, как уже упоминалось, ни один из них не работает хорошо для уменьшения масштаба.
Обходной путь, который некоторые люди использовали, - это масштабирование изображения вниз с шагом 2. То есть, уменьшите масштаб изображения до половины размера в обоих измерениях, пока он не будет примерно нужного размера. Затем это уменьшенное изображение можно использовать с измененным преобразованием, которое уменьшает масштаб менее чем на 2.