[英]gm: resize image if it is wider than 1000px
我試圖通過collectionFS
gm
進行一些圖像操作,因為我需要讀取流並將其寫回到同一文件,所以我必須使用一個臨時文件-如下所示。
我想檢查圖像是否寬於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);
我認為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
函數中...
您可以讓GraphicsMagick進行測試。 嘗試
gmread.resize('1000x50000>');
代替
gmread.size(function(err, size){
if(size.width > 1000) {
gmread.resize('1000').stream();
}
請參閱GraphicsMagick的“幾何”頁面。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.