0

そこで、次のように 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

これは、base64 化されたイメージの一部である文字が削除されているため、JSON を正しくデコードしていないと私に信じさせます。これは単なる仮定です。何が間違っているのか正確にはわかりません。どんな助けでも素晴らしいでしょう。これを読んでくれてありがとう。

4

1 に答える 1

2

次の文字列を削除します。

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

...$_POST['PicFile']代わりに処理します。その前処理により、すべての+文字 (Base64 で許可されている) をスペース ( ) に変換し、バイナリを効果的に分割します。

于 2012-10-01T10:55:36.440 に答える