前端纯js实现图片模糊和压缩功能全过程

 更新时间:2025年12月31日 09:14:25   作者:鹏多多  
在现代 Web 项目开发的过程中,图片处理是一个常见且重要的需求,其中,图片模糊效果的实现往往能为界面增添独特的视觉风格,近期笔者在项目中遇到了这样的需求,本文将详细阐述整个实现过程,需要的朋友可以参考下

1. 前言

在现代 Web 项目开发的过程中,图片处理是一个常见且重要的需求。其中,图片模糊效果的实现往往能为界面增添独特的视觉风格。近期笔者在项目中遇到了这样的需求,经过多方面的技术调研与方案对比,最终采用StackBlur库成功实现了纯前端图片模糊与压缩功能。本文将详细阐述整个实现过程,希望能为同样有此类需求的开发者提供有益的参考与借鉴。

2. 安装依赖和引入插件

对于基于npm管理的项目,执行以下命令即可完成安装:

npm install --save stackblur-canvas

安装完成后,在代码中引入该库,以便后续使用其功能:

3. 使用

为了更直观地展示StackBlur库实现图片模糊与压缩的过程,下面通过一个具体的 React 示例进行说明。在这个示例中,界面包含一个复原按钮和一个模糊按钮,点击模糊按钮将触发图片模糊化与压缩操作,点击复原按钮则能使图片恢复至原始状态。

// #region 数据
const imageUrl = 'https://xxxxx.jpeg'
const [displayImage, setDisplayImage] = useState(imageUrl)
// #endregion

// #region ------------------------------------------------------逻辑
/**
 * @description 获取模糊图片
 * @param {string} originalImage 原图片
 * @param {number} scale 缩放
 */
const handleGetBlurImage = ({ originalImage, scale = 0.5 }: { originalImage: string; scale?: number }): Promise<string> => {
  return new Promise((resolve, reject) => {
    try {
      const image = new Image()
      image.crossOrigin = 'anonymous'
      image.src = originalImage
      image.onload = function () {
        const canvas = document.createElement('canvas')
        const ctx = canvas.getContext('2d')!
        const finalW = image.width * scale
        const finalH = image.height * scale
        canvas.width = finalW
        canvas.height = finalH
        ctx.drawImage(image, 0, 0, finalW, finalH)
        // 使用 StackBlur 让图片变模糊
        const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height)
        StackBlur.imageDataRGB(imageData, 0, 0, canvas.width, canvas.height, 50)
        ctx.putImageData(imageData, 0, 0)
        const finalSrc = canvas.toDataURL('image/jpeg')
        resolve(finalSrc)
      }
      image.onerror = function () {
        throw new Error()
      }
    } catch (_) {
      return reject(originalImage)
    }
  })
}

/**
 * @description 还原图片
 */
const handleResetImage = async () => {
  setDisplayImage(networkImage)
}

/**
 * @description 设置图片模糊
 */
const handleSetImageBlur = async () => {
  const res = await handleGetBlurImage({
    originalImage: networkImage
  })
  setDisplayImage(res)
}
// #endregion

// #region 视图
return (
  <div className={moduleStyle['test-wrapper']}>
    <div className={moduleStyle['operate-wrapper']}>
      <div className={moduleStyle['reset-button']} onClick={handleResetImage}>
        复原
      </div>
      <div className={moduleStyle['blur-button']} onClick={handleSetImageBlur}>
        模糊
      </div>
    </div>
    <div className={moduleStyle['image-wrapper']}>
      <img src={displayImage} alt="image" crossOrigin="anonymous" />
    </div>
  </div>
)
// #endregion

上述tsx代码定义了界面的布局结构,包含操作按钮区域和图片展示区域,通过为按钮绑定相应的点击事件处理函数,实现交互功能。

4. 总结

通过上述实践,我们成功实现了纯前端图片模糊与压缩功能。其核心原理是利用canvas强大的绘图能力,先将图片缩放到指定大小,再借助StackBlur库对图片数据进行模糊处理,最后将处理后的内容重新绘制到canvas上,并转换为base64格式的图片 URL。这种方式无需依赖后端服务,在前端即可快速高效地完成图片处理,为项目开发提供了灵活的解决方案。同时,开发者可以根据实际需求,调整缩放比例、模糊半径等参数,以达到理想的图片处理效果 。

以上就是前端纯js实现图片模糊和压缩功能全过程的详细内容,更多关于纯js实现图片模糊和压缩的资料请关注脚本之家其它相关文章!

相关文章

  • 不用构造函数(Constructor)new关键字也能实现JavaScript的面向对象

    不用构造函数(Constructor)new关键字也能实现JavaScript的面向对象

    JavaScript中的对象模型(object model)并不广为人知,我们再设想:假设JavaScript没有构造函数或者没有new关键字会怎样?事情又会变成什么样的呢?让我们推到以前的重来,感兴趣的朋友可以详细了解下
    2013-01-01
  • JS实现光滑展开合拢的菜单效果代码

    JS实现光滑展开合拢的菜单效果代码

    这篇文章主要介绍了JS实现光滑展开合拢的菜单效果代码,涉及JavaScript响应鼠标事件遍历并改变页面元素属性的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-09-09
  • JS开发接入 deepseek 实现AI智能问诊

    JS开发接入 deepseek 实现AI智能问诊

    本文介绍了如何使用DeepSeek API在UniApp项目中实现智能问诊功能,代码示例展示了如何构建请求并处理响应,本文给大家介绍的非常详细,感兴趣的朋友一起看看吧
    2025-02-02
  • JavaScript Canvas编写炫彩的网页时钟

    JavaScript Canvas编写炫彩的网页时钟

    这篇文章主要为大家详细介绍了JavaScript Canvas编写炫彩的网页时钟,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-10-10
  • 整理Javascript基础入门学习笔记

    整理Javascript基础入门学习笔记

    整理Javascript基础入门学习笔记,之前一系列的文章是跟我学习Javascript,本文就是进一步学习javascript,希望大家继续关注
    2015-11-11
  • 使用JavaScript实现图片放大镜功能

    使用JavaScript实现图片放大镜功能

    图片放大镜(Image Zoom)效果在许多电子商务网站、在线画廊和产品展示页面中得到广泛应用,它允许用户通过鼠标悬停在图片上,查看图片的详细局部放大效果,本文将详细介绍如何使用 JavaScript 实现一个基本的图片放大镜功能,需要的朋友可以参考下
    2024-12-12
  • js中各种类型的变量在if条件中是true还是false

    js中各种类型的变量在if条件中是true还是false

    变量在if条件中到底是true还是false,还是比较让人迷糊,下面来进行测试,测试常见的变量类型在if条件中的表现
    2014-07-07
  • javascript 常见功能汇总

    javascript 常见功能汇总

    本文给大家汇总介绍了集中常见的功能,十分的实用,有需要的小伙伴可以参考下。
    2015-06-06
  • 原生JS面向对象实现打砖块小游戏

    原生JS面向对象实现打砖块小游戏

    这篇文章主要为大家详细介绍了原生JS面向对象实现打砖块小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-09-09
  • 深入理解JS中Number(),parseInt(),parseFloat()三者比较

    深入理解JS中Number(),parseInt(),parseFloat()三者比较

    这篇文章主要介绍了JS中Number(),parseInt(),parseFloat()三者比较,需要的朋友可以参考下
    2018-08-08

最新评论