nodejs将原始图像数据写入jpeg文件?

Posted

技术标签:

【中文标题】nodejs将原始图像数据写入jpeg文件?【英文标题】:nodejs write raw image data to jpeg file? 【发布时间】:2012-02-28 09:42:16 【问题描述】:

我正在从获取请求中获取数据。数据(在响应正文中)如下所示:

... ÿÀ���"�ÿÄ��������������ÿÄ�N��!1"AQa2q¡#BR±ð3brS²ÁÂÑá$ñCDTst¢³&45dÃÒÿÄ������������ÿÄ�-������!1A"Qa¡ðq±ÁÑ2áÿÚ���?�û." """ """ """ """ """ """ """ """ """ """ """ """ """ """ """ """ """ """ """ """ """ """ """ """R1º#ª¥7Jíî½M6îNö ]·!]=Fv­ß`7~qÆee²%·JokkZüCbìþ<ùã9öùË®´(%A,Ià�2I?t×bn6wÆù¥V 2SÀ><k5ºÙØ92EhÎçü¨/aÝ!ã|ñþ¥ñßTU«¦ÒÚµ«xuÕfƳ KØ ùð$·DúBMZÆcp´R|Mä2ó8üg)·ùôfõ$zXiRÞüóÆ>,êÚûíR5ý:\ .....

响应标头如下所示:

HTTP/1.1 200 OK
Content-Length: 26965
Access-Control-Allow-Origin: *
Content-Type: image/jpeg; charset=UTF-8
Date: Mon, 06 Feb 2012 21:14:21 GMT
Expires: Mon, 06 Feb 2012 22:14:21 GMT
Cache-Control: public, max-age=3600
Last-Modified: Fri, 13 Feb 2009 23:31:30 GMT
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Server: Dropta Server 1.0
X-Frame-Options: SAMEORIGIN
Connection: close

我想获取作为我的图像数据的正文内容并将其保存到服务器上的name.jpeg 文件中。

我该怎么做?我尝试将缓冲区与fs 模块结合使用,但我有点迷路了。

谢谢

【问题讨论】:

【参考方案1】:

这是一个示例,它将http://upload.wikimedia.org/wikipedia/commons/1/15/Jagdschloss_Granitz_4.jpg 下载到name.jpeg

var fs=require('fs');
var http=require('http');

var f=fs.createWriteStream('name.jpeg');

var options=
    host:'upload.wikimedia.org',
    port:80,
    path:'/wikipedia/commons/1/15/Jagdschloss_Granitz_4.jpg'


http.get(options,function(res)
    res.on('data', function (chunk) 
        f.write(chunk);
    );
    res.on('end',function()
        f.end();
    );
);

【讨论】:

没关系。有用。谢谢。 那么我可以同时打开多个流吗?我想同时将多个图像写入磁盘,但是当我尝试将其放入循环时,它有点疯狂并崩溃了。因此,如果我当时制作图像,它会起作用。我可以同时运行多个流吗? 这不能回答问题。如果您已经有响应正文/文本,如何直接保存响应数据而不创建额外的请求? @stewe res.on('end' 有时会在 f.write 完成之前触发,因此会在图像完全写入之前提前结束 writeStream【参考方案2】:

略短的版本,使用Stream.pipe:

var http = require('http'),
    fs = require('fs'),
    imgSource = 'http://upload.wikimedia.org/wikipedia/commons/1/15/Jagdschloss_Granitz_4.jpg';

http.get(imgSource, function(res) 
  res.pipe(fs.createWriteStream('wiki.jpg'));
);

【讨论】:

对我来说,这是一个比接受的更好的答案

以上是关于nodejs将原始图像数据写入jpeg文件?的主要内容,如果未能解决你的问题,请参考以下文章

我可以将 cv::Mat 作为 JPEG 数据写入命名管道吗?

GDAL:Python GDAL.Translate可以将TIFF文件转换为JPEG或PNG数组 - 而不是写入文件吗?

请推荐一个用于将 IPTC 数据写入图像的 Node 模块?

对 JPG 图像进行操作时出现“无法将模式 P 写入 JPEG”

无法将模式 RGBA 写入 JPEG

PIL 无法将模式 F 写入 jpeg