JavaScript实现图片压缩与上传_javascript图像处理

答案:通过Canvas API压缩图片可减少文件体积。先读取图片为Base64,绘制到缩放后的canvas,再导出为低质量Blob,最后用FormData上传,兼顾清晰度与性能,适用于现代浏览器环境。

javascript实现图片压缩与上传_javascript图像处理

前端开发中,图片上传是常见需求,但大尺寸图片会增加服务器压力和加载时间。通过JavaScript实现图片压缩再上传,能有效减少文件体积,提升用户体验。以下是完整的实现思路与代码示例。

图片压缩原理

利用HTML5的Canvas API将原始图片绘制到画布上,通过调整尺寸或质量进行压缩,再导出为Blob或Data URL。这种方式不依赖后端,可在用户选择图片后立即处理。

关键步骤包括:

监听文件输入变化,获取用户选择的图片文件使用FileReader读取图片为Base64创建Image对象加载Base64数据绘制到canvas并调用toBlob或toDataURL输出压缩结果

控制压缩质量与尺寸

可以通过设置canvas缩放比例和canvas.toBlob()的质量参数(0-1)来平衡清晰度与文件大小。

立即学习“Java免费学习笔记(深入)”;

示例代码:

图酷AI 图酷AI

下载即用!可以免费使用的AI图像处理工具,致力于为用户提供最先进的AI图像处理技术,让图像编辑变得简单高效。

图酷AI 57 查看详情 图酷AI function compressImage(file, maxWidth = 800, quality = 0.8) { return new Promise((resolve, reject) => { const reader = new FileReader(); reader.readAsDataURL(file); reader.onload = () => { const img = new Image(); img.src = reader.result; img.onload = () => { const canvas = document.createElement(‘canvas’); const ctx = canvas.getContext(‘2d’);

    let width = img.width;      let height = img.height;      if (width > maxWidth) {        height = (height * maxWidth) / width;        width = maxWidth;      }      canvas.width = width;      canvas.height = height;      ctx.drawImage(img, 0, 0, width, height);      canvas.toBlob(        (blob) => {          resolve(blob);        },        'image/jpeg',        quality      );    };  };  reader.onerror = reject;  

});
}

上传压缩后的图片

压缩完成后,将Blob对象封装进FormData,使用fetch或XMLHttpRequest发送到服务器。

上传示例:

async function uploadImage(file, url) { const compressedBlob = await compressImage(file); const formData = new FormData(); formData.append(‘image’, compressedBlob, ‘compressed.jpg’);

const response = await fetch(url, {
method: ‘POST’,
body: formData
});

return response.json();
}

绑定文件输入事件:

document.getElementById(‘fileInput’).addEventListener(‘change’, async (e) => { const file = e.target.files[0]; if (!file.type.startsWith(‘image/’)) return;

try {
const result = await uploadImage(file, ‘/api/upload’);
console.log(‘上传成功:’, result);
} catch (err) {
console.error(‘上传失败:’, err);
}
});

基本上就这些。核心是利用canvas完成前端图像降质缩放,既减轻网络负担,又避免原图直接上传带来的性能问题。注意兼容性:现代浏览器均支持,iOS Safari对大图可能存在内存限制,建议增加错误捕获和分片处理逻辑。

以上就是JavaScript实现图片压缩与上传_javascript图像处理的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/308188.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月5日 04:03:57
下一篇 2025年11月5日 04:04:33

