You could solve this in a pure 2d way by using a projection matrix. I wrote a quite extensive answer about how to use projection matrices in Canvas to turn orthogonal tiles into isometric tilesa quite extensive answer about how to use projection matrices in Canvas to turn orthogonal tiles into isometric tiles for a different question.
When your map tiles are all stretched in different ways, you will have to change your projection matrix before drawing each tile.
The 3x3 projection matrices which are offered by the 2d context allow you to do all kinds of perspective transformations to map tiles except for perspective shortening (making close objects larger than small objects).