Tag: graphicsmagick

在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调整和合并图像?

使用单个图像读取/stream的多个大小调整

我正在写一个脚本,需要一个图像,并创build不同大小的多个变体(如imgur,基本上)。 现在,我使用node.js中的https://github.com/aheckmann/gm为每个变体进行以下操作: function(file, size, newfile, callback) { gm(file) .noProfile() .quality(80) .resize(size, size) .write(newfile, callback) } 我假定每次调整图像大小时,graphicsmagick都会从磁盘读取图像并将其加载到内存中。 它是否正确? 如果是这样,我怎样才能从磁盘只读一次? 我可以从stream中读取文件,然后在单个stream上运行多个大小调整吗? 我对stream的了解不够多,而当我最后一次尝试时,我感到沮丧,放弃了,并删除了那部分代码。

节点gm graphicsmagick中的缩略图不升级

你好,我想缩略图没有upscaling。 我使用这个代码: gm(__dirname + '/images/Lighthouse.jpg') .noProfile() .gravity('Center') .thumb('1920', '1280>', __dirname + '/images/thumb.jpg', 90, function (err){ if (err) { console.log(err); } }); 但它仍然是高档的结果形象。 我尝试另一种方式: gm(__dirname + '/images/Lighthouse.jpg') .noProfile() .gravity('Center') .resize('1920', '1280' + ">") .quality(90) .crop('1920', '1280') .write(__dirname + '/images/resize.jpg', function (err) { if (err) { console.log(err); } }); 它真的阻止升级,但是,我不能通过另一个选项 – “^”在resize,因为没有它,我得到错误的缩略图的结果。 你可以比较它: gm(__dirname + '/images/Lighthouse.jpg') .noProfile() […]

合并两个gm对象,同时在graphicsJagick中为NodeJS调整其中的一个

var image = gm(someImageUrl) .resize(100,100); var drawings = gm(200,200,'red') .fill('blue') .drawRectangle(20,20,40,40); // Would be great to have sth like this. drawings.drawImage(image, position) // or drawings.add(image, position) // or drawings.draw(image, position) 追加不是一个选项,因为我希望它们重叠,并设置图像的精确位置

在Nodejs中用Graphicsmagick调整图像大小会生成emty文件

我试图调整现有的图像,然后将其上传到Azure存储,但没有成功… gm("https://sinkroon.blob.core.windows.net/sinkroonboilerplate/dakterras1.jpg") .resize(50, 50) .stream(function (err, stdout, stderr) { var writeStream = blobSvc.createWriteStreamToBlockBlob( containerName, 'test.jpg', { contentType: 'image/jpg' }, function (error, result, response) { if (error) { console.error(error); } else { } }); stdout.pipe(writeStream); }); 这会生成一个空的图像: https : //sinkroon.blob.core.windows.net/sinkroonboilerplate/test.jpg 不知道我在做什么错…任何人?

graphicsmagick裁剪取决于原始图像大小(resuse readstream)

我使用Meteor的collection-fs包来上传图片,并且我想用gm(readStrem).crop()从每个图片的中心剪下一个缩略图。 问题是, crop的x和y偏移量取决于原始图像的大小,图像大小会有所不同,我不能使用相同的reasdStream两次。 这打破了: var xOff = 0; var yOff = 0; var thumbnailWidth = 450; var thumbnailHeight = 600; gm(readStream).size(function (err, dimensions) { if ( dimensions ) { xOff = (dimensions.width – thumbnailWidth) / 2; yOff = (dimensions.height – thumbnailHeight) / 2; } gm(readStream) .crop(thumbnailWidth, thumbnailHeight, xOff, yOff) .stream() .pipe(writeStream); }) readStream的第二次使用返回Error: gm().stream() or […]

Node中非常随机的行为,使用gm,buffers和promise

我最近把我的图像保存模块切换到gm (grahicsmagick),并开始使用缓冲区,而不是保存到磁盘。 我期望的输出是一个具有md5散列的数组,然后是原始图像和缩略图的path。 我用诺言,像这样。 saveOrig( imageUrl ) .then( saveThumb ) .then( function( image ) { var returnArray = [ image.hash, image.orig, image.thumb ] console.log( returnArray ) resolve( returnArray ) }) .catch( function( error ) { reject( new Error( error.message ) ) }) 这是第一个function,下一个几乎是相同的 function saveOrig ( imageUrl ) { return Q.Promise( function ( resolve, reject, […]

使用GraphicsMagick方法取决于具有CollectionFS的维度

我正在寻找一种工作方式来使用CollectionFS transformWrite函数中的GM方法,具体取决于图像大小。 在通用汽车公司实施了一个规模的方法,但这是asynchronous的,所以它似乎是不可能的使用。 我尝试了以下内容: gm(readStream, fileObj.name()).size(function(err, dimensions){ if (err) { console.log('err with getting size:'); console.log(err); } console.log('Result of media_size:'); console.log(dimensions); // here do smth depends on the dimensions … gm(readStream, fileObj.name()).resize('1200', '630').stream().pipe(writeStream); }); 当我在CollectionFS函数中使用上面的代码片段时,我得到这个错误: 错误:gm()。stream()或gm()。write()带有不可读的stream。 这似乎是一个问题,我使用asynchronousfunction – 当删除asynchronousfunction的上传完美的作品,但我没有访问上传图像的尺寸。 是否有一种解决scheme,以fileObj访问fileObj , readStream & writeStream时获取图像的维度同步? 编辑: 感谢Jasper与wrapAsync的提示。 我testing了它,并使用这个代码: var imgsize; var img = gm(readStream, fileObj.name()); imgsize = […]

使用graphicsmagic为节点转换EPS到PNG不保持透明度

我一直在尝试使用graphicsmagic for node( http://aheckmann.github.io/gm/ )将透明EPS文件转换为透明的PNG文件。 它需要像以下命令一样运行(保持EPS的透明度) convert -colorspace srgb in.eps out.png 上面的命令按预期工作,但是当我在节点中用下面的代码尝试它时,它不保留透明度。 var gm = require('gm').subClass({ imageMagick: true }); gm("in.eps").colorspace("srgb").write("out.png", function (err) { if (!err) { console.log('done'); } }); 我也尝试强制typesTrueColorAlpha和设置位深度,但无济于事。 希望有人范build议我做错了什么,或我缺less的信息。

操作Node.js中的图像

我想将图像的方向从纵向改为横向,反之亦然。 我尝试使用许多可用的npm包: * 旋转图像 * 图像旋转 * jpegorientation * gm * rad 但是,这些都是一种或其他方式不工作,因为我想这样做,或者每个都有一些或其他的限制。 我试图find一个可能的解决scheme,并尽可能多地寻找它。 大部分时间,它已经完成使用gm 。 我尝试使用gm进行image processing: 码: var gm = require('gm'); gm('path/filename.jpg') .autoOrient() .write('path/destinationfile.jpg', function (err) { if (err) { console.log(err); } else console.log("Orientation changed successfully!"); }) 但是我得到一个错误: 错误:无法执行GraphicsMagick / ImageMagick:gm“identify”“-ping”“-verbose”“path / filename.jpg”这很可能意味着无法findgm / convert二进制文件。 这个错误只能通过使用外部二进制库解决。我不想涉及任何种类的第三方库的依赖。 如果没有预先安装任何外部二进制库(brew等)或如何更好地使用现有的任何包,那么是否有人可以帮助我解决问题。