![](https://products-qa.fileformat.com/zh/image/c/imagemagick/header-image.png)
ImageMagick
用于创建和转换图像的开源 C 库
使用免费的 C API 创建、编辑、撰写、读取和转换位图图像。它允许在 C 应用程序中调整大小、翻转、镜像、旋转、扭曲、剪切和变换图像。
ImageMagick 是一个开源库,它使软件开发人员能够在自己的 C 应用程序中包含图像处理功能。该库是跨平台的,可以在 Linux、Windows、Mac Os X、iOS、Android OS 和许多其他操作系统上顺利运行。它包括对使用 C 代码读取、显示、创建、转换、修改和修改光栅图像的支持。
ImageMagick 的一大特色是它能够在不同的主要文件格式之间准确、专业地转换图像。该库支持 200 多种图像文件格式,例如 JPEG、PNG、GIF、HEIC、Exif、TIFF、CGM、DPX、EXR、WebP、Postscript、PDF、SVG 等等。该库还提供了对绘图以及图形和动画图形的轻松支持。
该库功能非常丰富,包括对一些常见图像处理功能的支持,例如图像大小调整和翻转、图像镜像和旋转、扭曲、变换图像、图像颜色调整、应用各种特殊效果模糊或锐化或阈值、图像渐变,canny 边缘检测绘制文本、线条、多边形、椭圆,使用数学表达式等等。最近,该库还支持使用 OCR 从图像中提取文本。
ImageMagick 入门
使用以下命令克隆最新的源
通过 GitHub 安装 ImageMagick。
git clone https://github.com/ImageMagick/ImageMagick.git
或者使用以下命令进行安装。
通过 RPM 安装 ImageMagick。
$ rpm -Uvh ImageMagick-libs-7.0.10-60.x86_64.rpm
将图像转换为其他格式
开源 C 库 ImageMagick 使软件程序员能够在他们自己的应用程序中将图像转换为其他支持的文件格式。用户需要在转换为另一种格式之前提供格式参数。在应用转换之前,该库会在内部将图像更早地转换为其他格式。该库支持转换为几种流行的图像格式,例如 BMP、CMYK、GIF、JPEG、PBM、PNG、RGB、SVG、TIFF 和 XPM 格式。该库的一个重要方面是在转换图像时易于使用。它还提供了在以所需格式写入图像之前减小图像大小并应用不同效果的能力。
通过ImageMagick转换GIF到JPEG图像
#include
using namespace std;
using namespace Magick;
int main(int argc,char **argv)
{
InitializeMagick(*argv);
// Read GIF file from disk
Image image( "giraffe.gif" );
// Write to BLOB in JPEG format
Blob blob;
image.magick( "JPEG" ) // Set JPEG output format
image.write( &blob );
[ Use BLOB data (in JPEG format) here ]
return 0;
}
使用 C API 的图像渐变支持
开源 C 库 ImageMagick 使软件开发人员能够使用 C 命令创建多种颜色的图像渐变。您可以使用水平、垂直、圆形或椭圆形轻松创建一种或多种颜色的渐变混合。该库通过使用几个定义来增强渐变,例如指定线性渐变的方向、识别径向渐变的中心点坐标、将渐变限制在比图像尺寸更大或更小的区域等上。此外,对于非线性灰度渐变,请在保存输出之前添加 -colorspace RGB -colorspace gray。
通过CAPI创建简单的格雷斯卡尔梯度
void test_wand(LPTSTR lpCmdLine)
{
MagickWand *m_wand = NULL;
PixelWand *p_wand = NULL;
PixelIterator *iterator = NULL;
PixelWand **pixels = NULL;
int x,y,gray;
char hex[128];
MagickWandGenesis();
p_wand = NewPixelWand();
PixelSetColor(p_wand,"white");
m_wand = NewMagickWand();
// Create a 100x100 image with a default of white
MagickNewImage(m_wand,100,100,p_wand);
// Get a new pixel iterator
iterator=NewPixelIterator(m_wand);
for(y=0;y<100;y++) {
// Get the next row of the image as an array of PixelWands
pixels=PixelGetNextIteratorRow(iterator,&x);
// Set the row of wands to a simple gray scale gradient
for(x=0;x<100;x++) {
gray = x*255/100;
sprintf(hex,"#%02x%02x%02x",gray,gray,gray);
PixelSetColor(pixels[x],hex);
}
// Sync writes the pixels back to the m_wand
PixelSyncIterator(iterator);
}
MagickWriteImage(m_wand,"bits_demo.gif");
// Clean up
iterator=DestroyPixelIterator(iterator);
DestroyMagickWand(m_wand);
MagickWandTerminus();
}
通过 C 对图像应用特殊效果
开源 C 库 ImageMagick 提供了将不同类型的效果应用于图像的功能。它提供了几个重要的功能,例如模糊、锐化、阈值、创建阴影、羽化形状或使用几行 C 代码为图像着色。还支持一些特殊的模糊效果,如无线电模糊和运动模糊。
通过CAPI应用熔化废物效应
magick_wand = NewMagickWand();
d_wand = NewDrawingWand();
p_wand = NewPixelWand();
set_tile_pattern(d_wand,"#check","pattern:checkerboard");
PixelSetColor(p_wand,"lightblue");
// Create a new transparent image
MagickNewImage(magick_wand,320,100,p_wand);
// Set up a 72 point font
DrawSetFont (d_wand, "Verdana-Bold-Italic" ) ;
DrawSetFontSize(d_wand,72);
// Now draw the text
DrawAnnotation(d_wand,28,68,"Magick");
// Draw the image on to the magick_wand
MagickDrawImage(magick_wand,d_wand);
// Trim the image
MagickTrimImage(magick_wand,0);
// Add a transparent border
PixelSetColor(p_wand,"lightblue");
MagickBorderImage(magick_wand,p_wand,5,5);
// and write it
MagickWriteImage(magick_wand,"text_pattern.png");
大图像支持
C 库 ImageMagick 为处理非常大的图像提供了支持。它使开发人员能够在自己的图像处理应用程序中打开、读取、处理或写入高达百万、千兆或兆像素大小的图像。该库允许将图像大小调整为 25 万像素正方形。在处理大图像时,您需要确保大内存资源的可用性。如果默认的临时磁盘分区很小,则引导 ImageMagick 使用具有足够可用空间的另一个分区。