Files
guangan-mp/common/image.js
2025-06-16 10:09:19 +08:00

76 lines
1.9 KiB
JavaScript

// 读取图片 Base64 内容
export function TaImageToBase64(file, maxw = 500) {
return new Promise((resolve, reject) => {
if (uni.compressImage) {
uni.compressImage({
src: file,
quality: 80,
width: maxw + "px",
fail: err => reject(err),
success: res =>
readFileAsBase64(res.tempFilePath)
.then(resolve)
.catch(reject)
})
} else {
let img = new Image();
(img.crossOrigin = "Anonymous"),
(img.onload = () => {
let c = document.createElement("canvas")
let w = img.naturalWidth,
h = img.naturalHeight;
(c.width = Math.min(maxw, w)), (c.height = c.width * (h / w))
// @ts-ignore
c.getContext("2d").drawImage(img, 0, 0, c.width, c.height)
resolve(c.toDataURL("image/jpeg", 0.8))
}),
(img.src = file),
(img.onerror = () => reject(new Error("Failed to load image")))
}
})
// 读取文件为 base64 格式
function readFileAsBase64(file) {
return new Promise((resolve, reject) => {
let rd = new plus.io.FileReader()
rd.onerror = e => reject(e)
rd.onloadend = v => resolve(v.target.result)
// @ts-ignore
rd.readAsDataURL(plus.io.convertLocalFileSystemURL(file))
})
}
}
// 下载图片到本地
export function TaImageDownload(imgUrl, name = "") {
return new Promise((resolve, reject) => {
// #ifdef H5
const link = document.createElement("a")
link.href = imgUrl
link.download =
name ||
Math.random()
.toString()
.replace("0.", "img") + `.png`
link.style.display = "none"
document.body.appendChild(link)
link.click()
document.body.removeChild(link)
resolve(true)
// #endif
// #ifndef H5
uni.downloadFile({
url: imgUrl,
success: ret => {
if (ret.statusCode === 200)
uni.saveImageToPhotosAlbum({
filePath: ret.tempFilePath,
fail: err => TaToast.error("保存失败!", err).then(reject),
success: () => TaToast.success("保存成功!").then(resolve)
})
}
})
// #endif
})
}