移动Web拍照以及相册选择照片

移动Web拍照以及相册选择照片

在做移动web开发的时候经常遇到上传图片,一般两种方式,拍照和相册中选择。今天我们就来讲讲如何实现。

在这里插入图片描述

1.首先需要用到input标签

<input type="file" accept="image/*" onchange="changeImage(this)" multiple="multiple">

这里type选择file,accept限制选择文件的类型,这里是图片类型,*标识图片的后缀如:jpeg、png等 ,onchange监听选择图片的方法,multiple用于多文件上传的类型。

2.重写onchange方法

<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <title>Hello MUI</title>
    <meta name="viewport" content="width=device-width, initial-scale=1,maximum-scale=1,user-scalable=no">
    <meta name="apple-mobile-web-app-capable" content="yes">
    <meta name="apple-mobile-web-app-status-bar-style" content="black">
    <link rel="stylesheet" href="assets/mui/css/mui.min.css">
    <link rel="stylesheet" href="css/index.css">
    <script src="assets/mui/js/mui.min.js"></script>
    <script src="assets/zepto/zepto.min.js"></script>

</head>

<body>

<header class="mui-bar mui-bar-nav my-header">
    <h1 class="mui-title">拍照及相册</h1>
</header>
<div id="file-container">
    <div class="item-div">
        <span>x</span>
        <input type="file" accept="image/*" onchange="changeImage(this)" multiple="multiple">
    </div>
</div>
<div id="preDiv">
    <div class="item-div"></div>
</div>
<script>
    let count = 0;

    function changeImage(ev) {
        let file = ev.files[0];
        //图片转base64
        let fileReader = new FileReader();
        fileReader.readAsDataURL(file);
        fileReader.onload = function () {
            if (count >= 3) {
                alert("最多三张");
                count = 3;
                return;
            }
            //获取base64的图片
            let result = this.result;
            //动态创建元素设置图片背景
            let divImage = $("<div></div>");
            divImage.addClass("item-div");
            divImage.css("background-image", "url(" + result + ")");
            let spanImage = $("<span>x</span>");
            spanImage.css("display", "inline-block");
            divImage.append(spanImage);
            $("#file-container").prepend(divImage);
            //响应叉号的点击事件
            spanImage.on("click", function () {
                $(this).parent().remove();
                //计数减减
                count--;
                //上传按钮显示
                $("#file-container").children(".item-div:last-child").css("display", "inline-block");
            });
            count++;
            //如果上传了三张就隐藏上传按钮
            if (count === 3) {
                $("#file-container").children(".item-div:last-child").css("display", "none");
            }
        };
        //多次响应onchange,不然只会执行一次
        $(ev).val("")
    }

</script>
</body>

</html>

3.CSS样式

*{
    margin: 0;
    padding: 0;
}
#file-container{
    margin-top: 44px;
    width: 100%;
    height: 85px;
    background-size: cover;
    padding: 10px 10px;
    overflow: hidden;
}
.item-div{
    height: 65px;
    width: 65px;
    background-image: url("../images/iconfont-tianjia.png");
    background-size: 100% 100%;
    display: inline-block;
    position: relative;
    margin-bottom: 10px;
    margin-right: 10px;
    border: none;
    border-radius: 5px;
}
.item-div span{
    position: absolute;
    width: 20px;
    height: 20px;
    border-radius: 10px;
    background-color: red;
    color: white;
    right: 0;
    top: 0;
    text-align: center;
    line-height: 20px;
    display: none;
}
input{
    position: absolute;
    left: 0px;
    top: 0px;
    width: 100%;
    height: 100%;
    opacity: 0;
    cursor: pointer;
    z-index: 0;
}
#preDiv{
    width: 100%;
    height: 100%;
    background: black;
    opacity: 0.7;
    position: relative;
    top: 0;
    left: 0;
    display: none;
}

在onchange方法中,拿到选择的file,通过FileReader转为base64位的图片,然后再FileReader.onload加载完毕的方法中动态创建标签进行显示,最后将input的value值置为空,这是为了触发onchange方法执行多次。

这里用到了mui来控制在移动web的样式,用zepto相当于移动web端的jquery,用法和jquery完全相同

好了,到这里移动web图片选择就讲完了,大家可以把这代码拷贝下来跑一跑。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Android移动开发中,我们可以使用系统提供的相册应用来选择并添加照片。以下是一些常用的方法: 1. 使用Intent调用系统相册应用:可以通过使用Intent调用系统相册应用,让用户选择需要添加的照片。例如,可以使用以下代码: ``` Intent intent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI); startActivityForResult(intent, PICK_IMAGE_REQUEST); ``` 其中,PICK_IMAGE_REQUEST是一个自定义的请求码,用于在回调函数中判断是哪个请求的返回结果。 2. 处理返回结果:在使用Intent调用系统相册应用后,用户选择照片后会返回一个Uri对象,我们需要在回调函数中处理这个返回结果。例如,可以使用以下代码: ``` @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == PICK_IMAGE_REQUEST && resultCode == RESULT_OK && data != null && data.getData() != null) { Uri uri = data.getData(); // TODO: 处理选择照片 } } ``` 其中,我们可以通过判断requestCode和resultCode来判断是哪个请求的返回结果,并通过data.getData()方法获取选择照片的Uri对象。 3. 处理照片选择照片后,我们可以使用Uri对象来获取照片的Bitmap对象,并将其添加到界面中。例如,可以使用以下代码: ``` try { Bitmap bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), uri); // TODO: 将照片添加到界面中 } catch (IOException e) { e.printStackTrace(); } ``` 其中,getContentResolver()方法用于获取ContentResolver对象,而MediaStore.Images.Media.getBitmap()方法则可以通过Uri对象来获取照片的Bitmap对象。 以上就是在Android移动开发中选择相册添加照片的常用方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值