当前位置:首页 > JavaScript

js 实现图片另存为

2026-03-01 07:54:27JavaScript

使用 HTML5 的 <a> 标签下载

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

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 上再转换下载:

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 的完整实现方案:

js 实现图片另存为

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);
  }
}

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

相关文章

vue实现图片闪烁

vue实现图片闪烁

实现图片闪烁效果的方法 在Vue中实现图片闪烁效果可以通过CSS动画或JavaScript动态控制样式。以下是几种常见方法: CSS动画实现 通过@keyframes定义闪烁动画,并应用到图片元素上…

Vue实现图片 放大

Vue实现图片 放大

Vue实现图片放大功能 使用v-viewer插件 安装v-viewer插件: npm install v-viewer 在main.js中引入并配置: import Viewer from 'v-…

js实现图片滚动

js实现图片滚动

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

vue实现图片裁切

vue实现图片裁切

Vue 实现图片裁切的方法 使用 vue-cropperjs 库 vue-cropperjs 是一个基于 Cropper.js 的 Vue 封装库,专门用于图片裁切功能。 安装依赖: npm in…

vue实现图片组件

vue实现图片组件

Vue 实现图片组件的方法 基础图片组件实现 创建一个基础的图片组件,支持动态传入图片路径和替代文本。在Vue项目中新建一个ImageComponent.vue文件: <template>…

vue实现图片合成

vue实现图片合成

Vue实现图片合成的方法 使用Vue实现图片合成可以通过HTML5的Canvas API或第三方库来完成。以下是几种常见的方法: 使用Canvas API 在Vue组件中创建一个Canvas元素,…