将base64转换为AngularJS中的图像文件
Convert base64 to image file in AngularJS
我正在使用ngImgCrop插件进行图像裁剪并发布到我的休息服务中。像这样的 HTML:
<form>
<button class="btn btn-default fileUpload" type="submit"><span>from pc</span>
<input type="file"
id="fileInput"
class="upload"
onchange="angular.element(this).scope().uploadFile(this.files[0])"/></button>
<button class="btn btn-default" type="submit">from camera</button>
<div class="cropArea">
<img-crop image="image.myImage" result-image="image.myCroppedImage"></img-crop>
</div>
<div class="hidden"><img ng-src="{{image.myCroppedImage}}" ng-model="updatedPhoto" /></div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal" ng-click="closeThisDialog(value)">Close
</button>
<button type="submit" ng-click="updatePhoto()" class="btn btn-primary">Save</button>
</form>
和控制器.js:
$scope.updatePhoto = function () {
var updatedPhotoLink = {
file: file
};
$http({
method: 'POST',
data: updatedPhotoLink,
url: '//myapiservices.com/upload'
}).then(function successCallback(response) {
console.log(response);
}, function errorCallback(response) {
console.log("error");
// called asynchronously if an error occurs
// or server returns response with an error status.
});
}
是的,它可以工作,但图像链接通过 base64 返回,但 API 链接希望通过文件返回它。
我试图添加以下内容以进行更改:
var imageBase64 = $scope.image.myCroppedImage;
var blob = new Blob([imageBase64], {type: 'image/png'});
但它不起作用,图像文件恢复为空白。如何将 base64 网址转换为文件?谢谢。
查看此链接。
function getBase64Image(base64string) {
return base64string.replace(/^data:image'/(png|jpg);base64,/, "");
}
var imgData = JSON.stringify(getBase64Image(/* base64string */));
$.ajax({
url: 'http://url.com/rest/api',
dataType: 'json',
data: imgData,
type: 'POST',
success: function(data) {
console.log(data);
}
});
这是将图像 base64 上传到服务器的示例,对于你所做的来说,这有点不同,但它确实起到了作用。
不是发送图像的 href,而是只发送 base64,而不发送转换 base64 开头的元数据。 定义 to contentType:json
并将其发送到服务器。
在服务器端,您可以获得 base64(它实际上是一个表示位数组的字符串)并将其转换为图像(PHP 转换 base64)
尝试以下操作:
<img data-ng-src="data:image/png;base64,{{image.myCroppedImage}}" ng-model="updatedPhoto" />
$scope.uploadFileCropper = function () {
debugger;
var imageBase64 = $(".cropped")[0].src;
var blob = this.dataURItoBlob(imageBase64);
var blobimage = new File([blob], 'image.png');
if (blobimage != "") {
var file = blobimage;
var payload = new FormData();
payload.append("file", file);
//data.my_imageurl = $(".cropped")[0].src;
uploadSUFileService.uploadFile('your API Route', payload).then(function (response) {
$(".MKloader").fadeOut("slow");
if (response.status == 200) {
$scope.ProductLines.my_imageurl = response.data;
document.getElementById('image').src = $scope.ProductLines.my_imageurl;
$scope.updatedataimageURl();
} else if (response.status == 203) {
console.log(status);
location.replace("/Signin");
} else if (response.status == 204) {
console.log(status);
alert("Record not updated")
}
}).catch(function (response) {
console.log(response);
$(".MKloader").fadeOut("slow");
});
}
}
$scope.dataURItoBlob = function (dataURI) {
var byteString = atob(dataURI.toString().split(',')[1]);
//var mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0];
var ab = new ArrayBuffer(byteString.length);
var ia = new Uint8Array(ab);
for (var i = 0; i < byteString.length; i++) {
ia[i] = byteString.charCodeAt(i);
}
var blob = new Blob([ab], { type: 'image/png' }); //or mimeString if you want
return blob;
}
你添加了这个:
var imageBase64 = $scope.image.myCroppedImage;
var blob = new Blob([imageBase64], {type: 'image/png'});
现在有一些变化:
var imageBase64 = $scope.image.myCroppedImage;
var blob = this.dataURItoBlob(imageBase64);
var image = new File([blob], 'image.png');
并添加此函数:
dataURItoBlob(dataURI) {
var byteString = atob(dataURI.toString().split(',')[1]);
//var mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0];
var ab = new ArrayBuffer(byteString.length);
var ia = new Uint8Array(ab);
for (var i = 0; i < byteString.length; i++) {
ia[i] = byteString.charCodeAt(i);
}
var blob = new Blob([ab], {type: 'image/png'}); //or mimeString if you want
return blob;
}
相关文章:
- 将包含SVG元素的HTML转换为图像文件
- 由多个图像文件组成的响应地图
- 使用文件夹路径名保存所有图像文件和文件名
- 如何将 html5 画布另存为窗口 8 Metro 应用程序中的图像文件
- 将图像文件存储在猫鼬模式中的二进制数据中,并以html形式显示图像
- 如何使用heatmap.js保存canvas标记生成的图像文件
- 如何使用html / angularjs保存图像文件
- 如何从 HTML 或 Javascript for Windows Phone 访问图像文件
- 在 Windows 现代(地铁)UI 应用中存储图像文件和音频文件的方法是什么?
- 节点 js 流星 js 图像文件上传图像损坏
- 从图像URL javascript html保存图像文件
- 如何使用AJAX读取图像文件并渲染到Canvas
- 浏览器和大量的图像文件处理
- 什么错误I'我在下面的jQuery代码中集成filepicker.io来上传一个图像文件
- 节点:将 base64 源写入图像文件
- 如何将图像文件以及JavaScript变量的值上传到服务器和数据库
- 如何从本地文件夹(磁盘存储)读取或获取图像文件,并使用nodejs服务器将其发送到Angularjs
- 如何使用expressnodejs上传图像文件并进行显示
- 如何用我在HTML5画布上绘制的src保存图像文件
- 图像文件因websocket文件传输而损坏