- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在使用 GraphicsMagick对于 Node 。我基本上裁剪照片并检索用户上传的照片的 exif 数据。我不想阻塞等待这些任务完成的请求流,因此我需要使用异步函数才能做到这一点。而且我认为我应该能够做到,因为这些是 node.js 使自己异步的 I/O 操作。
但正如我所见,GraphicsMagick 中用于 Node 的所有函数都是同步函数。所以我无法确定如何实现我正在寻找的东西。
我想到的一个想法是编写一个带有回调的函数,并在其中完成 GraphicsMagick 处理。并使用.nextTick() 函数实现异步流程。但我不确定这是否合适。还有 GraphicsMagick 的异步函数。
请帮助我,关于如何从 graphicsmagick 获取异步函数的示例代码将不胜感激。
最佳答案
更新:
@Saransh Mohapatra 的实际答案实际上是错误的。经过少量调查后发现,所有对图像执行操作的方法实际上不执行任何操作,而只是将参数附加到列表中,当您 write
或调用在中执行的任何缓冲区相关方法时将使用这些参数为了获取/写入实际图像缓冲区。
这里是 blur
示例中的详细信息:
blur
:https://github.com/aheckmann/gm/blob/master/lib/args.js#L780 this.out
将调用:https://github.com/aheckmann/gm/blob/master/lib/command.js#L49 a.push(arguments[i]);
然后将它连接到所有列表(到其他参数)。然后当 write
被调用时:
self.args()
:https://github.com/aheckmann/gm/blob/master/lib/command.js#L78 _spawn
中,它被 write
调用:https://github.com/aheckmann/gm/blob/master/lib/command.js#L187 因此,基于此,任何对图像进行操作
但不保存或保留其缓冲区的方法都不需要任何异步,因为它们实际上根本不做任何工作。所以这意味着 - 您确实需要担心它们。
旧:
对于任何繁重的处理工作,最好的方法是使用单独的进程。
您可以创建另一个小的 node.js 进程,它将具有与主进程的一些通信能力(ZeroMQ 是这里的不错选择)。
必须通知这个单独的进程有关文件(路径)以及如何处理它,您可以轻松地从通过 ZeroMQ 做出此类决定的主进程发送该数据。
这种方法将允许您在主(网络?) Node 进程的工作方式上拥有独立性,并且将来有可能扩展到单独的硬件/实例。
这也是很好的做法(类 unix 应用程序逻辑分离)。
关于node.js - Node 的异步 GraphicsMagick,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17744288/
根据GraphicsMagick man page我可以使用 -crop 从一个图像创建多个图块没有偏移: If the x and y offsets are omitted, a set of t
我想转换一组文件,但不覆盖现有文件。如何使用 mogrify 指定最终文件格式?例如firstpic.png -> firstpic-thumbnail.png、secondpic.png -> se
我想将输入的 8 位 PNG 图像转换为 8 位。 我试过使用 GraphicsMagick。但我不知道如何在 GraphicsMagick 中转换 png8。 当我这样使用命令时: gm 转换 so
我正在使用GraphicsMagick for node并尝试在“乌尔都语/阿拉伯语”的图像上绘制文本,该文本“??”,文本正在输出图像上绘制,但它是“从左到右”绘制的,而它必须是“从右到左”作为阿拉
我有一系列具有透明背景的 PNG 图像,我想将它们叠加到也具有透明背景的目标 PNG 图像上。为了论证起见,我们假设这一系列图像是: 源图片:img1.png、img2.png、img3.png 目标
我正在尝试使用 graphicsmagick 调整图像的大小。 我需要它适合特定的宽度和高度。但是,使用以下命令:-resize 400x200 它会调整大小直到图像达到宽度或高度属性之一,而我需要它
GM has build option quantum which defines the bitdepth to use when reading an image. Building GM wit
我正在尝试使用 GM 向现有图像添加文本,或者作为最后的手段创建一个带有文本的新图像,然后我可以将其与原始图像合成。出于某种原因,我似乎无法开始工作...... 我在 Windows 上使用 GM 1
我目前正在构建一个 MEAN 应用程序,我当前正在处理的部分涉及图像上传。我正在尝试使用GraphicsMagick for Node但我并没有真正取得任何成功。以下是我的图像上传 POST 请求(按
我尝试使用 cfs:graphicsmagick 包生成缩略图,但生成的只是一个空图像。 当我启动服务器时,一切看起来都很好: I20150108-10:43:14.698(-8)? => Graph
我在使用 GraphicsMagick 时遇到问题。我正在重新排列图像中的像素并尝试保存它,但生成的图像始终相同。如何让它在保存前更新图像? 这是我的代码: PixelPacket *write_pi
我发现 (C) API 非常复杂,有很多函数听起来像是在做同样的事情。 blobimageregistrystreams>之间的关系让我很困惑。 有没有人找到教程或者可以阐明 GraphicsMagi
我正在这样做 gm(jpgName).setFormat('jpg') .resize(160,158) .compress('JPEG') .write(fs.createWrite
我正在使用 mupx 部署 meteor 构建。 Graphicsmagick 安装在系统上(以及 imagemagick),两者都在 ubuntu 14.04 上使用 apt-get。尝试转换图像时
我需要获取图像的特定裁剪并将其放在另一个图像的某个位置并调整大小。 我可以在一个命令中裁剪第一个图像并将其保存到一个文件中,然后我可以在另一个命令中合成这两个图像。 但是,我想在一个命令中完成它 -
在尝试了我可能想到的所有命令组合之后,我仍然无法让它工作。 我有一个可以改变大小的大图像:Logo.png我有一张“已知”尺寸的小图片:Wallpaper.png 我想让 Logo 出现在墙纸的左下角
我已经在 OSX 10.9 上安装了 GM。执行gm version打印以下内容: GraphicsMagick 1.3.18 2013-03-10 Q8 http://www.GraphicsMag
我设置了以下函数来捕获上传的图像,转换它们并将它们写入服务器。如何重命名转换后的文件? 目前,该函数获取上传的图像并保存图像的一个版本。 目标: 根据图像大小保存上传图像的多个版本。 附加文件名和图像
如何使用 GraphicsMagick 从图像中删除背景颜色?我需要从图像中删除 rgb(255,255,255) 和 rgb(254,254,254) 颜色并将它们替换为透明度。 谢谢。 最佳答案
我正在使用 QT 开发图像处理工具。我是 QT 和 graphicsmagick(magick++) c++ 库的新手。我计划使用 C++ 作为我的开发语言。谁能建议我如何获取 graphicsmag
我是一名优秀的程序员,十分优秀!