Send content of a canvas more efficiently

I want to send a canvas with transparency. Unfortunetly the rendered canvas as PNG is very big. Is there anything I can do to make it smaller for the transferring?

var canvasPNG = canvas.toDataURL();  //sending it to the server

Not really if you send it as a png with alpha channel.

What you could do is to send the image as two jpeg images: one image containing the rgb, and another greyscale image representing the alpha channel, and then create a png on the server from those.