项目需求,图片拍摄带日期并且在相册中找不到图片。
1.拍摄照片
document.getElementById('captureImage').addEventListener('tap', function() {
console.log('发起拍照事件')
var cmr = plus.camera.getCamera();
var res = cmr.supportedImageResolutions[0];
var fmt = cmr.supportedImageFormats[0];
cmr.captureImage(function(path) {
console.log('照片地址:', path)
let date = new Date();
var timestamp = date.pattern('yyyyMMddHHmmss');
dealImage(path, function() {
writefile(timestamp, path);
});
},
function(error) {
console.log("拍照失败: " + error.message);
}, {
resolution: res,
format: fmt
}
);
}, false);
2.canvas加日期
function dealImage(path, callback) {
let date = new Date()
var dateformat = date.pattern("yyyy-MM-dd HH:mm:ss")
var img = new Image();
img.onload = function() {
var that = this;
var w = that.width,
h = that.height,
scale = w / h;
w = img.width || w;
h = img.height || (w / scale);
var quality = 0.5;
var canvas = document.getElementById('myCanvas');
var ctx = canvas.getContext('2d');
var anw = document.createAttribute("width");
anw.nodeValue = w;
var anh = document.createAttribute("height");
anh.nodeValue = h;
canvas.setAttributeNode(anw);
canvas.setAttributeNode(anh);
var fontSizeSet = parseInt((w-220)/9.5);
ctx.drawImage(that, 0, 0, w, h);
ctx.font = fontSizeSet+"px microsoft yahei";
ctx.strokeStyle = 'black';
ctx.lineWidth = 20;
ctx.fillStyle = "firebrick";
ctx.strokeText(dateformat, 110, 320);
ctx.fillText(dateformat, 110, 320);
callback();
}
img.src = plus.io.convertLocalFileSystemURL(path);
}
3.读取文件压缩
function writefile(name, imgEntryName) {
console.log("文件名:" + name);
var canvas = document.getElementById('myCanvas');
var base64 = canvas.toDataURL('image/jpeg', 0.3);
SDRoot = getSDRoot() + '/ztzq';
var imgsPath = SDRoot + '/' + todayDate;
creatFolder(imgsPath);
var bitmap = new plus.nativeObj.Bitmap();
bitmap.loadBase64Data(base64, function() {
console.log("加载Base64图片数据成功");
bitmap.save(imgsPath + '/' + name + '.jpg', {
overwrite: false,
quality: 60
}, function(i) {
bitmap.clear();
plus.io.resolveLocalFileSystemURL(imgEntryName, function(entry) {
console.log('删除原图成功')
entry.remove();
}, function(e) {
alert('失败:删除图片失败' + e.message);
});
}, function(e) {
mui.alert('保存图片失败:' + JSON.stringify(e));
});
}, function() {
mui.alert('加载Base64图片数据失败:' + JSON.stringify(e));
});
}
4. 用native.js获取 手机内部存储 和 创建文件夹等通用功能
SDRoot = getSDRoot() + '/....';
function getSDRoot() {
var environment = plus.android.importClass("android.os.Environment");
if (environment.getExternalStorageState() !== environment.MEDIA_MOUNTED) {
alert('没有找到SD卡');
return;
}
return environment.getExternalStorageDirectory();
}
function creatFolder(path) {
var File = plus.android.importClass("java.io.File");
var fd = new File(path);
if (!fd.exists()) {
fd.mkdirs();
plus.nativeUI.toast("创建成功");
} else {
console.log("文件夹已存在");
}
}
基本的代码逻辑就是这些了,新接手的项目主要是图片展示上传这部分功能,之前也没用过H5+ mui这些,一点点摸索写的,分享一下希望对大家有所帮助。