Files

154 lines
4.7 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* @name: useImage
* @author: kahu4
* @date: 2023-11-07 16:34
* @descriptionuseImage
* @update: 2023-11-07 16:34
* */
export function useImage() {
/**
* options?: PreviewImageOptions
* @param options {PreviewImageOptions}
* @returns {Promise<unknown>}
*/
function preview(options) {
return new Promise((resolve, reject) => {
uni.previewImage({
indicator: 'default',
loop: true,
...options,
success: () => resolve(true),
fail: (err) => reject(err)
})
})
}
/**
* 获取图片信息
* @param src
* @returns {Promise<GetImageInfoSuccessData>}
*/
function getImageInfo(src) {
return new Promise((resolve, reject) => {
uni.getImageInfo({
src,
success: (res) => {
resolve(res)
},
fail: (error) => {
reject(error)
}
})
})
}
/**
* base64转换为path
* @param base64Data
* @returns {Promise<unknown>}
*/
function base64ToUrl(base64Data) {
return new Promise((resolve, reject) => {
// #ifdef H5
// 构建blob对象 data:image/png;base64,
const indexOf = base64Data.indexOf('base64,');
base64Data = base64Data.slice(indexOf + 7)
const byteCharacters = atob(base64Data);
const byteNumbers = new Array(byteCharacters.length);
for (let i = 0; i < byteCharacters.length; i++) {
byteNumbers[i] = byteCharacters.charCodeAt(i);
}
const byteArray = new Uint8Array(byteNumbers);
const blob = new Blob([byteArray], {type: 'image/png'});
// 创建一个链接指向这个blob
const url = URL.createObjectURL(blob);
resolve(url)
// #endif
// #ifdef MP-WEIXIN
const time = new Date().getTime();
const imgPath = wx.env.USER_DATA_PATH + "/poster" + time + "share" + ".png";
//如果图片字符串不含要清空的前缀,可以不执行下行代码.
const imageData = base64Data.replace(/^data:image\/\w+;base64,/, "");
const file = wx.getFileSystemManager();
file.writeFileSync(imgPath, imageData, "base64");
resolve(imgPath)
// #endif
// #ifdef APP-PLUS
const bitmap = new plus.nativeObj.Bitmap('test');
bitmap.loadBase64Data(
base64Data,
function () {
const url = '_doc/' + new Date() + '.png'; // url建议用时间戳命名方式
console.log('url:', url);
bitmap.save(
url,
{
overwrite: true // 是否覆盖
// quality: 'quality' // 图片清晰度
},
i => {
resolve(url)
},
e => {
bitmap.clear();
reject(e)
}
);
},
e => {
bitmap.clear();
reject(e)
}
);
// #endif
})
}
/**
* 保存图片到相册
* @param filePath
* @param name h5海报名称
* @returns {Promise<unknown>}
*/
function saveImageToPhotosAlbum(filePath, name = '') {
return new Promise((resolve, reject) => {
// #ifndef H5
uni.authorize({
scope: 'scope.writePhotosAlbum',
success() {
uni.saveImageToPhotosAlbum({
filePath,
success() {
resolve(true)
}
})
}
})
// #endif
// #ifdef H5
// 创建一个下载链接
const link = document.createElement('a');
link.href = filePath;
link.download = name;
// 添加它到DOM并触发点击
document.body.appendChild(link);
link.click();
// 确保我们释放这个URL以防止内存泄漏
document.body.removeChild(link);
window.URL.revokeObjectURL(filePath);
resolve(true)
// #endif
})
}
return {
preview,
getImageInfo,
base64ToUrl,
saveImageToPhotosAlbum
}
}