Trying to Pass ToDataURL with over 524288 bytes Using Input Type Text

后端 未结 1 1366
不思量自难忘°
不思量自难忘° 2020-12-02 02:45

I am trying to create an image using DataURL of a Canvas (using JavaScript). When a user hits submit, the value gets sent to an Input type text tag (e.g.,

相关标签:
1条回答
  • 2020-12-02 03:46

    Try sending canvas as Blob at javascript; use fopen() with php://input as parameter to read Blob, stream_copy_to_stream or file_get_contents() , file_put_contents() to process file at php

    See HTMLCanvasElement.toBlob()

    if (!HTMLCanvasElement.prototype.toBlob) {
     Object.defineProperty(HTMLCanvasElement.prototype, 'toBlob', {
      value: function (callback, type, quality) {
    
        var binStr = atob( this.toDataURL(type, quality).split(',')[1] ),
            len = binStr.length,
            arr = new Uint8Array(len);
    
        for (var i=0; i<len; i++ ) {
         arr[i] = binStr.charCodeAt(i);
        }
    
        callback( new Blob( [arr], {type: type || 'image/png'} ) );
      }
     });
    }
    

    Beyond $_POST, $_GET and $_FILE: Working with Blob in JavaScript and PHP

    <?php
    
    // choose a filename
    $filename = "hello.json";
    
    // the Blob will be in the input stream, so we use php://input
    $input = fopen('php://input', 'rb');
    $file = fopen($filename, 'wb'); 
    
    // Note: we don't need open and stream to stream, we could've used file_get_contents and file_put_contents
    stream_copy_to_stream($input, $file);
    fclose($input);
    fclose($file);
    
    ?>
    
    0 讨论(0)
提交回复
热议问题