Если исходная картинка имеет приличный запас по разрешению, то вполне рабочий выход - делать масштабирование в несколько этапов, чтобы на каждом шаге коэффициент был 2 (кроме, возможно, одного). Я так делал, результат получается действительно намного лучше.
Если же исходная картинка не сильно больше требуемой - канвас, увы, не вариант, он будет сильно портить картинку. Нужно использовать что-то совсем стороннее.