前端 Canvas 剪切图片

<img src="http://upload-images.jianshu.io/upload_images/1878425-91977abaf0823596.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240">

  • 文章分为两段

  • 一:讲解思路
  • 二:项目使用

项目地址:https://github.com/liangtongzhuo/imageCut

一:项目思路展示,打开 idea.html

  • 1.获取图片,绘制到 canvas
    2.使用 blob 插件,将canvas 转换成 blob 对象
    3.组装FormData
    4.ajax上传
<!DOCTYPE html>
<html>

<head>
    <title>
    </title>
    <!-- canvas转换blob -->
    <script type="text/javascript" src="lib/blob/canvas-to-blob.min.js"></script>
</head>

<body>
    <h1>这个页面仅仅是记录想法的</h1>
    <script>
        var input = document.createElement('input');
        input.type = 'file';
        input.addEventListener('change', function() {
            //获取上传文件
            var file = this.files[0];
            //转换成img
            var img = document.createElement('img');
            img.src = window.URL.createObjectURL(file);
            //加载图片成功
            img.onload = function() {
                var canvas = document.createElement("canvas");
                var ctx = canvas.getContext("2d");

                var width = img.width;
                var height = img.height;

                canvas.width = width;
                canvas.height = height;
                //绘制到canvas上
                ctx.drawImage(img, 0, 0, width, height);
                document.getElementsByTagName('body')[0].appendChild(canvas);


                // 利用插件
                //利用Blob插件转换,成数据
                canvas.toBlob(function(blob) {
                    //创建forme
                    var form = new FormData();
                    form.append('file', blob); 
                    // form.append("fileName", "123jpg"); //fileName为自定义,名字随机生成或者写死,看需求
                    var xmlHttp = new XMLHttpRequest();
                    xmlHttp.open("POST", '上传路径'); //注意跨域问题
                    xmlHttp.send(form);
                    xmlHttp.onreadystatechange = function() {
                        if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {      
                            console.log(xmlHttp.responseText);    
                        } else {      
                            console.log(xmlHttp.statusText);    
                        }
                    };
                });
            }
        });
        document.getElementsByTagName('body')[0].appendChild(input);
    </script>
</body>
</html>

二:项目使用

  • 打开 js/cut.js
    //选择框大小
    var widthMax = 400;
    var heightMax = 400;

    //设置预览图大小,也就是以后生成图片的尺寸
    var widthSmall = 200;
    var heightSmall = 200;
    //默认图片路径
    var imgSrc = 'img/logo.jpg';
    //图片上传路径 POST 请求,注意跨域问题
    var upImageUrl = 'upload';
  • 运行 index.html
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容