ImageMagick的使用和开发的文章:
======================
本文介绍使用ImageMagick开发程序的方法。ImageMagick安装之后就可以支持C/C++程序的开发,提供了3种接口。在这里首先介绍一下ImageMagick的3种接口。
MagickCore:
底层的C语言接口。较复杂,但是可以修改很多参数,只适合高端用户使用。
MagickWand:
推荐的C语言接口。相比于MagickCore接口,简单很多。适合普通用户使用。
Magick++:
提供面向对象的C++接口。
下面回顾一下ImageMagick安装后目录:
其中几个和开发有关的文件:
Lib文件夹:开发需要使用的静态库文件。包含4个库,前3个对应ImageMagick的3个接口:
CORE_RL_magick_.lib;CORE_RL_Magick++_.lib; CORE_RL_wand_.lib; X11.lib;
Include文件夹:开发需要使用的头文件。包含3个文件夹,对应ImageMagick的3个接口:
magick;Magick++; wand;
*.dll:开发和使用过程中需要使用的动态链接库文件。
在开发中我们需要3种文件:头文件(*.h),静态库文件(*.lib),动态库文件(*.dll)。因此我们在VC中新建一个工程,然后将Lib文件夹,Include文件夹,以及dll拷贝到工程目录下,并且配置一下头文件和静态库的路径,就可以了。
下面分别给出ImageMagick的3种接口对应的例子。
MagickCore(底层的C语言接口。较复杂,但是可以修改很多参数,只适合高端用户使用)
功能:读取文件,创建缩略图,并保存成文件。
/* * 雷霄骅 * leixiaohua1020@126.com * http://blog.csdn.net/leixiaohua1020 * 中国传媒大学/数字电视技术 */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #include <magick/MagickCore.h> int main(int argc,char **argv) { ExceptionInfo *exception; Image *image, *images, *resize_image, *thumbnails; ImageInfo *image_info; if (argc != 3) { (void) fprintf(stdout,"Usage: %s image thumbnail\n",argv[0]); exit(0); } /* Initialize the image info structure and read an image. */ MagickCoreGenesis(*argv,MagickTrue); exception=AcquireExceptionInfo(); image_info=CloneImageInfo((ImageInfo *) NULL); (void) strcpy(image_info->filename,argv[1]); images=ReadImage(image_info,exception); if (exception->severity != UndefinedException) CatchException(exception); if (images == (Image *) NULL) exit(1); /* Convert the image to a thumbnail. */ thumbnails=NewImageList(); while ((image=RemoveFirstImageFromList(&images)) != (Image *) NULL) { resize_image=ResizeImage(image,106,80,LanczosFilter,1.0,exception); if (resize_image == (Image *) NULL) MagickError(exception->severity,exception->reason,exception->description); (void) AppendImageToList(&thumbnails,resize_image); DestroyImage(image); } /* Write the image thumbnail. */ (void) strcpy(thumbnails->filename,argv[2]); WriteImage(image_info,thumbnails); /* Destroy the image thumbnail and exit. */ thumbnails=DestroyImageList(thumbnails); image_info=DestroyImageInfo(image_info); exception=DestroyExceptionInfo(exception); MagickCoreTerminus(); return(0); }
MagickWand(推荐的C语言接口。相比于MagickCore接口,简单很多。适合普通用户使用)
功能:读取文件,创建缩略图,并保存成文件。
/* * 雷霄骅 * leixiaohua1020@126.com * http://blog.csdn.net/leixiaohua1020 * 中国传媒大学/数字电视技术 */ #include <stdio.h> #include <stdlib.h> #include <wand/MagickWand.h> int main(int argc,char **argv) { MagickBooleanType status; MagickWand *magick_wand; if (argc != 3) { (void) fprintf(stdout,"Usage: %s image thumbnail\n",argv[0]); exit(0); } /* Read an image. */ MagickWandGenesis(); magick_wand=NewMagickWand(); status=MagickReadImage(magick_wand,argv[1]); /* Turn the images into a thumbnail sequence. */ MagickResetIterator(magick_wand); while (MagickNextImage(magick_wand) != MagickFalse) MagickResizeImage(magick_wand,106,80,LanczosFilter,1.0); /* Write the image then destroy it. */ status=MagickWriteImages(magick_wand,argv[2],MagickTrue); magick_wand=DestroyMagickWand(magick_wand); MagickWandTerminus(); return(0); }
Magick++(提供面向对象的C++接口)
/* * 雷霄骅 * leixiaohua1020@126.com * http://blog.csdn.net/leixiaohua1020 * 中国传媒大学/数字电视技术 */ //创建Image对象, // create a blank image canvas with 640x480 size and 'white' color as background: Image blank_image( Geometry(640, 480), Color(MaxRGB, MaxRGB, MaxRGB, 0)); // or also, by using the automatic C++ type conversions for the arguments: Image blank_image("640x480", "white"); // create an image from URL Image url_image("http://www.serverName.com/image.gif"); Image local_file_image("my_image.gif"); // here the URL points to the local filesystem //获取/设置属性 // Canvas geometry // returns an unsigned int representing the my_image width unsigned int Image::columns(); // returns an unsigned int representing the my_image heigth unsigned int Image::rows(); // sets the my_image format; the format string can be "GIF", etc void Image::magick("png"); // returns a string value representing the image format (e.g. “GIF”, “JPEG”, etc) string Image::magick(); //读取/保存图像文件 // Reading the contents of a disk file into an image object can be performed Image my_image(); // create an *empty* image using the default Image constructor // read a GIF image file from disk; the image format is automatically set to GIF my_image.read("aGIFImageFile.gif"); // Writing an Image object to a disk file. set the "format" attribute of my_image to PNG my_image.magick("png"); // write to disk an image file my_image.write("file_name_explicit_extension.gif");
MagickWand一般情况下属于使用比较普遍的,下面记录两个MagickWand开发的例子。
更多的例子可以参考:http://members.shaw.ca/el.supremo/MagickWand/
功能:将图像的宽高变成源图像的50%
/* * 雷霄骅 * leixiaohua1020@126.com * http://blog.csdn.net/leixiaohua1020 * 中国传媒大学/数字电视技术 */ #include <windows.h> #include <wand/magick_wand.h> void test_wand(void) { MagickWand *m_wand = NULL; int width,height; MagickWandGenesis(); m_wand = NewMagickWand(); // Read the image - all you need to do is change "logo:" to some other // filename to have this resize and, if necessary, convert a different file MagickReadImage(m_wand,"logo:"); // Get the image's width and height width = MagickGetImageWidth(m_wand); height = MagickGetImageHeight(m_wand); // Cut them in half but make sure they don't underflow if((width /= 2) < 1)width = 1; if((height /= 2) < 1)height = 1; // Resize the image using the Lanczos filter // The blur factor is a "double", where > 1 is blurry, < 1 is sharp // I haven't figured out how you would change the blur parameter of MagickResizeImage // on the command line so I have set it to its default of one. MagickResizeImage(m_wand,width,height,LanczosFilter,1); // Set the compression quality to 95 (high quality = low compression) MagickSetImageCompressionQuality(m_wand,95); /* Write the new image */ MagickWriteImage(m_wand,"logo_resize.jpg"); /* Clean up */ if(m_wand)m_wand = DestroyMagickWand(m_wand); MagickWandTerminus(); }
功能:在图像的周围加上边框
/* * 雷霄骅 * leixiaohua1020@126.com * http://blog.csdn.net/leixiaohua1020 * 中国传媒大学/数字电视技术 */ #include <windows.h> #include <wand/magick_wand.h> void test_wand(void) { MagickWand *m_wand = NULL; PixelWand *p_wand; int w,h; MagickWandGenesis(); /* Create a wand */ m_wand = NewMagickWand(); p_wand = NewPixelWand(); // Change this to whatever colour you like - e.g. "none" PixelSetColor(p_wand, "blue"); /* Read the input image */ MagickReadImage(m_wand,"logo:"); w = MagickGetImageWidth(m_wand); h = MagickGetImageHeight(m_wand); MagickSetImageBackgroundColor(m_wand,p_wand); // This centres the original image on the new canvas. // Note that the extent's offset is relative to the // top left corner of the *original* image, so adding an extent // around it means that the offset will be negative MagickExtentImage(m_wand,1024,768,-(1024-w)/2,-(768-h)/2); MagickWriteImage(m_wand,"logo_extent.jpg"); /* Tidy up */ m_wand = DestroyMagickWand(m_wand); p_wand = DestroyPixelWand(p_wand); MagickWandTerminus(); }
补充:详细的教程可以从ImageMagick的官网(http://www.imagemagick.org/)左侧的目录中查看。在Program Interfaces里面有几种接口的详细开发说明。
相关推荐
它的功能丰富且灵活,适用于开发人员、设计师以及对图像处理有需求的用户。 **主要功能** 1. **图像转换**:ImageMagick的核心功能之一就是能够将一种图像格式转换为另一种格式。例如,可以将一批JPEG图片批量转换...
dougr-imagemagik-stream 包裹 NPM 模块 imagemagik-stream 的 Meteor 包 用法: var resize = im ( ) . resize ( '200x200' ) . quality ( 90 ) ;readStream . pipe ( resize ) . pipe ( writeStream ) ;
在本文中,我们将深入探讨如何使用JavaScript实现图片的...这涵盖了从用户交互、前端图像操作到服务器端的图像处理的完整流程,对于开发富媒体应用非常有价值。同时,掌握这些技术也对提升Web开发能力具有重要意义。
具有imagemagik和节点的图像服务器,用于裁剪和调整其大小,并有一个队列。 用$ NODE_ENV = local node bin / www启动 文件夹结构:图片/基本图片/适合/高度/高度/高度/填充/宽度/宽度/宽度/填充/
杰西·弗佩格 在Debian Jessie(版本8)上运行FFmpeg的Docker映像 要使用(在MAC OSX,Ubuntu等上),请执行以下操作: cd build ./build-image ...要了解有关Docker的更多信息,可以参加我为Linux School创建的在线...
用ASP+ImageMagik组件制作的在线照片编辑工具程序利用Js进行图片 放大,缩小,裁切工具,后台采用注明ImageMagik组件处理图片。工具使用范围:方便制作论坛头像,在没有图片处'用ASP+ImageMagik组件制作的在线照片...
如果要在没有Vagrant虚拟机安装依赖项的计算机上进行开发(Ruby 2.1.3,ImageMagik,PostgreSQL)。 运行bundle install在应用程序文件夹中。 这将安装Gemfile中列出的所有Gems。 重新打开控制台窗口以刷新PATH。 ...
用ASP+ImageMagik组件制作的在线照片编辑工具程序 利用Js进行图片 放大,缩小,裁切工具,后台采用注明的ImageMagik组件处理图片。 工具使用范围:方便制作论坛头像,在没有图片处理工具的电脑上使用,简单,方便,...
ASP图片/照片/数码相片在线编辑工具程序用ASP ImageMagik组件制作的在线照片编辑工具程序利用Js进行图片 放大,缩小,裁切工具,后台采用注明的ImageMagik组件处理图片。工具使用范围:方便制作论坛头像,在没有图片...
这一特性使得用户能够自定义并创建符合自己需求的桌面图标,适用于个性化设置或者软件开发过程中对图标资源的管理。 GenIconXP的特点在于其开源性,这意味着源代码对公众开放,用户可以查看、修改甚至分发源代码。...
ImageMagik( 用户使用 sudo apt-get update sudo apt-get install imagemagick --fix-missing 安装) im4java (必须添加 Maven 依赖项, org.im4java im4java 1.4.0 ) 所有参考图像都应该并存储在 /src/test/...
先决条件安卓SDK 苹果Maven(用于管理依赖项) Eclipse(使用 Junit + Cucumber 插件) ImageMagik( 用户使用 sudo apt-get update sudo apt-get install imagemagick --fix-missing 安装) im4java (必须添加 ...
imagemagik扩展 Redis扩展 xdebug扩展 pdo,pdo_mysql,pdo_pgsql 卷曲,pdo_sqlite 作曲家 symfony bin bash完成symfony 作曲家的bash完成 php-cs-fixer bin phpunit 启动脚本: 在生产中禁用xdebug 创建并...
PicasaFreeResize 将您的Picasa网络相册照片调整为自由尺寸的工具 需要:ImageMagik 用法:java -jar PicasaFreeResize.jar / path / to / convert 密码
ImageMagik(用于PDF转换) start-stop-daemon(用于随附的init脚本) 按照书面规定,webapp和脚本应遵循以下路径: 安装到/var/csh-scan 扫描结果存储在/tmp/scans 如果要使用其他路径,则必须更改PHP文件,...
使用ImageMagik压缩来自第16行和第46行的图像并调整其大小 JavaScript已缩小,并移至页面底部 ##### Pizza.html进行了此文件更改,以将滚动时的FPS(每秒帧)速率提高到60FPS。 对文件views / js / main.js进行了更
特克斯最小的LaTeX渲染... 我认为这是imagemagik的一部分,但我不确定。安全问题为了防止安全漏洞,应将以下设置应用于texmf.cnf文件: shell_escape = fparse_first_line = fopenout_any = popenin_any = p更多细节。