前端canvas压缩图片

canvas除了用来画图形外,还有另一个妙用,就是可以用来压缩图片。

首先需要input file标签,同时设置为只能选择图片类型

<!-- html结构可以自定义,核心压缩代码不涉及html限制-->
<div class="m-form">
    <div class="picBox">
    <div class="upload">
        <label for="uploadPic">
        <i></i>
        <p>点击上传图片</p>
        <input type="file" id="uploadPic" class="file js-uploadfile" accept="image/png, image/jpeg, image/gif, image/jpg">
        </label>
    </div>
    <!-- 上传后图片显示结构 -->
    <!-- <div class="pic">
        <div class="con">
            <a href="javascript:void(0);" class="btn"></a>
            <img src="" alt="">
        </div>
        <input type="hidden" class="data" value="">
        </div> -->
    </div>
</div>

其次,是js

//上传图片
function uploadFile(){
    var reader=new FileReader();
    var img = new Image();
    // 选择的文件对象
    var file = null;
    // 缩放图片需要的canvas
    var canvas = document.createElement('canvas');
    var context = canvas.getContext('2d');
    // 文件base64化,以便获知图片原始尺寸
    reader.onload = function(e) {
        img.src = e.target.result;
    };
    $(".js-uploadfile").change(function(event) {
        file=$(this).get(0).files[0];
        // 选择的文件是图片,在html上直接限制比较方便
        reader.readAsDataURL(file);
    });
    // base64地址图片加载完毕后
    img.onload = function () {
        // 图片原始尺寸
        var originWidth = this.width;
        var originHeight = this.height;
        // 最大尺寸限制
        var maxWidth = 750;
        // 目标尺寸
        var targetWidth = originWidth,targetHeight = originHeight;;
        // 图片尺寸超过750的限制
        if (originWidth > maxWidth) {
            targetWidth = maxWidth;
            targetHeight = Math.round(maxWidth * (originHeight / originWidth));
        }
                    
        // canvas对图片进行缩放
        canvas.width = targetWidth;
        canvas.height = targetHeight;
        // 清除画布
        context.clearRect(0, 0, targetWidth, targetHeight);
        // 图片压缩
        context.drawImage(img, 0, 0, targetWidth, targetHeight);
        // canvas转为dataUrl并上传
        var dataURL=canvas.toDataURL(file.type || 'image/png');//设置为原图片格式或者png
        var html='<div class="pic">'+
                '<div class="con">'+
                '<a href="javascript:void(0);" class="btn"></a>'+
                '<img src="'+dataURL+'" alt="">'+
                '</div>'+
                '<input type="hidden" class="data" value="'+dataURL+'">'+
             '</div>';
        console.log(dataURL);
        $(".m-form .picBox").append(html);
        $(".js-uploadfile").val("");
    };
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML标准。 注意:讲述HT...
    kismetajun阅读 28,531评论 1 45
  • 我想很多程序员应该记得 GitHub 上有一个 Awesome - XXX 系列的资源整理。awesome-jav...
    白水螺丝阅读 7,453评论 0 24
  • 米酒鸡蛋加山药红薯,佐以红枣枸杞桂圆葡萄干。小食为腰果,蓝莓红莓干。
    刺猬的白肚皮阅读 1,679评论 0 0
  • 诚信是金。 这是一幅字。 是朋友张华送给我的一帼字。每年新年来到之前,他都会送我一幅字,有好几年了。他在相城太平街...
    蒋坤元阅读 6,646评论 25 76
  • 在又一个漫长的夜班结束后,我总算是盼来了一天的休息,终于可以好好的放松一下了。由于车间领导做出了另外的安排,而我也...
    夏野阅读 1,526评论 0 0

友情链接更多精彩内容