GraphicsMagick代码冻结在节点插件(OSX)中



我正在尝试将这个简单的GraphicsMagick示例作为节点绑定/插件。此代码在带有 GraphicsMagick 1.3.15 的 OSX 10.6.7 中按预期工作

#include <Magick++.h>
#include <iostream>
using namespace std;
int main(int argc,char **argv)
{
  Magick::InitializeMagick(0);
  Magick::Image image;
  try {
    image.read( "snow.jpg" );
    image.scale("320");
    image.write( "snow-scaled.jpg" );
  }
  catch( Magick::Exception &error_ ) {
      cout << "Caught exception: " << error_.what() << endl;
      return 1;
    }
  cout << "Image scaled!" << endl;
  return 0;
}
Compiling:
g++ scale.cpp `GraphicsMagick++-config --cppflags --cxxflags --ldflags --libs`
Running:
./a.out
Image scaled!

但是将此代码设置为节点绑定 (0.6.14) 只会冻结(请参阅完整要点):

void AsyncWork(uv_work_t* req) {
    std::cout << "AsyncWork..." << std::endl;
    Baton* baton = static_cast<Baton*>(req->data);
    baton->result = 12345;  // Just a test
    Magick::Image image;   // <--- Freezes here!
    image.read("snow.jpg");
    std::cout << "Scaling..." << std::endl;
    image.scale("200");
    std::cout << "Done!" << std::endl;
    image.write("snow-scaled.jpg");
    // and baton->error to true.
}

从javascript调用它时的输出:

AsyncWork...

任何想法出了什么问题?附带说明一下,这在 Ubuntu 下编译/运行时实际上有效!

您是否尝试过在AsyncWork中使用Magick::InitializeMagick(0);进行初始化?异步函数在池线程上运行。

您总是可以在这里给出完成的 GM 插件。

最新更新