通过 JSON 将 base64 的图像发送到 PHP GD 库

Posted

技术标签:

【中文标题】通过 JSON 将 base64 的图像发送到 PHP GD 库【英文标题】:Sending base64'd image over JSON to PHP GD libraries 【发布时间】:2012-10-01 10:31:33 【问题描述】:

所以我使用 jquery/javascript 将 base64 图像文本发送到 php 文件,如下所示:

//Upload picture
$('#uploadPictureBtnhtml').click(function()
    OpenLoader();
   var baseEncPicData = $('#chosenPictureData').val();
    $.ajax(
        type:'POST', url:'upload_picture.php',  dataType:"json",  data: PicFile: baseEncPicData ,
        success:function (upload_pic_data) 
            if (upload_pic_data[0] == 'true') 
                    alert("it worked!");
                    CloseLoader();
            
            else
                    //upload_pic_data[1] will return PHP errors
                    alert("Why it didnt work: "+upload_pic_data[1]+" ");
                    CloseLoader();
            
        
        );
);

我知道这很好用,因为如果我采用 baseEncPicData 变量并像这样输出它:

$('#some_div').html('<img src="data:image/jpeg;base64,'+baseEncPicData+'" />');

效果很好,图像显示没有问题。

当我将它发送到 PHP 文件时,我会像这样解码并“重新组装”它:

$dataUno = htmlspecialchars(trim(urldecode($_POST['PicFile'])));
$dataDos = base64_decode($dataUno);
$data = imagecreatefromstring($dataDos);
$the_new_png = imagepng($data, $the_directory);

我收到的错误仅在 PHP 中:

 imagecreatefromstring() [function.imagecreatefromstring]: Empty string or invalid image
 imagepng() expects parameter 1 to be resource

这让我相信它没有正确解码 JSON,因为有被剥离的字符是 base64 图像的一部分。这只是一个假设。 不完全确定我做错了什么。任何帮助都是极好的。感谢您抽出宝贵时间阅读本文。

【问题讨论】:

htmlspecialchars(trim(urldecode($_POST['PicFile']))); - 干什么用的? 解码 JSON。除非有更好的方法。我已经这样做了很长时间了,所以如果有更好的方法来解码它,我不会感到惊讶。 【参考方案1】:

删除这个字符串:

htmlspecialchars(trim(urldecode($_POST['PicFile'])));

... 而是只处理$_POST['PicFile']。通过该预处理,您可以将所有 + 字符(在 Base64 中允许)转换为空格 (),从而有效地破坏二进制文件。

【讨论】:

感谢您回答这个问题,现在就试试这个。

以上是关于通过 JSON 将 base64 的图像发送到 PHP GD 库的主要内容,如果未能解决你的问题,请参考以下文章

通过 ajax 将 base64 图像数据发送到 cfc

将图像转换为 Json Swift 3 的 Base64

使用 JSON 从 Android 发送 Base64 图像到 php webservice,解码,保存到 SQL

AFNetworking - 向 REST 发送 HTTP POST,发送带有 Base64string 图像的 JSON

将 base64 图像作为图像发送到 RestApi (MultiPart)

我使用ionic 2开发cordova项目将base64发送到服务器图像已损坏