小白入门 webApp开发中如何进行相册/拍照-图片上传
白羽 2018-06-08 来源 :网络 阅读 2019 评论 0

摘要:本文将带你了解 webApp开发中如何进行相册/拍照-图片上传,希望本文对大家学WEBAPP有所帮助。





在做项目的过程中,需要从相册或是拍照,然后上传,比如修改用户头像或是上传项目图片。

效果图

 小白入门 webApp开发中如何进行相册/拍照-图片上传点击用户头像后,弹出actionSheet,选着从相册或是拍照;选着图片后就调用上传方法,上传图片;在上传之前先压缩了一下图片。

使用流程

弹出actionSheet

/

*点击头像触发*/
        document.getElementById('headImage').addEventListener('tap', function() {
            if (mui.os.plus) {
                var a = [{
                    title: "拍照"
                }, {
                    title: "从手机相册选择"
                }];
                plus.nativeUI.actionSheet({
                    title: "修改用户头像",
                    cancel: "取消",
                    buttons: a
                }, function(b) { /*actionSheet 按钮点击事件*/
                    switch (b.index) {
                        case 0:
                            break;
                        case 1:
                            getImage(); /*拍照*/
                            break;
                        case 2:
                            galleryImg();/*打开相册*/
                            break;
                        default:
                            break;
                    }
                })
            }
        }, false);
拍照上传
//拍照
        function getImage() {
            var c = plus.camera.getCamera();
            c.captureImage(function(e) {
                plus.io.resolveLocalFileSystemURL(e, function(entry) {
                    var s = entry.toLocalURL() + "?version=" + new Date().getTime();
                    uploadHead(s); /*上传图片*/
                }, function(e) {
                    console.log("读取拍照文件错误:" + e.message);
                });
            }, function(s) {
                console.log("error" + s);
            }, {
                filename: "_doc/head.png"
            })
        }
从相册选图上传
//本地相册选择
        function galleryImg() {
            plus.gallery.pick(function(a) {
                plus.io.resolveLocalFileSystemURL(a, function(entry) {
                    plus.io.resolveLocalFileSystemURL("_doc/", function(root) {
                        root.getFile("head.png", {}, function(file) {
                            //文件已存在
                            file.remove(function() {
                                console.log("file remove success");
                                entry.copyTo(root, 'head.png', function(e) {
                                        var e = e.fullPath + "?version=" + new Date().getTime();
                                        uploadHead(e); /*上传图片*/
                                        //变更大图预览的src
                                        //目前仅有一张图片,暂时如此处理,后续需要通过标准组件实现
                                    },
                                    function(e) {
                                        console.log('copy image fail:' + e.message);
                                    });
                            }, function() {
                                console.log("delete image fail:" + e.message);
                            });
                        }, function() {
                            //文件不存在
                            entry.copyTo(root, 'head.png', function(e) {
                                    var path = e.fullPath + "?version=" + new Date().getTime();
                                    uploadHead(path); /*上传图片*/
                                },
                                function(e) {
                                    console.log('copy image fail:' + e.message);
                                });
                        });
                    }, function(e) {
                        console.log("get _www folder fail");
                    })
                }, function(e) {
                    console.log("读取拍照文件错误:" + e.message);
                });
            }, function(a) {}, {
                filter: "image"
            })
        };
图片上传和压缩
//上传头像图片
        function uploadHead(imgPath) {
            console.log("imgPath = " + imgPath);
            mainImage.src = imgPath;
            mainImage.style.width = "60px";
            mainImage.style.height = "60px";
 
            var image = new Image();
            image.src = imgPath;
            image.onload = function() {
                var imgData = getBase64Image(image);
                /*在这里调用上传接口*///              mui.ajax("图片上传接口", {//                  data: {//                      //                  },//                  dataType: 'json',//                  type: 'post',//                  timeout: 10000,//                  success: function(data) {//                      console.log('上传成功');//                  },//                  error: function(xhr, type, errorThrown) {//                      mui.toast('网络异常,请稍后再试!');//                  }//              });
            }
    }
        //将图片压缩转成base64
        function getBase64Image(img) {
            var canvas = document.createElement("canvas");
            var width = img.width;
            var height = img.height;
            // calculate the width and height, constraining the proportions
            if (width > height) {
                if (width > 100) {
                    height = Math.round(height *= 100 / width);
                    width = 100;
                }
            } else {
                if (height > 100) {
                    width = Math.round(width *= 100 / height);
                    height = 100;
                }
            }
            canvas.width = width;   /*设置新的图片的宽度*/
            canvas.height = height; /*设置新的图片的长度*/
            var ctx = canvas.getContext("2d");
            ctx.drawImage(img, 0, 0, width, height); /*绘图*/
            var dataURL = canvas.toDataURL("image/png", 0.8);
            return dataURL.replace("data:image/png;base64,", "");
        }

总结

在使用中,我们可以发现,使用流程是非常清晰的;某种程度来说比原生iOS的使用还要简单一些。 

 


本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标移动开发之WebApp频道!


本文由 @白羽 发布于职坐标。未经许可,禁止转载。
喜欢 | 1 不喜欢 | 0
看完这篇文章有何感觉?已经有1人表态,100%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程