当前位置:首页 > JavaScript

js实现保存图片

2026-02-28 23:45:56JavaScript

使用Canvas生成并保存图片

通过Canvas可以将DOM元素或图像数据绘制到画布上,再转换为图片保存。以下是一个完整的实现示例:

// 获取Canvas元素并绘制内容
const canvas = document.createElement('canvas');
const ctx = canvas.getContext('2d');
canvas.width = 400;
canvas.height = 300;
ctx.fillStyle = '#FF5733';
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';
document.body.appendChild(link);
link.click();
document.body.removeChild(link);

保存网页中的现有图片

对于页面中已存在的<img>元素,可以通过以下方式保存:

js实现保存图片

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

// 使用示例
const myImage = document.getElementById('myImage');
saveImage(myImage, 'custom-name.jpg');

使用FileSaver.js库简化操作

FileSaver.js库提供了更简单的API来处理文件保存:

js实现保存图片

// 安装:npm install file-saver
import { saveAs } from 'file-saver';

// 保存Blob或DataURL
const canvas = document.getElementById('myCanvas');
canvas.toBlob(function(blob) {
    saveAs(blob, 'canvas-image.png');
});

// 直接保存远程图片
saveAs('https://example.com/image.jpg', 'remote-image.jpg');

处理跨域图片的保存

当需要保存跨域图片时,需要确保服务器允许CORS:

const img = new Image();
img.crossOrigin = 'Anonymous';
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 link = document.createElement('a');
    link.href = canvas.toDataURL('image/jpeg');
    link.download = 'cross-origin-image.jpg';
    link.click();
};
img.src = 'https://example.com/cross-origin-image.jpg';

保存SVG为图片

将SVG转换为Canvas再保存:

function saveSVG(svgElement, filename) {
    const svgData = new XMLSerializer().serializeToString(svgElement);
    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);
        const link = document.createElement('a');
        link.href = canvas.toDataURL('image/png');
        link.download = filename || 'svg-image.png';
        link.click();
    };

    img.src = 'data:image/svg+xml;base64,' + btoa(unescape(encodeURIComponent(svgData)));
}

// 使用示例
const svg = document.getElementById('mySvg');
saveSVG(svg, 'converted-svg.png');

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

相关文章

js实现轮播

js实现轮播

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

js实现列表

js实现列表

使用 JavaScript 实现列表 JavaScript 提供了多种方式来实现列表功能,包括数组操作、DOM 元素动态生成等。以下是几种常见的实现方法: 使用数组存储列表数据 数组是 JavaSc…

js实现pdf在线预览

js实现pdf在线预览

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

js实现换肤

js实现换肤

使用CSS变量实现换肤 通过CSS变量可以轻松实现主题切换功能。CSS变量在根元素中定义,通过JavaScript动态修改这些变量值。 :root { --primary-color: #349…

js实现图

js实现图

JavaScript 实现图的常用方法 在 JavaScript 中,图(Graph)可以通过多种方式实现,常见的包括邻接表(Adjacency List)和邻接矩阵(Adjacency Matrix…

节流js实现

节流js实现

节流(Throttle)的实现原理 节流是一种限制函数执行频率的技术,确保函数在一定时间间隔内最多执行一次。适用于高频触发事件(如滚动、输入、窗口调整等)的场景。 基础实现方式 使用时间戳判断是否执…