Articles of gm

错误:使用AWS Lambda上的gm降低图片质量时,stream会产生空缓冲区

我已阅读所有其他主题,并尝试了一些答案,但我似乎无法弄清楚为什么我得到这个错误。 我的代码在S3存储桶中获取上传的图片,降低质量并将其放入第二个存储桶中。 干净利落。 随着中小型图像一切正常,但如果我上传的东西超过2 MB(或多或less)我得到的错误标题。 我的Lambda函数有128MB和3分钟的超时时间; 这里是代码: const gm = require('gm').subClass({imageMagick: true}); const AWS = require('aws-sdk'); const async = require('async'); const S3 = new AWS.S3(); exports.handler = (event, context, callback) => { var srcBucket = event.Records[0].s3.bucket.name; var srcKey = event.Records[0].s3.object.key; var dstBucket = "destinationbucket"; var dstKey = "resized-" + srcKey; // Infer the image type. […]

当使用bas64string作为参数调用时,节点gm(imagemagick)似乎不起作用

我没有得到任何输出图像时,图像不是path&是基地64编码图像。 const image = 'base64 encoded string'; gm(image, ['jpeg']) .resize(72, 72) .strip() .write('./aks.png', function (err) { if (!err) console.log('done'); });

gm aws lambda中的错误:string产生空的缓冲区

我尝试使用亚马逊lambda进行自动定位转换后上传一个缓冲区到s3。 我从一个Nodejs api发送缓冲区如下所示: var data = request.payload; if (data.file) { var Media = request.server.plugins.dogwater.media; var name = data.file.hapi.filename; var local_path = "./uploads/" + name; var file = fs.createWriteStream(local_path); console.log('adding media…') file.on('error', function(err) { console.error(err) }); data.file.pipe(file); data.file.on('end', function(err) { var pic = { gallery_id: request.params.gallery_id, type: 1 }; console.log("\n\n\ndata.file = ",data.file) Media.create(pic) .then(function(media) { httpRequest({ […]

在Nodejs中使用gmresize和构图两个或多个图像

给定两个图像,比如img(大小为1024×768)的文件夹(img1.png和img2.png),我需要调整img2的大小(比如300×300),把img1放在x和y(比如100,200)的img1。 最终结果应该是1024×768大小的图像。 使用gm( https://github.com/aheckmann/gm ),试过这个: gm('./img/img1.png') .composite('./img/img2.png') .geometry('300×300+100+200') .write('resultGM.png', (err) => { if (err) console.log(err); }); 预计(由于整个操作链)产生300×300的图像。 然后我试了这个: gm('./img/img1.png') .composite( gm('./img/img2.png') .geometry('300×300+100+200') ) .write('resultGM.png', (err) => { if (err) console.log(err); }); 希望复合函数接受缓冲区,但没有机会,它只接受文件path,并给出错误。 花了2-3个小时,读了几个post(只能在这里find一些讨论: 如何做复合gm node.js?在这里: 结合两个gm对象,同时调整其中的一个在graphicsMagick为NodeJS (这一个不回答这个问题实际上),我找不到任何解决scheme在内存中使用stream或缓冲区执行此操作。写入临时文件时可以执行此操作。是否有任何人可以在内存中find解决scheme调整和合并图像?

调整图像的大小,同时保存节点gm的exif方向

我正在使用gm( http://aheckmann.github.io/gm/ )编写一个nodeJS 5.3.0应用程序, 我知道它使用GraphicsMagicK库。 问题是,我得到的是,我调整后的图像,它失去了它的EXIF格式。 代码示例实际上显示exif格式已丢失。 例如: var fs = require('fs') , gm = require('gm').subClass({imageMagick: true}); // resize and remove EXIF profile data gm('/path/to/my/img.jpg') .resize(240, 240) 在这个例子中,他们说EXIFconfiguration文件数据被删除。 我知道我可以在resize之前使用以下命令获取图像的方向: gm('path/tp/my/img.jpg').orientation(function(err,value){ var orientation = value; }); 问题是..我可以保存EXIF数据时resize? 如果不是。我可以在resize后设置exif方向数据吗? 谢谢

NodeJS / gm:承诺asynchronous调用

我使用gm来操作nodeJS应用程序中的一些图像。 这是我的function如何。 正如你所看到的,有一些操作开关(在这个例子中:旋转)。 gmStream被创build,在切换之后.stream()和pipe()将被使用。 到目前为止,一切都很好。 但是,对于切换resize的情况下,我需要知道图像的尺寸,我通过size() 。 但是这是一个asynchronous调用。 这个gmStream不用于交换机下面显示的stream() 。 但是在这个stream()会做更多的数据库的东西,所以我需要使用相同的东西… function manipulate (method, param) { return new Promise(function (resolve, reject) { // Configure GridFS (gridfs-stream) const gfs = Grid( MongoInternals.defaultRemoteCollectionDriver().mongo.db, MongoInternals.NpmModule ) switch (method) { case 'rotate': gmStream = gm(readStream) .rotate('#ffffff', param.rotate) break // … some more cases … case 'resize': gmStream = gm(readStream) […]

GraphicsMagick / ImageMagickreplace所有不透明的像素(如Photoshop的颜色叠加)

我正在尝试使用GraphicsMagick for Node将所有不透明的像素replace为给定的颜色。 使用合成图像不是一个选项,我只需要将每个不透明像素更改为给定的颜色。 原始图像: 目标: 透明像素应该保持透明。 我正在尝试实现Photoshop的颜色叠加效果:

JS:Promise不会返回值

我需要得到一个asynchronous函数的值。 我试图使用Promise,但是这不起作用: const res = new Promise(function (resolve, reject) { gm(readStream).size({ bufferStream: true }, function (err, size) { if (!err) resolve(size) }) }) console.log(res) 我得到的结果是Promise { <pending> }

使用GraphicsMagick处理GridFS文件并将其作为新文件存储

我试图通过gridfs-stream ( https://github.com/aheckmann/gridfs-stream )读取一个GridFS文件,用gm旋转它90°并将其作为一个新的GridFS文件存储。 我的结果看起来非常不稳定…所以我在寻求帮助来优化这个小小的代码片段。 而这个代码的第二件事:我需要一种“开关”。 这段代码对图像进行旋转操作。 但我需要传递参数来做旋转,resize或其他。 我如何整合这个? import Grid from 'gridfs-stream' import { MongoInternals } from 'meteor/mongo' const id = '12345' const gfs = Grid( MongoInternals.defaultRemoteCollectionDriver().mongo.db, MongoInternals.NpmModule ) const readStream = gfs.createReadStream({ _id: id }) readStream.on('error', function (err) { console.error('Could not read stream', err) throw Meteor.Error(err) }) gm(readStream) .rotate('#ffffff', 90) .stream(function (err, stdout, […]

删除节点中的图像背景

我正在从事捕捉用户的面部并将其放在现有模型上的项目。 为了结合人脸和模型的图像,我使用节点的gm库; 和面部检测我使用的是opencv。 我能够做到既检测脸部,又把它放在模型上。 但问题是我的模型是透明的背景,但用户的脸不(因为脸从相机捕获)。 我想删除脸部的背景,使其透明。 有什么办法可以做到这一点吗? 这是我的集成代码: gm() .in('-page', '+0+0') .in("public/" + modelImagePath) .in('-page', '+130+45') .in(newDir + '/crp.png') .mosaic() .write(resultantImage, function (err) { if (err) console.log(err); }); 这里crp.png是人脸图像,modelimagepath是模型图像完整的opencv + gm代码: cv.readImage(newDir + "/zxcv.png", function(err, im){ im.detectObject(cv.FACE_CASCADE, {}, function(err, faces){ console.log("into detec:" + faces.length + "," + faces[0]); if ( faces.length > 0) { var […]