当前位置:首页 > JavaScript

js 实现图片保存

2026-01-30 14:07:28JavaScript

使用Canvas实现图片保存

通过Canvas可以将图片绘制并保存为文件。需要先将图片加载到Canvas,再转换为Blob或Data URL。

const canvas = document.createElement('canvas');
const ctx = canvas.getContext('2d');
const img = new Image();

img.onload = function() {
  canvas.width = img.width;
  canvas.height = img.height;
  ctx.drawImage(img, 0, 0);

  canvas.toBlob(function(blob) {
    const url = URL.createObjectURL(blob);
    const a = document.createElement('a');
    a.href = url;
    a.download = 'image.png';
    a.click();
  }, 'image/png');
};

img.src = 'image.jpg';

使用a标签下载图片

对于服务器上的图片文件,可以直接通过a标签的download属性触发下载。

js 实现图片保存

function downloadImage(url, filename) {
  const a = document.createElement('a');
  a.href = url;
  a.download = filename || 'downloaded-image.jpg';
  document.body.appendChild(a);
  a.click();
  document.body.removeChild(a);
}

处理跨域图片

当图片资源存在跨域限制时,需要确保服务器设置正确的CORS头,或通过代理服务器获取图片。

js 实现图片保存

fetch('https://example.com/image.jpg', {
  mode: 'cors',
  headers: {
    'Origin': window.location.origin
  }
})
.then(response => response.blob())
.then(blob => {
  const url = URL.createObjectURL(blob);
  downloadImage(url, 'image.jpg');
});

保存网页截图

使用html2canvas库可以捕获网页区域并保存为图片。

import html2canvas from 'html2canvas';

html2canvas(document.getElementById('target-element')).then(canvas => {
  const imgData = canvas.toDataURL('image/png');
  const link = document.createElement('a');
  link.download = 'screenshot.png';
  link.href = imgData;
  link.click();
});

批量下载多张图片

通过Promise.all实现多张图片的并行下载。

function downloadMultipleImages(urls) {
  urls.forEach((url, index) => {
    const link = document.createElement('a');
    link.href = url;
    link.download = `image-${index}.jpg`;
    document.body.appendChild(link);
    link.click();
    document.body.removeChild(link);
  });
}

注意事项

  • 浏览器安全策略可能限制跨域资源下载
  • 大文件下载需要考虑内存管理和进度提示
  • 移动端浏览器可能有不同的下载行为
  • 某些浏览器可能阻止多文件自动下载

标签: 图片js
分享给朋友:

相关文章

js实现轮播

js实现轮播

实现轮播图的基本思路 轮播图的核心逻辑是通过定时切换展示的图片或内容,通常结合左右滑动按钮和指示器(小圆点)增强交互性。以下是基于原生JavaScript的实现方法。 HTML结构 构建轮播图的HT…

vue实现图片

vue实现图片

Vue 实现图片展示的方法 在 Vue 中实现图片展示可以通过多种方式完成,以下是一些常见的方法: 使用 img 标签直接引入 通过 img 标签的 src 属性直接引入本地或远程图片: <…

js实现拷贝

js实现拷贝

实现文本拷贝 使用 document.execCommand 方法(已废弃但兼容性较好): function copyText(text) { const textarea = document…

js实现图片滚动效果

js实现图片滚动效果

使用CSS动画实现图片滚动 通过CSS的@keyframes和animation属性实现无缝滚动效果。将图片容器设置为横向排列,通过动画平移位置。 <style> .scroll-c…

js实现二叉树

js实现二叉树

二叉树的基本概念 二叉树是一种树形数据结构,每个节点最多有两个子节点,分别称为左子节点和右子节点。二叉树的常见操作包括插入、删除、遍历等。 二叉树的节点定义 在JavaScript中,二叉树的节点可…

js实现授权

js实现授权

授权流程设计 授权流程通常涉及前端与后端的交互,常见方案包括OAuth2.0、JWT等。以JWT为例的典型流程: 用户提交凭证(如用户名密码)到认证服务 服务端验证通过后生成包含用户信息的J…