JS实现图片压缩与预览功能_j*ascript技巧


答案:通过J*aScript结合FileReader、Canvas和Blob实现图片上传前的压缩与预览。首先利用FileReader读取图片并生成base64预览,再通过Canvas绘制并缩放图片,调用toDataURL方法按质量压缩,最后将压缩后的base64数据用于预览或转为Blob上传,有效减少文件体积,提升上传效率与用户体验。

js实现图片压缩与预览功能_javascript技巧

在前端开发中,图片上传前的压缩与预览功能非常实用,既能提升用户体验,又能减少服务器压力。使用 J*aScript 可以轻松实现这一功能,无需依赖后端处理。下面介绍如何通过原生 JS 实现图片压缩与本地预览。

选择图片并生成预览

用户选择图片后,可以通过 FileReader 读取文件内容,并将结果设置为 img 标签的 src,实现即时预览。

示例代码:

<input type="file" id="upload" accept="image/*">
@@##@@
<p><script>
document.getElementById('upload').addEventListener('change', function(e) {
const file = e.target.files[0];
if (!file) return;</p><p>const reader = new FileReader();
reader.onload = function(event) {
document.getElementById('preview').src = event.target.result;
};
reader.readAsDataURL(file);
});
</script></p>

使用 Canvas 压缩图片

图片压缩的核心是利用 canvas 的绘图能力,将原始图片绘制到 canvas 上,并通过调整尺寸或质量来实现压缩。

关键步骤:

Jaaz Jaaz

开源的AI设计智能体

Jaaz 216 查看详情 Jaaz
  • 创建一个 Image 对象加载原始图片
  • 使用 canvas 绘制图片(可缩放)
  • 调用 canvas.toDataURL(type, quality) 输出压缩后的 base64 数据

压缩函数示例:

function compressImage(file, maxWidth = 800, quality = 0.8) {
  return new Promise((resolve) => {
    const img = new Image();
    const canvas = document.createElement('canvas');
    const ctx = canvas.getContext('2d');
<pre class='brush:php;toolbar:false;'>const reader = new FileReader();
reader.onload = function(e) {
  img.src = e.target.result;
};

img.onload = function() {
  let { width, height } = img;

  // 按最大宽度等比缩放
  if (width > maxWidth) {
    height = Math.round((height * maxWidth) / width);
    width = maxWidth;
  }

  canvas.width = width;
  canvas.height = height;

  ctx.drawImage(img, 0, 0, width, height);

  // 导出压缩后的图片(JPEG 格式,质量 0.8)
  const compressedData = canvas.toDataURL('image/jpeg', quality);
  resolve(compressedData);
};

reader.readAsDataURL(file);

}); }

完整使用流程

将选择、压缩和预览结合在一起:

document.getElementById('upload').addEventListener('change', async function(e) {
  const file = e.target.files[0];
  if (!file) return;
<p>// 压缩图片
const compressedDataURL = await compressImage(file, 800, 0.7);</p><p>// 显示预览
const preview = document.getElementById('preview');
preview.src = compressedDataURL;</p><p>// 如需上传,可将 base64 转为 Blob 发送
// const blob = dataURLToBlob(compressedDataURL);
});</p>

如需将 base64 转为 Blob 用于上传:

function dataURLToBlob(dataurl) {
  const arr = dataurl.split(',');
  const mime = arr[0].match(/:(.*?);/)[1];
  const bstr = atob(arr[1]);
  let n = bstr.length;
  const u8arr = new Uint8Array(n);
  while (n--) {
    u8arr[n] = bstr.charCodeAt(n);
  }
  return new Blob([u8arr], { type: mime });
}

基本上就这些。通过 FileReader 预览,Canvas 压缩,再配合 Blob 转换,就能高效实现图片上传前的处理,既节省带宽,又提升响应速度。

预览图

以上就是JS实现图片压缩与预览功能_j*ascript技巧的详细内容,更多请关注其它相关文章!


