Base64 imagecreatefromstring错误PHP

时间:2018-07-12 15:48:57

标签: javascript php canvas

我在PHP上的imagecreatefromstring函数遇到问题。

  1. 我在前端(HTML)网页上有一个输入文件,用户可以在其中选择照片。

  2. 当用户选择一张图片时,JavaScript函数运行一个例程,该例程创建一个base64字符串,该字符串将传递到后端(服务器中的PHP文件)。

  3. PHP中的一个函数采用该base64字符串,并使用imagecreatefromstring()函数再次将其转换为imagen。

这是问题所在,当用户从一台设备(例如摩托罗拉手机)上传图片时,转换,过去以及反之亦然。

但是,当用户从其他设备(例如J7 Samsung等其他手机)上传图片时,该过程被切入了某个地方(不知道确切的位置),并且最终的图像文件被保存了一半。 >

在这里,我发布了javascript转换功能:

function ResizeImage(imageFile, Elemento) {
        var filesToUpload = imageFile.files;
        var file = filesToUpload[0];
        var form = document.getElementById("ppal_form");

        // Create an image
        var img = document.createElement("img");
        // Create a file reader
        var reader = new FileReader();
        // Set the image once loaded into file reader

        reader.onload = function(e) {
                img.src = e.target.result;

                var canvas = document.createElement("canvas");
                //var canvas = $("<canvas>", {"id":"testing"})[0];
                var ctx = canvas.getContext("2d");
                ctx.drawImage(img, 0, 0);

                var MAX_WIDTH = img.width / 4;
                var MAX_HEIGHT = img.height / 4;
                var width = img.width;
                var height = img.height;

                if (width > height) {
                    if (width > MAX_WIDTH) {
                        height *= MAX_WIDTH / width;
                        width = MAX_WIDTH;
                    }
                } else {
                    if (height > MAX_HEIGHT) {
                        width *= MAX_HEIGHT / height;
                        height = MAX_HEIGHT;
                    }
                }
                canvas.width = width;
                canvas.height = height;
                var ctx = canvas.getContext("2d");
                ctx.drawImage(img, 0, 0, width, height);

                var dataurl = canvas.toDataURL("image/png",0.5);
                console.log(dataurl);

                auxinput = $('#aux_files1');

                auxinput.attr('value', dataurl);

                imageFile.value = "";
            }
        // Load files into file reader
        reader.readAsDataURL(file);

        //alert('se ejecuto funcion ResizeImage');
    }

以及将字符串再次转换为图像的PHP函数:

public static function base64_to_jpeg($base64_string, $output_file) {
        // open the output file for writing
        $ifp = fopen( $output_file, 'wb' ); 

        // split the string on commas
        // $data[ 0 ] == "data:image/png;base64"
        // $data[ 1 ] == <actual base64 string>
        $data = explode( ',', $base64_string );

        // we could add validation here with ensuring count( $data ) > 1
        fwrite( $ifp, base64_decode( $data[ 1 ] ) );

        // clean up the file resource
        fclose( $ifp ); 

        return $output_file; 
    }

0 个答案:

没有答案