0

我想通过 Jquery AJAX 在 php 脚本中发布 base64 图像文件。

我已经使用 Jquery 的 encodeURIComponent() 函数对其进行了编码,然后在发布数据时使用 php 上的 rawurldecode() 函数对其进行解码。

问题是,Php 无法将正确的图像保存为 png。

我已经比较了发布的base64数据和原始数据,它们不匹配。这使我得出结论,也许 base64 数据太大而无法发布。

我的结论是真的吗?如果是,还有其他方法可以成功发布base64数据吗?如果我错了,请您赐教吗?

这是 Jquery 脚本

var whereSignatureis = $('.signatureView');

// i got the image from a plugin called jSignature, assign it to a variable data.
var data = signPaper.jSignature("getData","image");
// created an image ddata from what the data returned for displaying purposes.
var ddata = new Image();
// the ddata.src is now the png base64 image
ddata.src = "data:" + data[0] + "," + data[1];
// I encoded the image with uricomponent for safe posting.
var theImg = encodeURIComponent(ddata.src);
// and posted the image
$.ajax({
        type: "POST",
        url: "processes.php",
        data: {img: theImg},
        contentType: "application/x-www-form-urlencoded;charset=UTF-8",
        success: function(r){
            whereSignatureis.append(r);
        }
    });

这是PHP

define('UPLOAD_DIR', '/images');


$img = rawurldecode($post->img);
$img = str_replace('data:image/png;base64,', '', $img);
$img = str_replace(' ', '+', $img);
$data = base64_decode($img);
$file = UPLOAD_DIR . 'signature' . '.png';
$success = file_put_contents($file, $data);
print $success ? "{$post->img}" : 'File not Saved.';

提前致谢!

4

1 回答 1

1

我发现在发送之前尝试编码为 base64 文本只会导致问题,因为 JavaScript URI 编码函数将 base64 字符串中的所有空格替换为加号,从而破坏了图像。我会完全删除该encodeURIComponent()功能,它应该可以工作。

于 2016-06-02T20:17:55.030 回答