# 计算方法  # 那些购物网站推广比较好  # 淄博网站优化怎么做  # 营销策划seo推广怎么做  # 企业网站建设企业  # 平顶山优化网站排名价格  # 中国农技推广协会网站  # 化妆品行业网站推广宣传  # 抖音的推广营销策略  # 内蒙古自媒体推广网站有哪些  # seo优化seo相关  # 这一  # 特殊字符  # 文件上传  # javascript  # 如何实现  # 中特  # 如需  # 图片上传  # 上传  # canva  # ai  # 前端开发  # 后端  # 前端  # js  # java 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894


相关推荐: 雨课堂官网在线登录 网页版雨课堂登录链接  微博网页版访问入口 微博网页版网页端使用指南  《美篇》取消会员自动续费方法  菜鸟驿站的取件码忘了怎么办 手机快速查询指南  J*aScript实现下拉菜单驱动的动态表格数据展示  在Django单元测试中优雅处理信号:基于环境的条件执行策略  谷歌学术论文搜索引擎 谷歌学术官网入口论坛永久链接  Python中深度嵌套字典与列表的数据提取与条件过滤指南  掌握CSS :has() 选择器:父选择器、嵌套限制与常见陷阱解析  WooCommerce 新客户订单自动添加管理员备注教程  b站怎么查看视频的码率_b站视频码率查看方法  青橙手机语音助手怎么唤醒_青橙手机语音助手设置与唤醒方法  微信步数怎么刷_微信步数快速提升技巧  招商淘客入门指南  鲁班大师乓乓皮肤获取方法  使用 J*aScript 随机化 CSS Grid 布局中的元素顺序  三角洲行动2025年9月10日摩斯密码分享  如何在CSS中使用伪类:valid实现表单验证提示_结合:valid改变边框颜色  VS Code如何设置默认配置  鲨鱼剧场app金币获取方法  macosmonterey系统外接显示器驱动怎么安装_macosmonterey外接显示器驱动与分辨率调整  Dash应用多值文本输入处理与类型转换教程  狙击外星人小游戏在线链接_狙击外星人小游戏网页链接  如何用mysql开发用户注册登录功能_mysql用户注册登录数据库设计  MongoDB聚合管道:高效统计列表中各项的文档数量  解决Flex容器横向滚动内容截断与偏移问题  《oppo商城》维修服务位置  抖音赚钱快速入门_新手必看的抖音赚钱步骤  谷歌浏览器怎么把网页翻译成中文_Chrome网页翻译功能使用方法  qq邮箱格式填写示例 qq邮箱标准填写规范  C#解析并修改XML后保存 如何确保格式与编码的正确性  《华夏千秋》龙女试炼功法获取方法  126邮箱网页在线登录2025_126邮箱网页版入口官方地址  性能与资源监视器快捷打开  苹果自助维修计划支持哪些设备机型  《饿了么》拼好饭点外卖教程2025  C++怎么实现一个红黑树_C++高级数据结构与平衡二叉搜索树  b站怎么设置动态仅粉丝可见_b站动态粉丝可见设置方法  快递查询,一键速查  mysql如何回滚事务_mysql ROLLBACK事务回滚方法  WooCommerce购物车:强制显示所有交叉销售商品教程  PHP utf8_encode 字符编码转换陷阱与解决方案  Windows Audio服务启动失败怎么办_电脑没声音的终极服务修复法【修复】  J*a列表元素格式化输出教程  Golang如何使用log记录日志信息_Golang log日志记录方法总结  pubmed数据库官方主页_pubmed学术论文查找官网直达  如何解决Casbin日志与应用日志不统一的问题,使用casbin/psr3-bridge实现无缝集成  苹果电脑如何快速查看电池状态 苹果电脑电池信息快捷方法  Eclipse开发J*a快速入门  铁路12306怎么申请退票_铁路12306退票申请操作流程 

 2025-10-30

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.