gm:如果图像宽度超过 1000px,则调整图像大小
gm: resize image if it is wider than 1000px
我正在尝试通过 gm
在 collectionFS
中进行一些图像处理,因为我需要读取一个流并将其写回同一个文件,我必须使用一个临时文件- 如下所示。
我想检查图像是否大于 1000 像素。在这种情况下,应将其大小调整为 1000px。
不幸的是,这不起作用,因为我收到错误 TypeError: Object [object Object] has no method 'pipe'
和 Error: gm().stream() or gm().write() with a non-readable stream.
var fs = Npm.require('fs'),
file = Images.findOne({ _id: fileId }),
read = file.createReadStream('public'),
filename = '/tmp/gm_' + Date.now(),
temp = fs.createWriteStream(filename);
if (method == 'resize') {
// resize to 1000px, if image is bigger
gmread = gm(read);
gmread.size(function(err, size){
if(size.width > 1000) {
gmread.resize('1000').stream();
}
});
}
gmread.on('end', Meteor.bindEnvironment(function (error, result) {
if (error) console.warn(error);
var tmpread = fs.createReadStream(filename);
write = file.createWriteStream('public');
tmpread.on('end', Meteor.bindEnvironment(function (error, result) {
if (error) console.warn(error);
}));
tmpread.pipe(write);
}));
gmread.pipe(temp);
你可以让GraphicsMagick来做测试。尝试
gmread.resize('1000x50000>');
而不是
gmread.size(function(err, size){
if(size.width > 1000) {
gmread.resize('1000').stream();
}
查看 GraphicsMagick "geometry" 页面。
我认为 collectionFS 的正确方法是这样的:
var gmread = gm(readStream, fileObj.name());
gmread.size({bufferStream: true}, FS.Utility.safeCallback(function (error, size) {
if (error) console.warn(error);
else {
if(size.width > 1000) gmread.resize('1000').stream().pipe(writeStream);
}
}));
我想你想把它放到你商店的 transformWrite
功能中...
我正在尝试通过 gm
在 collectionFS
中进行一些图像处理,因为我需要读取一个流并将其写回同一个文件,我必须使用一个临时文件- 如下所示。
我想检查图像是否大于 1000 像素。在这种情况下,应将其大小调整为 1000px。
不幸的是,这不起作用,因为我收到错误 TypeError: Object [object Object] has no method 'pipe'
和 Error: gm().stream() or gm().write() with a non-readable stream.
var fs = Npm.require('fs'),
file = Images.findOne({ _id: fileId }),
read = file.createReadStream('public'),
filename = '/tmp/gm_' + Date.now(),
temp = fs.createWriteStream(filename);
if (method == 'resize') {
// resize to 1000px, if image is bigger
gmread = gm(read);
gmread.size(function(err, size){
if(size.width > 1000) {
gmread.resize('1000').stream();
}
});
}
gmread.on('end', Meteor.bindEnvironment(function (error, result) {
if (error) console.warn(error);
var tmpread = fs.createReadStream(filename);
write = file.createWriteStream('public');
tmpread.on('end', Meteor.bindEnvironment(function (error, result) {
if (error) console.warn(error);
}));
tmpread.pipe(write);
}));
gmread.pipe(temp);
你可以让GraphicsMagick来做测试。尝试
gmread.resize('1000x50000>');
而不是
gmread.size(function(err, size){
if(size.width > 1000) {
gmread.resize('1000').stream();
}
查看 GraphicsMagick "geometry" 页面。
我认为 collectionFS 的正确方法是这样的:
var gmread = gm(readStream, fileObj.name());
gmread.size({bufferStream: true}, FS.Utility.safeCallback(function (error, size) {
if (error) console.warn(error);
else {
if(size.width > 1000) gmread.resize('1000').stream().pipe(writeStream);
}
}));
我想你想把它放到你商店的 transformWrite
功能中...