primero aclaremos un poco las cosas:
window.open NO guarda nada, es una función para abrir ventanas, por lo que obviamente puedes deducir sin necesidad de estudiar la función, claro esta que con la presión uno puede volverse ciego y sordomudo.
veo que mencionas PHP, pero NO veo nada en lo que uses a PHP, por lo que me da a entender que no conoces php, si no es así, aclárame hasta que punto lo dominas.
lo primero que debes hacer es reorganizar tus ideas, y en eso puedo ayudarte:
1- primero busca en la documentación del objeto CANVAS si existe alguna función que te devuelva el binario de la imagen creada, o algo similar, creo recordar que existe una función que te proporciona el BASE64 (canvas.toDataURL() si no me equivoco y veo que ya la usas), lo cual te servirá perfectamente para lo que necesitas.
2- una vez obtengas ese BASE64 (o array binario codificado) necesitas enviarlo al servidor,
allí está tu error, no puedes enviar un base64 a un servidor solo con el base64,
necesitas enviar una petición al servidor.
3- para enviar el binario al servidor, puedes o usar un form oculto o usar AJAX.
4- una vez en PHP puedes hacer uso de fopen, base64_decode y fwrite para guardar la imagen en disco.
espero que con esto logres tu objetivo, si estás trancado postea tus avances