Envío de imágenes desde elementos Canvas usando Ajax y PHP $ _FILES

Necesito poder enviar una imagen y algunos campos de formulario desde un elemento de lienzo del lado del cliente a un script PHP, terminando en $ _POST y $ _FILES. Cuando lo envío así:

<script type="text/javascript">
var img = canvas.toDataURL("image/png");
...
ajax.setRequestHeader('Content-Type', "multipart/form-data; boundary=" + boundary_str);
var request_body = boundary + '\n' 
+ 'Content-Disposition: form-data; name="formfield"' + '\n' 
+ '\n' 
+ formfield + '\n' 
+ '\n' 
+ boundary + '\n'
+ 'Content-Disposition: form-data; name="async-upload"; filename="' 
+ "ajax_test64_2.png" + '"' + '\n' 
+ 'Content-Type: image/png' + '\n' 
+ '\n' 
+ img
+ '\n' 
+ boundary;
ajax.send(request_body);
</script>

$ _ POST y $ _FILES vuelven a estar poblados, pero los datos de imagen en $ _FILES aún necesitan decodificarse así:

$loc = $_FILES['async-upload']['tmp_name'];
$file = fopen($loc, 'rb');
$contents = fread($file, filesize($loc));
fclose($file);
$filteredData=substr($contents, strpos($contents, ",")+1);
$unencodedData=base64_decode($filteredData);

... para guardarlo como PNG legible. Esta no es una opción, ya que estoy tratando de pasar la imagen a la función media_handle_upload () de Wordpress, que requiere un índice de $ _FILES que apunta a una imagen legible. Tampoco puedo decodificar, guardar y alterar 'tmp_name' en consecuencia, ya que no cumple con los controles de seguridad.

Entonces, encontré esto:http: //www.webtoolkit.info/javascript-base64.htm e intenté hacer la decodificación en el lado del cliente:

img_split = img.split(",",2)[1];
img_decoded = Base64.decode( img_split );

pero por alguna razón todavía no termino con un archivo legible cuando llega a PHP. Entonces la pregunta es: "¿Por qué?" o "¿Qué estoy haciendo mal?" o "¿Es esto posible?" : -)

¡Cualquier ayuda muy apreciada!

Gracias, Kane

Respuestas a la pregunta(2)

Su respuesta a la pregunta