【问题标题】:Javascript - How do i submit a canvas in a form?Javascript - 我如何在表单中提交画布?
【发布时间】:2017-12-12 03:24:31
【问题描述】:

基本上我的问题是我有一个画布,我想以某种形式使用画布,就像它是在输入中提交的带有文件类型的图像一样,所以我可以访问 $_FILES 数组..

我所做的项目是一个图像裁剪脚本,用户通过输入类型文件选择图像文件,然后脚本将图像绘制到画布上,然后用户可以缩放/裁剪图像......所有工作得很好..

但是如何将裁剪后的图像作为表单文件输入数据发送到 php 文件并访问 $_FILES 超级全局数组?

真的希望有人能帮忙

此链接here 试图做与我类似的事情,但我不明白它是如何工作的,或者我如何对我的项目做同样的事情?

Javascript

            function convertCanvasToImage() {
                var temp_ctx, temp_canvas;
                temp_canvas = document.createElement('canvas');
                temp_ctx = temp_canvas.getContext('2d');
                temp_canvas.width = windowWidth;
                temp_canvas.height = windowWidth;
                temp_ctx.drawImage(ctx.canvas, cutoutWidth, cutoutWidth, windowWidth, windowWidth, 0, 0, windowWidth, windowWidth);


                var dataurl = temp_canvas.toDataURL("image/jpeg");
                croppedImage.src = dataurl;
                contentCall(dataurl);
            }

            function contentCall(profileImage) {
                var http = new XMLHttpRequest();
                var url = "ajax.php";
                var params = "profileImage=" + profileImage;
                http.open("POST", url, true);
                http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
                http.onreadystatechange = function () {
                    if (http.readyState === 4 && http.status === 200) {
                        alert(this.responseText);
                    }
                };
                http.send(params);
            }

            document.getElementById("myfiles").addEventListener("change", pullFiles, false);
            document.getElementById("scaleSlider").addEventListener("input", updateScale, false);
            document.getElementById("convert").addEventListener("click", convertCanvasToImage, false);

更新 我自己解决了这个问题

                var multiPart = new FormData();
                var fileName = "pernille";
                multiPart.append('retard', 'christian');
                temp_canvas.toBlob(function(blob){
                    multiPart.append('blobTest', blob, fileName);
                    contentCall(multiPart);
                }, "image/jpg");
            }

            function contentCall(profileImage) {
                var http = new XMLHttpRequest();
                var url = "ajax.php";
                http.open("POST", url, true);
                http.onreadystatechange = function () {
                    if (http.readyState === 4 && http.status === 200) {
                        alert(this.responseText);
                    }
                };
                http.send(profileImage);
            }

【问题讨论】:

    标签: javascript php canvas multipartform-data form-data


    【解决方案1】:

    您需要将画布(作为图像)存储在隐藏的表单字段中作为其值,然后当您提交表单时,图像将被提交。

    // Save canvas as dataURL image
    var dataURL = canvas.toDataURL('image/png');
    

    【讨论】:

    • 我已经在这里var dataurl = temp_canvas.toDataURL("image/jpeg")
    • 画布也可以转换为Blob,对吧? (支持的地方。)我认为这可能更有效。 canvas DOM 元素有一个.toBlob() API。然后,您将使用文件 API 将其与 POST 一起发送。
    • 但是我如何在表单中使用它以便我可以使用 $_FILES 访问它...因为我的文件上传依赖于超级全局 $_FILES 数组 -,-' 它是第一个是时候我做这样的事情了:)
    • 是的,.toBlob 是我想我想要的...但我不知道如何使用它,我在这里阅读过它developer.mozilla.org/en-US/docs/Web/API/Blob/Blob...但是我如何使用它和将它与表单一起使用让我很困惑
    猜你喜欢
    • 2014-10-23
    • 2010-09-13
    • 1970-01-01
    • 2012-02-06
    • 2021-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多