使用此脚本,我可以将我的(4096x2048)图像平铺为32个图块(512x512)。 我想给一个" X,Y,Z"坐标每个导出的图像。
现在我想将Z保持为0。
示例:
输出1-1-0.jpg
var http = require("http");
var im = require("imagemagick");
var server = http.createServer(function(req, res) {
im.convert(['img.jpg','-crop','512x512','output.jpg'], function(err) {
if(err) { throw err; }
res.end("Image crop complete");
});
}).listen(8080);
除此之外,对于这个对nodejs来说这个愚蠢的问题感到抱歉,而不是将图像名称提供给脚本,我可以调用GET请求来裁剪并将所有图像作为服务获取吗?
提前致谢
答案 0 :(得分:1)
我不认为imagemagick可以处理GET请求。但是你可以做的是将来自GET请求的图像保存到本地文件中,然后调用imagemagick将该图像裁剪成单独的图块。
node.js的一个非常好的http请求库是request。
它有一个pipe()
方法,用于管理对文件流的任何响应:
http.createServer(function (req, resp) {
if (req.url === '/img.jpg') {
if (req.method === 'GET' || req.method === 'HEAD') {
var r= request.get('http://localhost:8008/img.jpg')
.on('error', function(err) {
console.log(err)
}).pipe(fs.createWriteStream('doodle.png')) // pipe to file
}
}
})
通过将响应分配给变量,您可以检查管道操作是否已完成,如果是,您可以调用imagemagick方法进行裁剪操作。
Streams是事件发射器,因此您可以收听某些事件,例如end
事件。
r.on('end', function() {
im.convert(['img.jpg','-crop','512x512','output.jpg'], function(err) {
if(err) { throw err; }
res.end("Image crop complete");
});
});
以下是完整的代码(但未经过测试)。这仅供参考。
http.createServer(function (req, resp) {
if (req.url === '/img.jpg') {
if (req.method === 'GET' || req.method === 'HEAD') {
var r = request.get('http://localhost:8008/img.jpg')
.on('error', function(err) {
console.log(err)
}).pipe(fs.createWriteStream('doodle.png')) // pipe to file
r.on('end', function() {
im.convert(['img.jpg','-crop','512x512','output.jpg'], function(err) {
if(err) { throw err; }
res.end("Image crop complete");
});
});
}
}
})