获取预览的base64格式的图片数据调后台接口加水印获取不到

通过input file调用手机摄像头拍照(在PC端是选择图片),获取到的图片铜鼓FileReader预览,然后将获取到的base64传到后台接口加水印,接口依然返回加了水印的base64的格式。
代码是这样的:

//点击拍照并预览
$(".mui-input-row input").change(function(e){
    var _this = this;
    var files = e.target.files;
    var reader = new FileReader();
    
    reader.onload = function(){
        var url = this.result;
        var urlSplit = url.split(",")[1];
        
        //添加水印
        addWaterMark(urlSplit,_this);
        
        //$(_this).siblings("img").attr("src",url);
        
    };
    
    reader.readAsDataURL(files[0]);
});

//添加水印
function addWaterMark(urlSplit,element){

var inputBase64 = urlSplit;
var dataJson={
    "text" : "重庆联通",
    "inputBase64" : inputBase64
};

console.log("==============添加水印请求参数 :"+JSON.stringify(dataJson));


$.ajax({
    type: "post",
    url: apc_rest_host + "rest/processModelServiceRest/addTextToImage4Base64",
    contentType: "application/x-www-form-urlencoded; charset=utf-8",
    async: false,
    data:dataJson,
    dataType: "json",
    crossDomain: true == !(document.all),
    beforeSend: function() {
        mui.loading.show("添加水印");
    },
    success: function(data){
        console.log("添加水印返回参数:"+JSON.stringify(data));
        if (data.respCode=="0000") {
            var imgUrl = "data:image/png;base64,"+data.content;
            //addWaterMarkArr.push(imgUrl);
            //$("ul").eq(i).find("img").attr("src",imgUrl);
            $(element).siblings("img").attr("src",imgUrl);
        } else {
            mui.toast(data.content);
        }
    },
    error: function(data) {
        mui.toast("添加水印Ajax请求失败");
    },
    complete:function(){
        mui.loading.hide();
    }
});

}

问题是:通过手机自带照相机拍照,调用加水印接口会报错,后台日志取不到inputBase64这个参数,但是用自他相机,比如b612相机没有问题,在pc端选择图片上传也没有问题。请问这个如何解决??谢谢~

PS:我试过不在reader.onload里面取base64的数据去调水印接口,等图片都处于预览的状态,点击确定的时候再去取,调预览接口依然取不到这个数据。

阅读 2.4k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