Tag: imagemagick

用imagemagick与NodeJs平铺图像

有了这个脚本,我可以将我的(4096×2048)图像拼接成32个图块(512×512)。 我想给每个导出的图像配一个“X,Y,Z”坐标。 现在我想总是保持Z为0。 例: 输出1-0-0.jpg 输出1-1-0.jpg var http = require("http"); var im = require("imagemagick"); var server = http.createServer(function(req, res) { im.convert(['img.jpg','-crop','512×512','output.jpg'], function(err) { if(err) { throw err; } res.end("Image crop complete"); }); }).listen(8080); 除此之外,对于这个愚蠢的问题,不要将图像名称放入脚本中,我可以调用GET请求来裁剪并获取所有图像作为服务。 提前致谢

将PDF转换为PNG Node.JS

我正在构build一个Node.js应用程序将PDF转换为PNG并显示在用户页面上。 该应用程序将像这样工作: 用户将PDF上传到服务器 服务器将PDF页面转换为单个的PNG 在用户页面上显示PNG 我发现了一个名为Node ImageMagick的优秀包,但它不是一个完美的配合。 像ImageMagick中的-monitor标志不起作用,但是也不适用于vanilla node.js: var exec = require('child_process').exec; exec('convert -monitor myFile.pdf myFile.png', function(error, stdout, stderr) { console.log('converting is done'); }); 我想实现的事情是转换函数返回文件的名称转换如:myFile-0.png,myFile-1.png。 我想要实现的解决scheme是创build一个名称为PDF的目录,并将PNG转换为: exec('convert myFile.pdf myFile/myFile.png', function(error, stdout, stderr) { console.log('converting is done'); }); 然后阅读该目录的内容,并向用户发送文件和path的名称。 这是一个很好的解决scheme? 有人能解释我如何实现这个目标吗?

在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水印和resize

晚上好。 我正在与imagemagick节点gm库进行image processing。 我的意图是处理一个图像,调整到2048的高度/宽度(保持高宽比),并在右下angular用256×256的图像进行水印处理。 我本质上是build立一个社交媒体整合的在线画廊,上传全尺寸的图片,每个相关的社交networking上都有一个“最佳尺寸”的图片。 我有一些麻烦,这是我目前的代码大小到Facebook; gm(origLoc) .resize(2048, null) .command('composite') .gravity('SouthEast') .out('-geometry', '+20+10') .in(waterMarkFile_Location) .write(thisFile.destination + "rsz/FB/"+newFileName, function(err, stdout, stderr, command){ if (err){ console.log("Err in FB"); console.log(err); } }); 它输出一个2048像素宽的图像,保持比例,但问题是水印被缩放,覆盖整个图像。 如果我删除或注释resize行,它会像您所期望的水印,但它不会将整个图像调整到2048像素,保持原始图像的尺寸。 我一直在为它奋斗了一段时间,尝试了很多的解决scheme,而且我似乎正在得到这个可怕的折衷。 谁能帮忙?

当我开始新的进程时,NodeJS fork进程正在减慢所有其他分叉的进程

我有一个NodeJS程序,它使用ImageMagick从我的数据库中的一些文本创build一个图像。 该程序是从我的NodeJs服务器使用 import childProcess from 'child_process'; let args = [':imageId', '–max_old_space_size=4096']; childProcess.fork('createImage.js', args); 创build图像的过程非常缓慢,在本地机器上可能需要5-6分钟才能处理尺寸为114x84cm的单张图像。 我将尝试解释程序生命周期中发生的事情。 所以,我有服务器上运行的进程MyServer ,当有人请求一个图像MyServer派生一个新的进程。 新的进程ImageCreator1有一个来自promise的循环,并将等到所有的解决。 每个承诺使用ImageMagick创build一个大的图像的一部分 在我的活动监视器中,我可以看到有一些正在运行的进程 Process Name | %CPU MyServer – 0.3 ImageCreator1 – 30.0 convert – 0.1 convert – 0.1 convert – 0.2 convert – 0.1 另外我可以看到ImageCreator1运行asynchronous4-5 ImageMagick转换进程来创build所有这些需要的小图片。 这一切将需要5分钟。 创造大的形象。 所以当我启动两个ImageCreators的时间增加到9 ImageCreators 。 Process Name | %CPU MyServer – […]

使用单个图像读取/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的了解不够多,而当我最后一次尝试时,我感到沮丧,放弃了,并删除了那部分代码。

在Azure网站上使用Node.js进行image processing

我正在开发一个使用Node.js的Web项目,用户可以通过上传到服务器来设置他们的个人资料图像。 我需要对这些图像执行基本操作(resize和裁剪),然后将它们存储到一个blob中。 我通常使用GraphicsMagic或ImageMagick来实现这种任务,但是我想在Microsoft Azure网站上发布这个项目。 有没有一种已知和安全的方式来使用Node.js操纵图像到Azure网站?

在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使用nodejs不能返回正确的图像

我正在使用GraphicsMagick。 这是图像: https://hbr.org/resources/images/article_assets/hbr/1405/F1405A_A.gif 我用来裁剪: 我的代码在这里: gm(request(url), "myimage.jpeg") .resize(270, 270, '^') .gravity('Center') .quality(50) .crop(270,270) .compress('JPEG') .flatten() .stream(function (err, stdout, stderr) { if (err) console.log(err); else { //upload the file file.uploadFileFromGm(fileDetails, stdout, cb); } }); 代码工作正常。 但是我得到了一个透明的图像,左侧是空的。 我得到了以下图像: 为什么白色背景不能在透明部分工作? 任何想法如何解决这个问题?

在node.js中使用GM来裁剪一个圆圈图像

我已经用express 4创build了一个上传图像function,并且我想在这个过程中为上传的图像创build几种不同的大小和形状。 mkdirp(smallPath, function (err) { if (err) { console.error('resizeImg err='+err+']'); return; } else { gm(basePath+'/original/'+image) .resize(35, 35) .noProfile() .write(smallOutputFilePath, function (err) { if (err) console.log(err); }); } 现在,我希望这张35×35的图像在透明的背景下被圈起来。 喜欢这个: 我发现了这个类似的问题: 在nodejs中使用gm的圆angular 。 但答案使用命令行ImageMagick,我想使用gm的方法和function。 有谁知道如何解决?