JavaScript实现图片压缩,JS图片压缩

1. 选择一张图片

    const img_original = document.getElementById(‘img_original‘);
    const img_output = document.getElementById(‘img_output‘);
    let blob;

    function preview(file) {
        let reader = new FileReader();
        reader.onload = function () {
            img_original.src = this.result;
            img_original.onload = () => {
                console.log(‘图片原始宽高:‘, img_original.naturalWidth, img_original.naturalHeight);
                console.log(‘图片原始大小:‘, file.size)
            }
        };
        reader.readAsDataURL(file);
    }

  

2. 使用Canvas压缩

function compress() {
        // 压缩到图片原始宽高的一半
        let w = img_original.naturalWidth / 2;
        let h = img_original.naturalHeight / 2;
?
        let canvas = document.createElement(‘canvas‘);
        let ctx = canvas.getContext(‘2d‘);
        let anw = document.createAttribute("width");
        anw.nodeValue = w;
        let anh = document.createAttribute("height");
        anh.nodeValue = h;
        canvas.setAttributeNode(anw);
        canvas.setAttributeNode(anh);
?
        ctx.fillRect(0, 0, w, h);
        ctx.drawImage(img_original, 0, 0, w, h);
?
        const base64 = canvas.toDataURL(‘image/jpeg‘, 0.75);// 压缩后质量
        const bytes = window.atob(base64.split(‘,‘)[1]);
        const ab = new ArrayBuffer(bytes.length);
        const ia = new Uint8Array(ab);
        for (let i = 0; i < bytes.length; i++) {
            ia[i] = bytes.charCodeAt(i);
        }
        blob = new Blob([ab], {type: ‘image/jpeg‘});
?
        console.log(‘压缩后的图片大小‘, blob.size);
        // 预览压缩后的图片
        img_output.src = base64
    }

  

3. 保存到本地

 function save() {
        if (blob) {
            let a = document.createElement(‘a‘);
            let event = new MouseEvent(‘click‘);
            a.download = Math.round(new Date() / 1000) + ‘.jpg‘;
            a.href = URL.createObjectURL(blob);
            a.dispatchEvent(event)
        }
    }

  

在线DEMOhttps://oktools.net/image-compress

原文地址:https://www.cnblogs.com/vivec/p/11274465.html

时间: 2024-10-27 06:32:14

JavaScript实现图片压缩,JS图片压缩的相关文章

.net 运用YUI相关的dll压缩js (按照自己的规则,想想都觉得强大和有趣)

写在前面 不管是做前端的还是做后台的,不管是懂javaScript的还是不太懂JavaScript的人,我想都或多或想的知道些许js压缩对于页面性能提升的效应吧. 之前老喜欢用在线压缩工具去压缩js,其实想想之前的这个做法就有些不寒而栗,假设一下,如果一个项目中的js有50个的话,你要去用在线压缩工具压缩js50次吗?仅仅发布一次就压缩50次,那是不是每个发布项目的时候都要去做这个工作,这是多么重复而双乏味的事情. 再假设,不同页面上引用了相同的n个js,如果我们只是按照单独的js去压缩的话,那

js 图片压缩 转成base64

HTML: <!doctype html> <html> <head> <meta charset="UTF-8"> <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, user-scalable=no" /> <title>测试</title> <link rel=&qu

[实现]Javascript代码的另一种压缩与加密方法——代码图片转换

代码=图片 图片=代码 JS代码对于喜欢F12的同志来说,连个遮羞布都没有... 虽然把代码变成图片也仅仅只是增加一层纱布而已...但这方法还是挺好玩的,而且代码也被压缩了一点. 第一次看到[图片=代码]的想法,是在一个演示视屏拼图的博客里看到的. 最近有点闲,想起了这个,就试了试. 对于中文等字符,需要先转为十六禁止后,再转为图片的RGB像素 document.write(escape("字") ); //%u5B57 document.write(unescape("%u

利用Node 搭配uglify-js压缩js文件,批量下载图片到本地

Node的便民技巧-- 压缩代码 下载图片 压缩代码 相信很多前端的同学都会在上线前压缩JS代码,现在的Gulp Webpack Grunt......都能轻松实现.但问题来了,这些都不会,难道就要面对几十个JS文件一遍遍来回“复制-压缩-创建-粘贴”,这样太不人性化了. 于是可以借助Node + uglify-js 轻松实现.(前提你会点node操作) 1.首先看一下目录: |--uglifyJS |--js |--test1.js |--test2.js |--uglify.js   //这

HTML5 file API加canvas实现图片前端JS压缩并上传 (转载)

一.图片上传前端压缩的现实意义 对于大尺寸图片的上传,在前端进行压缩除了省流量外,最大的意义是极大的提高了用户体验. 这种体验包括两方面: 由于上传图片尺寸比较小,因此上传速度会比较快,交互会更加流畅,同时大大降低了网络异常导致上传失败风险. 最最重要的体验改进点:省略了图片的再加工成本.很多网站的图片上传功能都会对图片的大小进行限制,尤其是头像上传,限制5M或者2M以内是非常常见的.然后现在的数码设备拍摄功能都非常出众,一张原始图片超过2M几乎是标配,此时如果用户想把手机或相机中的某个得意图片

iis 发布asp.net mvc 网站时候js css 压缩问题,图片不加载问题

一.JS CSS 自动压缩问题 默认情况下mvc这个框架会把css,js文件压缩成一个js或者css文件,一会发现只有一个<link href="/Content/css?v=ji3nO1pdg6VLv3CVUWntxgZNf1zRciWDbm4YfW-y0RI1" rel="stylesheet"/>  和一个<script src="/bundles/modernizr?v=qVODBytEBVVePTNtSFXgRX0NCEjh9U

最新javascript自动按比例显示图片,按比例压缩图片显示

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Typ

spring mvc 图片上传,图片压缩、跨域解决、 按天生成目录 ,删除,限制为图片代码等相关配置

spring mvc 图片上传,跨域解决 按天生成目录 ,删除,限制为图片代码,等相关配置 fs.root=data/ #fs.root=/home/dev/fs/ #fs.root=D:/fs/ #fs.domains=182=http://172.16.100.182:18080,localhost=http://localhost:8080 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE be

图片上传前压缩 lrz库

之前手机微信端的项目因为图片太大导致体验十分不流畅,后来采用把上传的图片统一压缩大小后解了燃眉之急. 但这个方法的遗憾就是得等到图片上传后在服务器端压缩,用户如果上传比较大的图片耗时太大,而且也耗流量. 关键是在用户上传前就把图片压缩了,如今找到了解决方法: 用了lrz这个库,http://www.jq22.com/jquery-info3419,感谢这个地址 平常手机照片2M的图一般能压缩到150kb左右,效果明显 首先引入三个库文件 <script type="text/javascr