| Сообщение от nixy | 
	| - сохранить в buffer изображение-оригинал buffer.всяческое_рисование()
 
 - сделать его трансформацию примерно вот так:
 sub_buffer.setTransform(..матрица..)
 sub_buffer.drawImage(buffer.canvas,0,0)
 | 
	
трансформации 
Всегда производятся до рисования объекта нуждающегося в трансформации
и вариант с буфером (трансформировать участок и вставить на остальное )  при переносе изображений с прозрачным фоном-необходимо его ещё обрабатывать пред вставкой(времени гораздо больше чем трансформировать основную и вставить изображение).так что выигрыш сомнителен,а точнее "выигрыш" со знаком минус
да и последовательность у вас не правильная-последовательность тогоже без библиотек
канва2.transform(....)transform-образно
канва2.drawImage(....)
канва2.getImage(....)
канва1.putImage(....)
drawImage-не работает с объектом изображения забранным из канвы эт раз.-значит производятся преобразования-это время по любому
два-использование сторонних не способствует увеличению быстродействия поскольку они в большинстве своём пишутся на все случаи жизни