【问题标题】:Magick++ to display an image with CGIMagick++ 使用 CGI 显示图像
【发布时间】:2015-06-06 15:43:03
【问题描述】:

我最近开始使用 Magick++(ImageMagick 的 C++ API),目的是创建一个可以显示随机生成的图像的网站。我正在尝试编写一个 CGI 脚本来创建一个 JPEG 图像,设置其像素的颜色,然后将图像信息返回为Content-type: image/jpg

通读文档,我只找到了将图像文件写入磁盘的函数。按照std::cout << Imagestd::cout << Blob

我的目标是能够在网页中显示脚本生成的图像,而不需要将图像写入磁盘。

我知道 PerlMagick 有一个显示功能,它可以做我想做的事情 - 我想知道我是否可以用 Magick++ 做同样的事情。

【问题讨论】:

  • 我可能错了,但我认为,尽管可能,C++ 作为 CGI 有点笨拙,现在大多数人会选择 Perl 或 PHP。看看我的回答stackoverflow.com/questions/28062426/…
  • 我一直在使用多精度整数,所以 perl 太慢且效率低下。我使用完全基于 c++ 的 cgi (cgicc) 创建了一个随机文本生成网站,它运行良好。所以我希望我可以继续在这个图像项目中使用它。
  • 好的,抱歉,我误判了您的经验水平。
  • 不用担心 - 在处理图像方面我绝对是个菜鸟。

标签: c++ imagemagick cgi jpeg magick++


【解决方案1】:

我认为您正在寻找 blob - 二进制大对象。基本上,您创建一个Image 类型的图像和一个Blob 类型的blob。您可以通过读取文件或生成随机数据来填充图像,然后将图像写入 blob(对其进行编码),然后可以将其写入用户的浏览器。

请原谅我没用的 C/C++ 技能...

Image  image;
Blob   blob;

// set type to JPEG
image.magick("JPEG");   

// generate/read/fill image here
image.read("image.jpg");

// encode image as JPEG
image.write(&blob);   

// now send MIME type to browser
std::cout << "Content-type: image/jpeg" << CRLF;

// ... followed by blob
write(1,(char*)blob.data(),blob.length());

【讨论】:

  • 谢谢,马克——我仍然想知道发送blob到浏览器的步骤——就像std::cout &lt;&lt; blob一样简单吗?还是需要其他功能?
  • 我从未见过它完成...在 Blob 中定义了 const void *data()size_t length(),所以我猜你会得到它们并将它们传递给 write() 但我不在我的电脑要检查。
  • 看来我的猜测是对的,请参阅spongemonkey 的示例 ... imagemagick.org/discourse-server/viewtopic.php?t=24984
  • 这也是写入文件的代码 - 我试图修改它以使用 ostringstream,但我不确定如何翻译行 outFile.write((char*)blob.data(),blob.length());
  • 尝试在终端中运行它...convert -size 640x416 xc:gray +noise random result.jpg :-)
猜你喜欢
  • 2021-04-11
  • 2022-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-30
  • 2020-07-08
  • 1970-01-01
相关资源
最近更新 更多