javascript技巧

关注公众号 jb51net

关闭
首页 > 网络编程 > JavaScript > javascript技巧 > JavaScript压缩图片

通过JavaScript实现图片压缩

作者:前端随想

在学习的时候,有时候看到一些一些网站的图片是经过压缩处理的,因为压缩之后的图片会节省一部分你的内存空间,这样的话也可以提升性能,于是就比较好奇这是如何实现的,今天我们就简单的实现一下,需要的朋友可以参考下

压缩图片的原理👨‍🚀👨‍🚀

其实我们实现压缩的本质原理是通过使用canvas中的toDataURL来进行图片的压缩操作,但是中间需要经过一系列的加工处理,下面我将详细的讲解细节的操作:

 const init=()=>{
  const selectPicture = document.querySelector("#selectImg");
  const originalPreview = document.querySelector("#imgPreview");
  const compressPreview = document.querySelector("#compressImg");
  // 绑定点击事件
  function BindEvent() {
    selectPicture.addEventListener("change", (e) => {
      const imgFiles = e.target.files[0];
      console.log(e.target.files[0]);
      fn(imgFiles);
    });
  }  
   BindEvent();
    .....剩余内容在下面
 }
 init()

FileReader对象 🍊🍊

首先我们先了解一下FileReader这个对象

简单的来讲就是FileReader这个对象允许应用程序异步的读取计算机的文件内容,其中这个对象提供了一些方法,我们等会会用到它提供的一些方法。

 // 读取图片原始的base64
  const fn = (imgFiles) => {
    const render = new FileReader();
    render.readAsDataURL(imgFiles);
    render.onload = () => {
      // console.log(render.result);
      // 将图片压缩处理
      originalPreview.setAttribute("src", render.result);
      imageCompression(render.result, 40, "image/jpg");
    };
    // 将图片转化为base64形式
  };

在这个函数中我们通过调用readAsDataURL这个方法,这个方法可以用来读取指定的文件,在读取完成之后在render上面的 result属性将包含一个data:URL格式的字符串 (base64编码) 以表示所读取文件的内容。

我们在使用 readAsDataURL 方法的一般流程如下:

我们在这个函数中将原始图片通过setAttribute方法给src属性设置值render.result(base64)

在这里我们接下来就需要调用压缩图片的函数

首先这个函数接收三个值分别是:

图片压缩函数⛹️‍♀️⛹️‍♀️

 // 压缩函数
  const imageCompression = (imageURL, quality, imageType) => {
    let canvas = document.createElement("canvas");
    let img = document.createElement("img");
    img.src = imageURL;
    img.onload = () => {
      // 在实际的工作中,根据业务来计算相应的宽度,这里只是进行一个演示的小demo
      canvas.width = 300;
      canvas.height = 300;
      // 获取上下文
      let ctx = canvas.getContext("2d");
      ctx.drawImage(img, 0, 0, 300, 300);
      // 将图片压缩
      let compressImage = canvas.toDataURL(imageType, quality / 100);
      console.log(compressImage);
      compressPreview.setAttribute("src", compressImage);
    };
  };

压缩前后的图片进行对比:🚴‍♀🚴‍♀

大小的改变:

片大小上缩小了3倍。这节省了空间,在一些显示图片很多的网站就可以使用这种压缩,在页面展示的时候可以显示这种压缩之后的图片,当点击进去之后可以显示原本没有压缩的图片,这样就节省了很多的性能。

但是压缩之后的图片确实没有之前美观,所以这是有舍有得,我们可以在具体的情景中灵活的使用。

总结🔑🔑

这次通过对图片压缩的学习,是自己有了解学习了之前所不知道的知识,比如图片的存储形式以及FileReader之类的,使自己收获很多。

以上就是通过JavaScript实现图片压缩的详细内容,更多关于JavaScript压缩图片的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:
阅读全文