node与canvas保存(下载)图片

最近在做一个截图的功能,要保存成图片.

其实这个功能挺简单的,用toDataURL()转换,或者直接用使用canvas2image.js, base64.js这两个脚本实现功能,

部分重要代码如下:

                    //简单的使用JavaScript代码实现下载
    var imageDate = document.getElementById("canvas").toDataURL("image/png");
    window.location.href = "image/octet-stream" + imageDate;
    
                    //使用强大的脚本,搜索下,不难找到这2个脚本
    var oCanvas = document.getElementById("canvas");
    Canvas2Image.saveAsPNG(oCanvas);  // 这将会提示用户保存PNG图片
    Canvas2Image.saveAsJPEG(oCanvas); // 这将会提示用户保存JPG图片
    Canvas2Image.saveAsBMP(oCanvas);  // 这将会提示用户保存BMP图片
  
  
    // 返回一个包含PNG图片的<img>元素
    var oImgPNG = Canvas2Image.saveAsPNG(oCanvas, true);   
    // 返回一个包含JPG图片的<img>元素
    var oImgJPEG = Canvas2Image.saveAsJPEG(oCanvas, true); 
    // 返回一个包含BMP图片的<img>元素
    var oImgBMP = Canvas2Image.saveAsBMP(oCanvas, true); 
    // 这些函数都可以接受高度和宽度的参数
    // 可以用来调整图片大小
    // 把画布保存成100x100的png格式
    Canvas2Image.saveAsPNG(oCanvas, false, 100, 100);

其实如果只是PNG,用原生代码就够了,当然如果你要很多功能的,那2个脚本也够你用了.

不过人生的道路不会这么顺利(每次编程都是这样,太顺利了,就一定有问题),IE报错了,我的项目其实就是基于IE的,每次运行都会爆"脚本错误——错误:传递给系统调用的数据区域太小!".这个错误的原因是在Data URL协议中,图片被转换成base64编码的字符串形式的时候过长,IE就报错了.(个人找不到解决的方法,求大神告知)

无奈之下,只能通过后台node来保存图片,然后返回地址,从而到达下载的效果(node的文件API还是挺好用挺容易的).

直接上代码:

    //前端客户端代码
var imageURL = document.getElementById("canvas").toDataURL();

    $.post("/saveImage", {image: imageURL}, function (data) {
        if (data == "ok") {
            alert("成功")
        }
    })
    
    
    //node后台代码
    app.post(‘/saveImage‘, function (req, res) {
        var imgData = req.body.image,
            base64Data = imgData.replace(/^data:image\/\w+;base64,/, ""),
            dataBuffer = new Buffer(base64Data, ‘base64‘);
        fs.writeFile("out.png", dataBuffer, function(err) {
            if(err){
                res.send(err);
            }else{
                res.send("ok");
            }
        });
    });

这里唯一一个要注意的地方就是new Buffer接收的base64编码应该去掉"data:",比如我用canvas.toDataURL()得到的是"data:image/png;base64,aaaaaaaaaaaaaaaaaaaaa",

那么new Buffer接收的就应该是"aaaaaaaaaaaaaaaaaaaaa",

            base64Data = imgData.replace(/^data:image\/\w+;base64,/, ""),

正是这个用途.其他的也没啥好说的.

最后吐槽下:我是前端工程师呀~~,最近咋变成个全栈工程师了,还好是node,是我喜欢的node.好吧,以后我就变成JavaScript工程师好了.

node与canvas保存(下载)图片

时间: 2024-12-25 05:18:36

node与canvas保存(下载)图片的相关文章

利用Node 搭配uglify-js压缩js文件,批量下载图片到本地

Node的便民技巧-- 压缩代码 下载图片 压缩代码 相信很多前端的同学都会在上线前压缩JS代码,现在的Gulp Webpack Grunt......都能轻松实现.但问题来了,这些都不会,难道就要面对几十个JS文件一遍遍来回“复制-压缩-创建-粘贴”,这样太不人性化了. 于是可以借助Node + uglify-js 轻松实现.(前提你会点node操作) 1.首先看一下目录: |--uglifyJS |--js |--test1.js |--test2.js |--uglify.js   //这

将HTML5 Canvas的内容保存为图片借助toDataURL实现

将HTML5 Canvas的内容保存为图片主要思想是借助Canvas自己的API - toDataURL()来实现,具体实现如下,感兴趣的朋友可以参考下哈,希望对你有所帮助 主要思想是借助Canvas自己的API - toDataURL()来实现,整个实现 HTML + JavaScript的代码很简单.  <html>  <meta http-equiv="X-UA-Compatible" content="chrome=1">  <

从网络下载图片,保存,并用UIImageView从保存中显示

代码: - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. UIImageView *img=[[UIImageView alloc]initWithFrame:CGRectMake(50, 100, 200, 200)]; img.backgroundColor=[UIColor redColor]; [self.view addSubview:img]; /

canvas下载图片

canvas下载图片 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatibl

svg保存为图片下载到本地

今天给大家说一个将svg下载到本地图片的方法,这里我不得不吐槽一下,为啥博客园不可以直接上传本地文件给大家用来直接下载分享呢,好,吐槽到此为止! 这里需要用到一个js文件,名字自己起,内容如下: (function() { const out$ = typeof exports != 'undefined' && exports || typeof define != 'undefined' && {} || this || window; if (typeof defin

JAVA 通过url下载图片保存到本地

//java 通过url下载图片保存到本地 public static void download(String urlString, int i) throws Exception { // 构造URL URL url = new URL(urlString); // 打开连接 URLConnection con = url.openConnection(); // 输入流 InputStream is = con.getInputStream(); // 1K的数据缓冲 byte[] bs

网页保存为图片及高清截图的优化 | canvas跨域图片配置

本次技术调研来源于H5项目中的一个重要功能需求:实现微信长按网页保存为截图. 这里有个栗子(请用微信打开,长按图片即可保存):3分钟探索你的知识边界 将整个网页保存为图片是一个十分有趣的功能,常见于H5活动页的结尾页分享.以下则是项目中调研和踩坑的一些小结和汇总. 一.实现HTML网页保存为图片 1.1 已知可行方案 现有已知能够实现网页保存为图片的方案包括: 方案1:将DOM改写为canvas,然后利用canvas的toDataURL方法实现将DOM输出为包含图片展示的data URI 方案2

Android下载图片/调用系统相机拍照、显示并保存到本地

package com.example.testhttpget; import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.InputStream; import java.io.InputStreamReader; import org.apache.http.HttpEntity; import org.apache.

如何将未提供保存的图片网站的图片下载下来

今天看了看爱旅途网站,发现里面的图片确实都不错,都挺漂亮的,但是可惜的是当我想要下载图片的时候,发现点击右键没用,估计是网站禁用了右键操作,毕竟里面的图片都是许多摄影家的私有作品,但是确实很想要里面的图片怎么办呢? 接下来就来扒一扒如何下载到里面的图片,或许别人有更好的方法,但是我觉得我的方法也不错. 首先,在浏览器中按F12,打开开发者工具,我们可以看到许多代码,但网页代码中查找真是很累的,于是打开网络选项,再按资源的类型进行过滤,一般都能找到图片的url地址. 一开始我直接复制url地址准备