相关推荐

  • Golang Web静态资源缓存与版本管理示例

    合理配置静态资源缓存和版本化可提升Web性能。1. 使用Cache-Control头部设置长期缓存,通过中间件为CSS、JS文件添加max-age=31536000;2. 采用内容哈希命名文件如app-a1b2c3d4.js,确保内容变更时URL变化;3. 启动时扫描静态目录生成assetMap,将…

    好文分享 2025年12月16日
    000
  • Go语言中Map的参数传递:指针与惯用法解析

    本文探讨Go语言中Map作为函数参数的传递机制。尽管将Map的指针作为参数传递在语法上是允许的,但Go语言的惯例是直接传递Map本身,因为Map在Go中是引用类型,其内部数据的修改会直接反映到原始Map上。文章将详细解释这两种方式的区别,并强调Go语言的推荐做法。 Go语言中Map的本质 在go语言…

    2025年12月16日
    000
  • Go项目结构化实践指南

    Go项目结构没有一劳永逸的最佳方案,它高度依赖于具体用例。本文将探讨Go项目布局的演变,从官方GOPATH工作区模型到现代应用分离二进制与库的实践,强调cmd目录的使用、多二进制管理,以及包粒度的权衡。目标是提供一套灵活且实用的指导原则,帮助开发者构建清晰、可维护、易于部署的Go项目。 Go项目结构…

    2025年12月16日
    000
  • GAE Go 文件上传:Blobstore API 实践指南

    本教程旨在指导开发者如何在 Google App Engine (GAE) Go 环境中实现文件上传功能。核心方法是利用 GAE 提供的 Blobstore API,它专为处理大文件存储而设计。文章将概括 Blobstore 的工作流程,并强调通过官方示例进行学习和实践的重要性,以确保高效、可靠地处…

    2025年12月16日
    000
  • Go语言中HTML转PDF教程:使用go-wkhtmltopdf实现文档生成

    本教程详细介绍了如何在Go语言中利用go-wkhtmltopdf库将HTML内容高效地转换为PDF文档。文章涵盖了库的安装、基本用法示例代码,并重点强调了处理非信任HTML时的安全注意事项,以及针对特定场景(如动态JS或专业报告)的其他工具建议,旨在提供一个全面且安全的HTML转PDF解决方案。 H…

    2025年12月16日 好文分享
    000
  • Go语言中利用rand.Perm实现切片元素高效随机排序

    本教程详细介绍了如何在Go语言中高效地随机化切片元素的顺序,特别适用于Google App Engine等服务器端应用中对数据存储查询结果进行乱序展示的需求。文章重点讲解了math/rand包中的rand.Perm函数的使用方法,并提供了同步随机化并行切片(如数据键和值)的示例代码,确保每次访问都能…

    2025年12月16日
    000
  • Golang移动端开发环境配置与构建示例

    Go语言通过Gomobile工具支持移动端开发,可将Go代码编译为Android和iOS可用的库或应用。首先需安装Go 1.19+及Gomobile工具,并运行gomobile init初始化环境,安装Android SDK/NDK或配置Xcode。接着编写Go模块(如计算器逻辑),使用gomobi…

    2025年12月16日
    000
  • Go HTML 模板中安全渲染未转义 HTML 内容的指南

    本文详细阐述了在 Go 语言的 html/template 包中处理原始 HTML 内容时遇到的自动转义问题及其解决方案。通过将包含原始 HTML 的数据字段类型定义为 template.HTML,我们可以指示模板引擎将其作为安全内容直接渲染,而非进行转义。文章提供了完整的代码示例和安全注意事项,帮…

    2025年12月16日
    000
  • Go语言中设置进程名称的实践与探讨

    Go语言中设置进程名称并非直接修改os.Args[0]即可。本文深入探讨了两种主要方法:通过unsafe包修改argv[0]的内存区域,以及利用syscall包调用Linux特有的PR_SET_NAME系统调用。这两种方法各有其严格的限制,如名称长度限制和平台兼容性问题,且均涉及Go语言的底层操作,…

    2025年12月16日
    000
  • Go语言中将HTML转换为PDF的实践指南:基于wkhtmltopdf

    本文详细介绍了如何在Go语言中利用go-wkhtmltopdf库将HTML内容高效转换为PDF文件。教程涵盖了环境搭建、基本代码实现、以及处理HTML字符串和文件输入的方法。此外,还特别强调了使用此工具时必须注意的安全风险、最佳实践和性能优化建议,旨在帮助开发者安全、有效地完成HTML到PDF的转换…

    2025年12月16日 好文分享
    000
  • Go语言中实现部署时可配置的“常量”:基于init函数与封装的最佳实践

    在go语言的开发实践中,我们经常会遇到这样的需求:某些配置参数在程序运行期间应保持固定不变,但其具体数值需要在部署时根据环境进行调整。例如,数据库连接字符串、api密钥或服务端口等。go语言的const关键字看似能满足“常量”的需求,但其本质是编译时常量,这意味着const的值必须在编译时确定,无法…

    2025年12月16日
    000
  • 高效ETag生成策略:优化HTTP缓存的关键考量

    本文深入探讨了HTTP ETag的生成策略,旨在帮助开发者选择最经济高效的方法来优化Web缓存。文章分析了基于模板名与动态数据、内容修订标识符及完整响应体哈希等多种生成方式的优缺点,强调了ETag计算效率在条件请求处理中的核心作用,并提供了具体的实践建议和Go语言示例,以实现智能且低开销的缓存管理。…

    2025年12月16日
    000
  • Go 项目布局:从官方指南到实践策略

    Go项目布局没有一成不变的“最佳实践”,而是应根据具体用例灵活调整。本文将深入探讨Go语言官方推荐的工作区结构,以及业界广泛采纳的实用策略,如将可执行文件与核心库分离、推崇库驱动开发,并提供关于包组织和文件管理的建议。目标是帮助开发者构建结构清晰、易于维护且兼容go get的Go项目。 Go 项目布…

    2025年12月16日
    000
  • Go语言中设置进程名称的实践与考量

    本文探讨了在Go语言中设置进程名称的两种主要方法:通过修改os.Args[0]的底层内存以及通过调用PR_SET_NAME系统调用。Go语言本身不直接支持此功能,因此需要借助unsafe和syscall包。文章详细介绍了这两种方法的实现细节、代码示例、平台兼容性及潜在的局限性与风险,强调了使用这些非…

    2025年12月16日
    000
  • 客户端请求限流与队列调度优化

    限流与队列调度是保障高并发系统稳定的关键。通过计数器、滑动窗口、漏桶、令牌桶等算法控制请求速率,结合优先级队列、超时丢弃、异步消费等机制提升资源利用率。实际应用中需根据业务特性选择策略,如API网关常用令牌桶支持突发流量,支付场景采用滑动窗口确保精度。秒杀系统可借助Kafka等消息队列实现削峰填谷。…

    2025年12月16日
    000
  • Go语言中net/http与net/http/fcgi的区别与应用场景

    本文深入探讨了Go语言标准库中net/http和net/http/fcgi包的核心差异。net/http用于直接监听HTTP连接,构建独立的Web服务;而net/http/fcgi则通过FastCGI协议与前端Web服务器(如Nginx、Apache)协作,实现多服务共享端口、灵活部署。文章将详细阐…

    2025年12月16日
    000
  • Go中实现可配置的运行时常量:私有变量与公共访问器模式

    在Go语言中,const关键字要求编译时确定值,不适用于需要部署时配置但运行时保持不变的“常量”。本文将介绍一种推荐模式,通过在init函数中初始化包级私有变量,并提供公共的访问器(getter)函数,实现既能灵活配置又能在运行时保证值不可变的伪常量,从而有效管理应用程序配置。 Go语言中的常量与配…

    2025年12月16日
    000
  • Go语言:使用wkhtmltopdf高效生成PDF文档

    本教程详细介绍了如何在Go语言中利用go-wkhtmltopdf库将HTML内容转换为PDF文档。文章涵盖了库的安装、基本使用示例代码,并强调了在使用此工具时必须注意的安全风险和潜在的替代方案,旨在帮助开发者安全高效地实现HTML到PDF的转换。 在go语言中,将html内容转换为pdf文档是一个常…

    2025年12月16日 好文分享
    000
  • Go语言中HTML转PDF的实践指南:基于go-wkhtmltopdf库

    本教程详细介绍了如何在Go语言中利用go-wkhtmltopdf库将HTML内容高效转换为PDF文档。内容涵盖库的安装、基本使用方法、通过示例代码演示HTML字符串到PDF文件的完整转换流程,并着重强调了处理HTML输入时的安全注意事项及相关替代方案,旨在提供一个全面且专业的指南。 在Go语言开发中…

    2025年12月16日 好文分享
    000
  • Go html/template:安全渲染原始HTML内容

    在Go语言的html/template包中,为了防止跨站脚本(XSS)攻击,所有通过管道(pipeline)插入到HTML模板中的字符串内容默认都会被转义。然而,在某些场景下,我们需要将预先确定为安全的原始HTML内容直接渲染到页面而无需转义。本文将详细介绍如何利用template.HTML类型,在…

    2025年12月16日
    000

发表回复

登录后才能评论
关注微信