canvas前端压缩图片

参考网上的用法,下面是利用canvas进行的图片压缩

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <meta content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=no" name="viewport">
    <meta content="yes" name="apple-mobile-web-app-capable">
    <meta content="black" name="apple-mobile-web-app-status-bar-style">
    <meta content="telephone=no" name="format-detection">
    <meta content="email=no" name="format-detection">
    <title>slip</title>
    <style>
        *{padding: 0;margin: 0;}

    </style>

</head>

<body>
<div class="input">
    <input type="file" id="file" accept="image/*">
</div>

</body>

<script type="text/javascript">

    var img=new Image();
    var reader=new FileReader();
    // 选择的文件对象
    var file = null;
    var eleFlile=document.querySelector(‘#file‘);
    var canvas=document.createElement(‘canvas‘);
    var context=canvas.getContext(‘2d‘);
    img.onload=function () {
        //图片原始大小
        var originWidth = this.width;
        var originHeight = this.height;
        //限制图片大小
        var maxWidth = 400;
        var maxHeight = 400;

        var targetWidth = originWidth, targetHeight = originHeight;
        if (originHeight > maxHeight || originWidth > maxWidth) {
            if (originWidth / originHeight > maxWidth / maxHeight) {
                //更宽
                targetWidth = maxWidth;
                targetHeight = Math.round(maxWidth * (originHeight / originWidth));
            } else {
                //更高
                targetHeight = maxHeight;
                targetWidth = Math.round(targetHeight * (originWidth / originHeight))
            }
        }
        //图片缩放
        canvas.width = targetWidth;
        canvas.height = targetHeight;
        //清除画布
        context.clearRect(0, 0, targetWidth, targetHeight);
        //图片压缩
        context.drawImage(img, 0, 0, targetWidth, targetHeight);
        //转换上传toBlob
        canvas.toBlob(function (blob) {
            //图片ajax上传
            var xhr=new XMLHttpRequest();
            //文件上传成功
            xhr.onreadystatechange=function () {
                if(xhr.status==200){
                    alert("上传成功")
                }
            };
            xhr.open("POST","upload.php",true);
            xhr.send(bolb);
        } ,file.type || ‘image/png‘);
            var newImg = document.createElement("img"),
                url = URL.createObjectURL(blob);

            newImg.onload = function () {
                // no longer need to read the blob so it‘s revoked
                URL.revokeObjectURL(url);
            };

            newImg.src = url;
            document.body.appendChild(newImg);

//        })
        //图片上传toDataURL
        var url=canvas.toDataURL();
        var newImg = document.createElement("img")
        newImg.src = url;
        document.body.appendChild(newImg);
    }
    //文件base64化
    reader.onload=function (e) {
        img.src=e.target.result;
    };
    eleFlile.addEventListener("change",function (event) {

        file=event.target.files[0];
        if(file.type.indexOf("image")==0){
            reader.readAsDataURL(file);
        }else {
            alert("请传图片")
        }
    })
</script>

</html>

原文地址:https://www.cnblogs.com/yuanzhiguo/p/8288822.html

时间: 2024-08-30 09:03:01

canvas前端压缩图片的相关文章

如何有效实现前端压缩图片并上传功能

随着现在手机的像素越来越高,很多照片动辄几兆甚至十几兆,上传后在服务器端压缩已经越来越不能满足当今的需求.这对于许多技术人员来说,处理起来这样的问题往往不知道该怎么下手,那么下面就跟大家讲解一下如何在前端进行图片压缩后上传到服务器. 以上传单张图片为例,多张图片同理,多嵌套一层循环即可.代码实现如下: html: <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <meta

前端压缩图片代码,支持移动端和pc 端,还有拍照后获取到的照片

1. upload   使用者调用的方法 2. rotateImg  旋转照片,用于把iOS拍照后获取到的图片摆正 3. dataURLtoFile 将压缩后的图片转为file 对象,区分一个 blob 和 base64, 兼容哪个就用哪个 4. 得先引入  exif-js  用于拿到图片信息,确定 iOS 怎么旋转的 1 import EXIF from 'exif-js' 2 var picValue = null, 3 headerImage = '', 4 imgName = '', 5

原生JS,前端压缩图片方案

在移动互联网高速发展的今天,有太多太多的应用需要用户在移动Web上传图片文件.然而在上传图片前就对图片进行了压缩处理,从而提高图片的上传效率,减少用户的流量浪费,后台处理和用户体验也会得到提升. 为什么要这样做 遇到的问题: 1:在低网速下上传图片进度缓慢,用户体验差 2:后台处理较大的文件压力大. 3:业务需求要求文件大小..等等(或许还有更多) 在处理以上问题之前,需要给自己一些疑问 1:图片是否有必要保存原图 2:主要使用场景在移动端还是在PC端(图片处理消耗的性能和速度需要考虑) 3:需

利用 canvas 实现压缩图片

/** * nase64Data --> 要压缩的图片base64数据 * width --> 宽度 * height --> 高度 * _callback --> 回调函数 */ function getCompressImage(base64Data, width, height, _callback) { var oldimg = new Image(); oldimg.src = base64Data; var canvas = document.createElement

前端获取图片压缩后上传给后台

 此前有同事跟我聊过关于移动端用canvas压缩图片后再上传的功能,最近有了点空闲时间,所以就实践了一下.demo效果链接在文章底部贴出. 在做移动端图片上传的时候,用户传的都是手机本地图片,而本地图片一般都相对比较大,拿iphone6来说,平时拍很多图片都是一两M的,如果直接这样上传,那图片就太大了,如果用户用的是移动流量,完全把图片上传显然不是一个好办法. 目前来说,HTML5的各种新API都在移动端的webkit上得到了较好的 实现.根据查看caniuse,本demo里使用到的FileRe

canvas压缩图片

1.canvas.toDataUrl压缩图片 canvas的toDataUrl方法可以将内容导出为base64编码格式的图片,采用base64编码将比源文件大1/3,但是该方法可以指定导出图片质量,所以前端可实现上传图片的压缩.先通过fileApi拿到本地图片地址,然后新建一个Img元素,图片绘制到canvas中后再将其导出(压缩).例如: $(':file').on('change',function(){         var file = this.files[0];         v

【canvas】 使用canvas压缩图片大小

------------恢复内容开始------------ 由于各种大大小小的原因,自己最近经历了一些面试,其中有一个面试题是这样的,使用canvas怎样压缩图片大小 这道题给我问蒙了,因为我没用过canvas压缩图片 回去查资料,发现手机端在上传图片的时候,调起相机拍照的时候超过2m了,所以用到canvas压缩,优化用户体验 解决方法: 1. 将图片的file文件转成baseURL 2. 创建一个image表情去接受文件获取图片的宽高和比例. 3. 创建canvas画布设置画布的大小. 4.

上传图片时压缩图片 - 前端(canvas)做法

HTML前端代码: <?php $this->layout('head'); ?> <?php $this->layout('sidebar'); ?> <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" /> <style type=

前端实现图片压缩上传

当项目中有图片上传功能时,便会产生服务器资源占用问题,为避免上传图片太大占用太多空间,需要将图片进行压缩之后再存储. 图片压缩可以通过前端或者后端都可以实现,这里主要闲扯一下我使用的前端图片压缩: 这里介绍的js压缩图片的主要思想是:首先求出上传的图片大小,然后判断是否大于限制的最大size,若大于,则将图片进行压缩.压缩的过程就是,使用canvas将要压缩的图片画出来. 首先使用FileReader对象读取图片,然后将图片进行压缩,将压缩之后的对象转换成blob对象(关于blob类型请参考ht