fileReader之自定义显示图片的盒子以及drawImage实现的案例

一、fileReader

二、图片的预览案例

三、截取视频中的某一帧

四、图片压缩

 

drawImage 
     1. ctx.drawImage(img,x,y)
            img : 要使用的对象
            x y : 在画布上开始的坐标
     2. ctx.drawImage(img,x,y,width,height)
            img : 要使用的对象
            x y : 在画布上开始的坐标
            width height : 在canvas中显示的大小
     3. ctx.drawImage(img,开始x,开始y,截取的宽度,截取的高度,画布x,画布y,图像宽,图像高)
            img : 要使用的对象

一、我们可以使用fileReader属性来把用户通过input的file类型选择的图片展示在自己写的盒子里

html部分:

<input type="file" name="" id="">
<div class="box"></div>

js部分:

        var input = document.querySelector("input");
        var box = document.querySelector(".box");
        var f = new FileReader();
        f.onload = function () {
            console.log(f.result);
            var image = document.createElement("img");
            image.src = f.result;
            image.width=100
            box.appendChild(image)
        }
        input.onchange=function(){
            f.readAsDataURL(input.files[0]);
        }

最终的效果图如下:

二、图片的预览案例

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>

<body>
    <input type="file">
    <div class="box"></div>
    <script>
        var file = document.querySelector("input")
        var box = document.querySelector(".box")
        var f = new FileReader()

        f.onload = function () {
            var img = new Image()
            img.src = f.result

            img.onload = function () {
                var canvas = document.createElement("canvas")
                var ctx = canvas.getContext("2d")
                canvas.width = 100
                canvas.height = 100

                var cut = cutImage(img)

                ctx.drawImage(img, cut.x, cut.y, cut.width, cut.height, 0, 0, 100, 100)

                box.appendChild(canvas)
            }
        }

        file.onchange = function () {
            f.readAsDataURL(file.files[0])
        }

        function cutImage(img) {
            var width = img.width,
                height = img.height

            if (width >= height) {
                return {
                    x: width / 2 - height / 2,
                    y: 0,
                    width: height,
                    height: height
                }
            }
            if (width < height) {
                return {
                    x: 0,
                    y: height / 2 - width / 2,
                    width: width,
                    height: width
                }
            }
        }

    </script>
</body>

</html>

最终实现的效果图:

 

三、截取视频中的某一帧

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    <video src="./video/1.mp4" controls></video>
    <button>15</button>
    <script>
        var video = document.querySelector("video")
        var btn = document.querySelector("button")
        btn.onclick = function(){
            var v = document.createElement("video") // 穿件一个video标签
            var canvas = document.createElement("canvas") // 创建一个canvas标签
            var ctx = canvas.getContext("2d") 
            v.src = video.src // 将video的src 赋值给新创建的v的src
            v.currentTime = btn.innerHTML //将新创建的v的时间调整到某个时间点

            v.oncanplay = function(){
                console.log([v])
                ctx.drawImage(v,0,0,v.videoWidth,v.videoHeight,0,0,300,150) //将这一帧的图像使用canvas画下来 
                document.body.appendChild(canvas)// 将canvas添加到body中
            }

        }

    </script>
</body>
</html>

最终实现的效果图如图所示:

 四、图片压缩

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    <input type="file">
    <textarea name="" id="" cols="30" rows="10"></textarea>
    <script>
        /*

            图片压缩
                canvas.toDataURL("image/jpeg",0.5)
                第一个参数指明格式
                第二个是图片的质量
        */
        
        var file = document.querySelector("input"),
            f = new FileReader()

        f.onload = function(){
            var img = new Image()
            img.src = f.result
            img.onload = function(){
                var canvas = document.createElement("canvas")
                var ctx = canvas.getContext("2d")
                canvas.width = img.width
                canvas.height = img.height
                ctx.drawImage(img,0,0)
                console.log(canvas.toDataURL("image/webp",0.1)) //返回一个base64的格式
            }
        }

        file.onchange = function(){
            f.readAsDataURL(file.files[0])
        }
    
    </script>
</body>
</html>

 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值