I just do it with sprites. If you don't need that many afterimages using a canvas seems overkill. Basically
Every 0.1 seconds spawn afterimage
Afterimage has the fade behavior
The afterimage can just be a copy of your player sprite with the same animation names so you can set the animations of the afterimage on created to playersprite.animationname
I would like to have something scalable so I can use with other objects, such as enemies and projectiles. Duplicating every single object that would need this effect seems worse than using Canvas, as far as my knowledge goes currently.