javascript - 嗨,是否可以使用 javascript/angularjs 和 ionic1 将 Blob/Base64 转换为 fileURI 格式。
问题描述
我正在尝试使用 cordovaCamera 和 imagePicker 捕获图像,然后删除 EXIF 数据并创建删除元数据后获得的图像副本。
在下面的代码中,我得到了 Blob 格式的图像文件,我将其传递给 resolveLocalFileSystemURL 但由于 resolveLocalFileSystemURL 不接受 blob 或 base64 数据而无法继续,因此可以将 Blob/Base64 转换为 fileURI 格式。或者有什么办法可以解决这个问题。
在 html 中:
<input id="erd" type="file"/>
在 controllers.js 中:
var input = document.querySelector('#erd');
input.addEventListener('change', load);
function load(){
var fr = new FileReader();
fr.onload = process;
fr.readAsArrayBuffer(this.files[0]);
console.log(" onload "+URL.createObjectURL(this.files[0]));
}
function process(){
var dv = new DataView(this.result);
var offset = 0, recess = 0;
var pieces = [];
var i = 0;
if (dv.getUint16(offset) == 0xffd8){
offset += 2;
var app1 = dv.getUint16(offset);
offset += 2;
while (offset < dv.byteLength){
if (app1 == 0xffe1){
pieces[i] = {recess:recess,offset:offset-2};
recess = offset + dv.getUint16(offset);
i++;
}
else if (app1 == 0xffda){
break;
}
offset += dv.getUint16(offset);
var app1 = dv.getUint16(offset);
offset += 2;
}
if (pieces.length > 0){
var newPieces = [];
pieces.forEach(function(v){
newPieces.push(this.result.slice(v.recess, v.offset));
}, this);
newPieces.push(this.result.slice(recess));
var br = new Blob(newPieces, {type: 'image/jpeg'});
console.log(" pieces.length "+URL.createObjectURL(br));
$scope.strimg=URL.createObjectURL(br).toString();
//var file = new File(URL.createObjectURL(br), "uploaded_file.jpg", { type: "image/jpeg", lastModified: Date.now() });
var myFile = blobToFile(br, "my-image.jpg");
console.log('myFile'+JSON.stringify(myFile));
$scope.strimg = myFile;
createFileEntry($scope.strimg);
}
}
}
function blobToFile(theBlob,fileName){
console.log('theBlob'+theBlob+fileName);
var b = theBlob;
b.lastModifiedDate = new Date();
b.name = fileName; //Cast to a File() type
return theBlob;
}
function createFileEntry(fileURI) {
window.resolveLocalFileSystemURL(fileURI, copyFile, fail);
}
// 5
function copyFile(fileEntry) {
console.log(" copyFile "+fileEntry);
var name = fileEntry.fullPath.substr(fileEntry.fullPath.lastIndexOf('/') + 1);
var newName = name;
$scope.filepathnew="file:///storage/emulated/0/Android/data/com.offermanagement.system/files/";
window.resolveLocalFileSystemURL($scope.filepathnew, function(fileSystem2) {
fileEntry.copyTo(
fileSystem2,
newName,
onCopySuccess,
fail
);
},
fail);
}
function onCopySuccess(entry) {
$scope.$apply(function () {
$rootScope.profilepic=entry.nativeURL;
$rootScope.images.push(entry.nativeURL);
$rootScope.items.push({src:entry.nativeURL,sub:'' });
});
}
function fail(error) {
console.log("fail: " + error.code);
}
对于上面的代码,我收到以下错误“Uncaught TypeError:resolveLocalFileSystemURI 的参数“uri”的错误类型:预期的字符串,但得到了 Blob。”
解决方案
推荐阅读
- android-studio - 错误:启动 Studio 时出错 无法加载 JVM DLL
- python - Python:比较列表中的值
- python - 使用 matplotlib 和 seaborn 的两列子图
- python - Python Pandas 基于分组删除重复行
- swift - 如何将 UIDatePicker 中的日期捕获到外部变量
- function - 如何从反应本机组件中的函数传递数据
- php - 使用ajax调用从服务器文件夹下载图像
- makefile - 从源代码构建 GNU Octave 时出错
- javascript - 滚动事件监听器在 javascript 中不起作用
- django - 在 Django 中按类别而不是按产品搜索