Files
xsl 9eec4369da feat(taobao): add native mini program with shared backend
Preserve H5 flows while adding Taobao identity, native capture, reports and isolated local development. Fix canceled province selection and expired-session logout. Record passing local regressions, two pre-existing H5 assertion failures and pending platform validation.
2026-10-19 20:14:31 +08:00

34 lines
1.9 KiB
JavaScript

// Always redraw to JPEG: native compressImage changes quality, not dimensions.
var MAX_SIDE = 1280;
function compressToBase64(src, page) {
return new Promise(function (resolve, reject) {
my.getImageInfo({ src: src, success: function (info) {
if (page.alive === false) { reject({ canceled: true }); return; }
if (!(info.width > 0 && info.height > 0)) { reject(new Error('无法读取照片尺寸,请重新选择')); return; }
var scale = Math.min(1, MAX_SIDE / Math.max(info.width, info.height));
var w = Math.max(1, Math.round(info.width * scale)), h = Math.max(1, Math.round(info.height * scale));
page.setData({ compressWidth: w, compressHeight: h }, function () {
if (page.alive === false) { reject({ canceled: true }); return; }
try {
var ctx = my.createCanvasContext('compress-canvas');
ctx.clearRect(0, 0, w, h);
ctx.drawImage(src, 0, 0, w, h);
ctx.draw(false, function () {
if (page.alive === false) { reject({ canceled: true }); return; }
ctx.toTempFilePath({ x: 0, y: 0, width: w, height: h, destWidth: w, destHeight: h, fileType: 'jpg', quality: 0.88,
success: function (result) {
var file = result.apFilePath || result.tempFilePath;
if (!file) { reject(new Error('照片处理失败,请重试')); return; }
try {
my.getFileSystemManager().readFile({ filePath: file, encoding: 'base64',
success: function (r) { resolve('data:image/jpeg;base64,' + r.data); }, fail: reject });
} catch (e) { reject(new Error('当前淘宝版本不支持照片读取,请升级后重试')); }
}, fail: reject });
});
} catch (e) { reject(new Error('照片处理不可用,请升级淘宝后重试')); }
});
}, fail: reject });
});
}
module.exports = { MAX_SIDE: MAX_SIDE, compressToBase64: compressToBase64 };