当前位置:首页 > JavaScript

js 实现图片另存为

2026-03-01 07:54:27JavaScript

使用 HTML5 的 <a> 标签下载

通过创建 <a> 标签并设置 download 属性,可以直接触发图片下载。适用于已知图片 URL 且同源的情况:

js 实现图片另存为

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

通过 Canvas 转换后下载

当需要处理跨域图片或动态修改图片时,可先将图片绘制到 Canvas 上再转换下载:

js 实现图片另存为

function saveCanvasImage(imgElement, filename) {
  const canvas = document.createElement('canvas');
  canvas.width = imgElement.naturalWidth;
  canvas.height = imgElement.naturalHeight;
  const ctx = canvas.getContext('2d');
  ctx.drawImage(imgElement, 0, 0);

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

处理 Blob 数据下载

适用于从 API 获取二进制数据或需要处理图片格式转换的场景:

function saveBlobAsImage(blob, filename) {
  const url = URL.createObjectURL(blob);
  const link = document.createElement('a');
  link.href = url;
  link.download = filename || 'file.jpg';
  document.body.appendChild(link);
  link.click();
  setTimeout(() => {
    document.body.removeChild(link);
    URL.revokeObjectURL(url);
  }, 100);
}

注意事项

  • 跨域图片需确保服务器允许 CORS
  • iOS Safari 对 download 属性支持有限
  • 大文件下载建议显示进度提示
  • 动态创建的链接需要及时清理内存

完整示例代码

结合 Fetch API 的完整实现方案:

async function downloadImage(imageUrl, fileName) {
  try {
    const response = await fetch(imageUrl);
    const blob = await response.blob();
    const blobUrl = URL.createObjectURL(blob);

    const anchor = document.createElement('a');
    anchor.href = blobUrl;
    anchor.download = fileName || 'downloaded-image';
    anchor.style.display = 'none';

    document.body.appendChild(anchor);
    anchor.click();

    setTimeout(() => {
      document.body.removeChild(anchor);
      URL.revokeObjectURL(blobUrl);
    }, 100);
  } catch (error) {
    console.error('Download failed:', error);
  }
}

标签: 另存为图片
分享给朋友:

相关文章

react如何引用图片

react如何引用图片

在React中引用图片的方法 使用import直接引入图片 在React组件中,可以通过import语句将图片作为模块引入。这种方式适合在组件内部使用图片,Webpack会处理图片的路径和打包。 i…

vue实现图片滚动

vue实现图片滚动

实现图片滚动的 Vue 组件 使用 Vue 实现图片滚动效果可以通过自定义组件或第三方库完成。以下是两种常见方法: 方法一:使用 CSS 动画和 Vue 动态绑定 通过 Vue 的 v-for 和…

js实现图片滚动

js实现图片滚动

图片滚动的实现方法 使用CSS动画实现 通过CSS的animation和@keyframes可以实现简单的图片滚动效果。这种方法适合静态图片的无缝循环滚动。 <style> .scr…

js实现图片拖动

js实现图片拖动

实现图片拖动的步骤 使用JavaScript实现图片拖动功能,可以通过HTML5的拖放API结合事件监听实现。以下是具体方法: 设置HTML结构 为图片添加draggable属性,并设置唯一ID以便…

jquery图片轮播

jquery图片轮播

jQuery图片轮播实现方法 基础HTML结构 创建一个简单的HTML结构,包含轮播容器、图片列表和导航按钮。 <div class="slider"> <div class=…

vue实现选择图片

vue实现选择图片

Vue 实现选择图片的方法 使用 input[type="file"] 元素 在 Vue 模板中添加一个文件输入元素,通过 @change 事件监听文件选择: <template>…