uniapp临时图片地址转base64(微信小程序也可使用)

1,495次阅读
没有评论

base64转临时路径

/**
 * base64转临时路径
 * @param base64
 * @returns
 */
function base64ToPath(base64: string) {
    return new Promise(function(resolve, reject) {
        if (typeof window === "object" && "document" in window) {
            base64 = base64.split(",");
            var type = base64[0].match(/:(.*?);/)[1];
            var str = atob(base64[1]);
            var n = str.length;
            var array = new Uint8Array(n);
            while (n--) {
                array[n] = str.charCodeAt(n);
            }
            return resolve(
                (window.URL || window.webkitURL).createObjectURL(
                    new Blob([array], { type: type })
                )
            );
        }
        var extName = base64.match(/data\:\S+\/(\S+);/);
        if (extName) {
            extName = extName[1];
        } else {
            reject(new Error("base64 error"));
        }
        var fileName = getNewFileId() + "." + extName;
        if (typeof plus === "object") {
            var basePath = "_doc";
            var dirPath = "uniapp_temp";
            var filePath = basePath + "/" + dirPath + "/" + fileName;
            if (
                !biggerThan(
                    plus.os.name === "Android" ? "1.9.9.80627" : "1.9.9.80472",
                    plus.runtime.innerVersion
                )
            ) {
                plus.io.resolveLocalFileSystemURL(
                    basePath,
                    function(entry) {
                        entry.getDirectory(
                            dirPath,
                            {
                                create: true,
                                exclusive: false,
                            },
                            function(entry) {
                                entry.getFile(
                                    fileName,
                                    {
                                        create: true,
                                        exclusive: false,
                                    },
                                    function(entry) {
                                        entry.createWriter(function(writer) {
                                            writer.onwrite = function() {
                                                resolve(filePath);
                                            };
                                            writer.onerror = reject;
                                            writer.seek(0);
                                            writer.writeAsBinary(
                                                base64.replace(
                                                    /^data:\S+\/\S+;base64,/,
                                                    ""
                                                )
                                            );
                                        }, reject);
                                    },
                                    reject
                                );
                            },
                            reject
                        );
                    },
                    reject
                );
                return;
            }
            var bitmap = new plus.nativeObj.Bitmap(fileName);
            bitmap.loadBase64Data(
                base64,
                function() {
                    bitmap.save(
                        filePath,
                        {},
                        function() {
                            bitmap.clear();
                            resolve(filePath);
                        },
                        function(error) {
                            bitmap.clear();
                            reject(error);
                        }
                    );
                },
                function(error) {
                    bitmap.clear();
                    reject(error);
                }
            );
            return;
        }
        if (typeof wx === "object" && wx.canIUse("getFileSystemManager")) {
            var filePath = wx.env.USER_DATA_PATH + "/" + fileName;
            wx.getFileSystemManager().writeFile({
                filePath: filePath,
                data: base64.replace(/^data:\S+\/\S+;base64,/, ""),
                encoding: "base64",
                success: function() {
                    resolve(filePath);
                },
                fail: function(error) {
                    reject(error);
                },
            });
            return;
        }
        reject(new Error("not support"));
    });
}

临时路径转base64

/**
 * 临时图片路径转base64
 * @param {Object} param 传一个对象,对象里包括
 * url: 临时图片存放路径,选择图片返回的相对路径
 * type: 图片类型,如:png
 */
function base64(url: string, type: string) {
    return new Promise((resolve, reject) => {
        if (!!uni.getFileSystemManager()) {
            uni.getFileSystemManager().readFile({
                filePath: url, //选择图片返回的相对路径
                encoding: "base64", //编码格式
                success: (res) => {
                    resolve(
                        "data:image/" +
                            type.toLocaleLowerCase() +
                            ";base64," +
                            res.data
                    );
                },
                fail: (res) => reject(res.errMsg),
            });
        } else {
            uni.request({
                url: url,
                method: "GET",
                responseType: "arraybuffer",
                success: (ress) => {
                    let base64 = wx.arrayBufferToBase64(ress.data); //把arraybuffer转成base64
                    base64 = "data:image/jpeg;base64," + base64; //不加上这串字符,在页面无法显示的哦
                    resolve(base64);
                },
                fail: (res) => reject(res.errMsg),
            });
        }
    });
}
正文完
可以使用微信扫码关注公众号(ID:xzluomor)
post-qrcode
 0
评论(没有评论)

文心AIGC

2023 年 9 月
 123
45678910
11121314151617
18192021222324
252627282930  
文心AIGC
文心AIGC
人工智能ChatGPT,AIGC指利用人工智能技术来生成内容,其中包括文字、语音、代码、图像、视频、机器人动作等等。被认为是继PGC、UGC之后的新型内容创作方式。AIGC作为元宇宙的新方向,近几年迭代速度呈现指数级爆发,谷歌、Meta、百度等平台型巨头持续布局
文章搜索
热门文章
手把手教你用AI 10分钟生成一个APP!零基础也能搞定

手把手教你用AI 10分钟生成一个APP!零基础也能搞定

今日,我将向大家展示DeepSeek的全新玩法——从零开始,利用AI创建一个完整的应用程序。借助DeepSee...
最新评论
ufabet ufabet มีเกมให้เลือกเล่นมากมาย: เกมเดิมพันหลากหลาย ครบทุกค่ายดัง
tornado crypto mixer tornado crypto mixer Discover the power of privacy with TornadoCash! Learn how this decentralized mixer ensures your transactions remain confidential.
ดูบอลสด ดูบอลสด Very well presented. Every quote was awesome and thanks for sharing the content. Keep sharing and keep motivating others.
ดูบอลสด ดูบอลสด Pretty! This has been a really wonderful post. Many thanks for providing these details.
ดูบอลสด ดูบอลสด Pretty! This has been a really wonderful post. Many thanks for providing these details.
ดูบอลสด ดูบอลสด Hi there to all, for the reason that I am genuinely keen of reading this website’s post to be updated on a regular basis. It carries pleasant stuff.
Obrazy Sztuka Nowoczesna Obrazy Sztuka Nowoczesna Thank you for this wonderful contribution to the topic. Your ability to explain complex ideas simply is admirable.
ufabet ufabet Hi there to all, for the reason that I am genuinely keen of reading this website’s post to be updated on a regular basis. It carries pleasant stuff.
ufabet ufabet You’re so awesome! I don’t believe I have read a single thing like that before. So great to find someone with some original thoughts on this topic. Really.. thank you for starting this up. This website is something that is needed on the internet, someone with a little originality!
ufabet ufabet Very well presented. Every quote was awesome and thanks for sharing the content. Keep sharing and keep motivating others.
热评文章
手把手教你用AI 10分钟生成一个APP!零基础也能搞定

手把手教你用AI 10分钟生成一个APP!零基础也能搞定

今日,我将向大家展示DeepSeek的全新玩法——从零开始,利用AI创建一个完整的应用程序。借助DeepSee...