zoukankan      html  css  js  c++  java
  • 使用canvas实现图片预览、缩放(压缩)以及生成文件下载

    参考

    https://www.runoob.com/html/html5-canvas.html
    https://www.cnblogs.com/yuanzhiguo/p/8288822.html
    https://www.cnblogs.com/goloving/p/8260206.html

    工作中遇到的一个问题,手机端上传图片出现卡顿,经排查发现是图片过大引起的。参考网上资料,整理出一个图片压缩(缩放)的demo页面。

    demo包含图片预览,缩放以及生成文件下载三个功能,放在这里备忘,有需要的朋友可以拿去参考。

    canvas-preview-and-zoom.html

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8">
            <title>canvas 预览和缩放</title>
            <style type="text/css">
                .button {
                    display: inline-block;
                    padding: 0px;
                    width: 45px;
                    height: 25px;
                    line-height: 25px;
                    text-align: center;
                    font-size: 16px;
                    border: solid 1px;
                    background: #e3e3e3;
                }
            </style>
        </head>
        <body>
            <div>
                <img style=" 600px; height: 600px;" id="preview">
                <img style=" 300px; height: 300px;" id="target">
            </div>
            <div>
                <input type="file" id="select" style="display: none;">
                <label for="select" class="button">选择</label>
                <label type="button" id="zoom" class="button">缩放</label>
                <label type="button" id="download" class="button">下载</label>
            </div>
            <script type="text/javascript">
                var image = document.querySelector('#preview');
                var reader = new FileReader();
                // 预览
                reader.onload = function(e) {
                    image.src = e.target.result;
                }
                // 预览
                document.querySelector('#select').addEventListener('change', function(event) {
                    if (event.target.files.length == 0) {
                        return;
                    }
                    file = event.target.files[0];
                    if (/^image//.test(file.type)) {
                        reader.readAsDataURL(file);
                    } else {
                        alert('请选择图片');
                    }
                });
                // 缩放
                function zoomImage(img, width, height, quality) {        
                    var canvas = document.createElement('canvas');        
                    canvas.width = width;
                    canvas.height = height;
                    var context = canvas.getContext('2d');        
                    context.drawImage(img, 0, 0, width, height);
                    return canvas.toDataURL('image/jpeg', quality);
                }
                // 缩放
                document.querySelector('#zoom').onclick = function() {
                    var img64 = zoomImage(image, 300, 300, 1);
                    document.querySelector('#target').src = img64;
                };
                // 下载
                document.querySelector('#download').onclick = function() {
                    var a = document.createElement('a');
                    a.href = document.querySelector('#target').src;
                    a.download = 'zoom.jpg';
                    a.click();
                    a.remove();
                }
            </script>
        </body>
    </html>
    View Code

  • 相关阅读:
    逆向工具的使用
    linux下用crunch工具生成密码
    Bugku--web-wp
    stegsolve.jar压缩包打开和使用方法
    华为eNSP无限井号#解决方法
    后渗透之meterpreter使用攻略
    后渗透2
    Raid磁盘阵列存储原理-数据恢复思路分析
    Office文档损坏或乱码如何修复
    遇到ZFS文件系统如此棘手的问题,这种办法简单又高效!
  • 原文地址:https://www.cnblogs.com/lichmama/p/11821502.html
Copyright © 2011-2022 走看看