簡體   English   中英

在Node.js和ImageMagick中使用遠程圖像

[英]Using remote image in ImageMagick with Node.JS

如何在帶有Node.JS的ImageMagick中使用遠程圖像?

我想實現以下目標:

im.identify('http://www.website.com/image.jpg', function(error, features) {
    console.log(features);
});

圖像大小調整的快速代碼段

http://nodejs.org/api/http.html
https://github.com/rsms/node-imagemagick

var thumb = '';

...

var request = http.get(options, function(response) {

    var data = '';

    response.setEncoding('binary');

    response.on('data', function(chunk) {
        data += chunk;
    });

    response.on('end', function () {

        im.resize({
            srcData: data,
            width: 100,
            height: 75,
            format: 'jpg'
        }, function(err, stdout, stderr) {
            if (err) throw err;
            thumb = stdout;
        });
    }

});

這就是我使用遠程圖像的方式:

var srcUrl = 'http://domain.com/path/to/image.jpg';
var http = srcUrl.charAt(4) == 's' ? require("https") : require("http");
var url = require("url");

http.get(url.parse(srcUrl), function(res) {

    if(res.statusCode !== 200) {
        throw 'statusCode returned: ' + res.statusCode;
    }
    else {
        var data = new Array;
        var dataLen = 0;

        res.on("data", function (chunk) {
            data.push(chunk);
            dataLen += chunk.length;
        });

        res.on("end", function () {
            var buf = new Buffer(dataLen);
            for(var i=0,len=data.length,pos=0; i<len; i++) {
                data[i].copy(buf, pos);
                pos += data[i].length;
            }

            im(buf).imFunctionYouWantToUse();
        });
    }
});

信用轉到https://stuk.github.io/jszip/documentation/howto/read_zip.html

很難說我是否正確理解了您(考慮到您在此處發布的信息量)。

使用imagemagick對遠程圖像執行操作的唯一方法是先將其下載到本地服務器。 可以使用node.js的http.ClientRequest類完成此操作,之后,您應該可以使用Imagemagick照常對圖像進行操作。

這應該工作:

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

request({
        'url': 'http://www.website.com/image.jpg',
        'encoding':'binary'
    }, 
    function (error, response, body) {
        if (!error && response.statusCode == 200) {
            fs.writeFileSync('/mylocalpath/image.jpg', body, 'binary');
            im.identify('/mylocalpath/image.jpg',
                function(error, features) {
                    console.log(features);
                 }
            );
        }else{
            console.error(error, response);
        }
    }
)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM