MagickWand C 语言示例

这些页面上的程序展示了如何使用 ImageMagick 的 MagickWand API。每个示例都以 C 函数的形式呈现,包含头文件,以便可以将其复制到文件中,然后包含在您自己的 C 项目中。代码是为 Windows 编写的,并使用 MSVC V7 编译,但稍加调整,它也应该在 Linux 上运行。

有些示例展示了命令行 "程序" 以及如何使用 MagickWand 实现等效的输出。所谓 "等效",是指该程序生成的图像与命令行示例相同,但实现方式不一定与 convert 程序完全一致。在某些情况下,只存在一个要复制的命令行示例,而在其他情况下,可能存在 3 或 4 个命令,它们相互依赖,最终产生结果。在大多数情况下,我创建了一个 C 函数来复制所有命令,但代码的每一部分都将显示其与原始命令的关系。

示例中几乎没有错误检查,但您应该在需要的地方添加自己的错误检查。例如,MagickReadImage 函数返回 true 或 false 值,具体取决于读取是否成功,您应该使用类似以下代码进行检查

 if(MagickReadImage(mw,"logo_gel.png") == MagickFalse) {
        // 处理错误
 }

您应该注意,许多 MagickWand 函数声明为返回布尔结果,但它们始终返回 MagickTrue,因此不值得检查。这在 DrawingWand 命令中尤其如此。例如,即使 DrawSetFont 没有找到您指定的字体,它也会返回 MagickTrue,因为它会将字体设置为您的默认系统字体。

如果您以前没有使用过 MagickWand,您应该从简单的示例开始,例如

      logo_1.c     一个简单的入门。将内置的 logo 图像转换为 JPG 格式。

不难看出,要将自己的输入文件转换为另一种格式,只需将 "logo:" 替换为您的输入文件名,并将 "logo.jpg" 替换为您想要的输出文件名。

MagickReadImage 函数非常灵活。它可以接受一个网站 URL,该 URL 链接到互联网上的某个图像,或者可以使用 "xc:" 文件名约定生成一个纯色画布。例如,"xc:red" 将创建一个红色画布,而 "xc:none" 将创建一个透明画布。如果您使用 "xc:" 格式,通常会在读取函数之前调用 MagickSetSize,否则您将得到一个 1x1 像素的图像。建议阅读 ImageMagick Formats 页面底部附近的 "伪图像" 和 "内置图像" 部分,了解其他可用的伪文件。

如果您正在决定使用 MagickCore 还是 MagickWand,请先查看上一段中展示的简单示例,然后查看为 MagickCore 编写的等效示例。

      MagickCore.c     为 MagickCore 编写的简单入门程序。

我认为您会同意,即使在这个简单的示例中,MagickWand 版本也更容易阅读和编写。

所有这些代码均按 "现状" 提供,不附带任何形式的担保或保证。

每个图像都显示在灰色背景上,以更好地显示透明图像。

以下列出了每个示例中使用的 MagickWand 函数的 索引

使用 Lanczos 滤镜将图像缩小到 50%,并以高质量 JPG 格式保存
      resize.c
      图像

扩展图像周围的画布。
      extent.c
      图像

将图像的白色背景更改为透明的简单泛洪填充。
      floodfill.c
      图像

稍微复杂一点的泛洪填充(类似于 Masking Simple Backgrounds 中的第三个示例)
      cyclops.c
      图像

使用 剪辑蒙版 限制合成区域
      clipmask.c

将 *所有* 白色像素更改为透明 - 我们还可以看到巫师的胡须!。
      trans_paint.c
      图像

绘制形状:圆形、多边形、圆角矩形、旋转和平移的椭圆、线条
      draw_shapes.c
      图像

在一个函数中实现八种文本效果
      text_effects.c
      阴影
      图案
      弧线
      斜面
      纯色
      桶形
      极坐标
      谢泼德

有趣的字体度量!
      fontmetrics.c
      图像

创建圆角矩形蒙版,类似于 ROUNDED BORDERS 示例。
      round_mask.c
      图像

从输入图像创建可平铺的图像。
      make_tile.c
      等离子体
      随机

Better 3-D Logo Generation 示例
      3dlogo.c
      阴影
      背景

"Gel" Effects 示例
      gel.c
      图像

在图像下方添加反射 - 使用 CopyOpacity 将反射淡化为透明。
      reflect.c
      图像

使用 MagickDistortImage 进行仿射变换的四个示例
      affine.c
      图像
      图像
      图像
      图像

使用 PixelIterators 创建灰度渐变
      grayscale.c
      图像

使用 PixelIterators 读取和创建图像,并进行 HSL/HSB 颜色空间转换
      modulate.c
      图像
      图像

将二维图像转换为伪三维图像
      landscape_3d.c
      图像

Anthony 的倾斜移位示例
      tilt_shift.c
      输入图像
      输出图像

更改 logo: 内置图像中的一个像素的颜色
      pixel_mod.c
      logo_pixel.gif

为清除的帧动画添加静态背景
      bunny.c
      背景图像
      动画
      输出图像


 

 

 

如果您有任何意见,请发送至:

或在 ImageMagick 论坛上给我发送私信