当前位置:首页 > JavaScript

js实现保存图片

2026-04-04 00:15:12JavaScript

使用Canvas绘制并保存图片

通过Canvas将DOM元素或图像绘制到画布上,再转换为图片保存。适用于需要动态生成或处理图像的场景。

// 创建Canvas并绘制内容
const canvas = document.createElement('canvas');
canvas.width = 400;
canvas.height = 200;
const ctx = canvas.getContext('2d');
ctx.fillStyle = '#FF0000';
ctx.fillRect(0, 0, canvas.width, canvas.height);

// 转换为DataURL并触发下载
const dataURL = canvas.toDataURL('image/png');
const link = document.createElement('a');
link.href = dataURL;
link.download = 'canvas-image.png';
link.click();

直接下载网络图片

通过Fetch API获取图片资源,转换为Blob对象后创建下载链接。适合保存已存在的网络图片。

js实现保存图片

fetch('https://example.com/image.jpg')
  .then(response => response.blob())
  .then(blob => {
    const url = URL.createObjectURL(blob);
    const a = document.createElement('a');
    a.href = url;
    a.download = 'downloaded-image.jpg';
    document.body.appendChild(a);
    a.click();
    document.body.removeChild(a);
    URL.revokeObjectURL(url);
  });

保存页面中的img元素

直接获取页面中已有img元素的src属性进行保存。适用于需要保存用户可见图片的场景。

function saveImageFromElement(imgElement, filename) {
  const link = document.createElement('a');
  link.href = imgElement.src;
  link.download = filename || 'image.png';
  link.click();
}

// 使用示例
const myImg = document.getElementById('my-image');
saveImageFromElement(myImg, 'custom-name.jpg');

使用FileSaver.js库简化操作

通过第三方库FileSaver.js简化保存流程,支持更复杂的保存场景。

js实现保存图片

// 先引入FileSaver.js库
import { saveAs } from 'file-saver';

// 保存Blob对象
const blob = new Blob([data], {type: 'image/jpeg'});
saveAs(blob, 'image.jpg');

// 直接保存DataURL
const dataUrl = 'data:image/png;base64,...';
saveAs(dataUrl, 'image.png');

处理跨域图片资源

当遇到跨域图片时,需要服务器配置CORS或使用代理服务。

// 服务器需设置响应头: Access-Control-Allow-Origin: *
const img = new Image();
img.crossOrigin = 'Anonymous';
img.src = 'https://cross-origin.com/image.jpg';

img.onload = function() {
  const canvas = document.createElement('canvas');
  canvas.width = img.width;
  canvas.height = img.height;
  const ctx = canvas.getContext('2d');
  ctx.drawImage(img, 0, 0);

  const dataURL = canvas.toDataURL('image/jpeg');
  const link = document.createElement('a');
  link.href = dataURL;
  link.download = 'cross-origin-image.jpg';
  link.click();
};

响应式图片保存方案

针对不同来源和需求的完整解决方案示例。

async function saveImage(source, filename) {
  let blob;

  if (source instanceof HTMLCanvasElement) {
    blob = await new Promise(resolve => 
      source.toBlob(resolve, 'image/png')
    );
  } 
  else if (source instanceof Blob) {
    blob = source;
  }
  else if (source.startsWith('data:')) {
    const res = await fetch(source);
    blob = await res.blob();
  }
  else if (source.startsWith('http')) {
    const res = await fetch(source);
    blob = await res.blob();
  }
  else if (source instanceof HTMLImageElement) {
    const canvas = document.createElement('canvas');
    canvas.width = source.naturalWidth;
    canvas.height = source.naturalHeight;
    const ctx = canvas.getContext('2d');
    ctx.drawImage(source, 0, 0);
    blob = await new Promise(resolve => 
      canvas.toBlob(resolve, 'image/png')
    );
  }

  const url = URL.createObjectURL(blob);
  const a = document.createElement('a');
  a.href = url;
  a.download = filename || 'image.png';
  a.click();
  setTimeout(() => URL.revokeObjectURL(url), 100);
}

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

相关文章

js实现vue路由

js实现vue路由

Vue路由基础实现 使用Vue Router实现前端路由需要先安装并配置路由库。Vue Router是Vue.js官方的路由管理器。 安装Vue Router: npm install vue-r…

js实现类

js实现类

JavaScript 实现类的几种方式 JavaScript 是一种基于原型的语言,但在 ES6 之后引入了 class 语法糖,使得实现类更加直观。以下是几种常见的实现方式: 使用构造函数 传统的…

js实现pdf在线预览

js实现pdf在线预览

使用PDF.js实现PDF在线预览 PDF.js是由Mozilla开发的一个开源JavaScript库,可以在网页中直接渲染PDF文件。以下是实现PDF在线预览的步骤: 引入PDF.js库 在HT…

js钟表实现

js钟表实现

实现JavaScript钟表的基本方法 创建一个简单的JavaScript钟表可以通过以下步骤完成,涵盖数字和模拟两种形式。 数字钟表实现 HTML结构只需一个显示时间的容器: <div i…

js怎么实现异步

js怎么实现异步

异步实现方法 JavaScript中实现异步操作主要通过以下几种方式: Promise Promise是ES6引入的异步解决方案,用于处理异步操作的成功或失败状态。 const promise =…

js实现图片

js实现图片

图片加载与显示 在JavaScript中,可以通过Image对象动态加载图片。创建实例后设置src属性触发加载,通过onload回调处理加载完成后的操作: const img = new Ima…