ImageMagick简单介绍
其实这个源自我遇到的一个需求:
机台生产了一个.wdp格式的图片,windows是可以打开的,但是我们开发的是web程序,浏览器不能识别,所以我们需要将它转换成浏览器可以识别的模式,比如png,jpg等
windows下在微软官网找到的相关的转换函数,但是在linux下能读取.wdp图片的资料很少
尝试了很多方式,发现有个ImageMagick库,专门处理图片的,这给了我很大的帮助,这里简单介绍一下这个库。
ImageMagick

ImageMagick 是一款免费开源的跨平台图像处理软件,支持 Windows、macOS、Linux 等操作系统,它能够读取、转换和写入超过 200 种图像格式,包括常见的 PNG、JPEG、GIF、TIFF、PDF、WebP 以及专业格式如HEIC、DPX、EXR 等。在功能方面,ImageMagick 提供了全面的图像操作能力,涵盖格式转换、尺寸调整、旋转、裁剪、颜色替换、应用特效(如模糊、油画效果)以及绘制矢量图形(如文本、线条、多边形)。
源码地址:https://github.com/ImageMagick/ImageMagick
支持的图片格式列表:https://imagemagick.org/script/formats.php

下载安装地址:https://imagemagick.org/script/download.php#linux
也可以采用包管理工具安装,如果是Ubuntu下,可以直接采用apt安装:
sudo apt update
sudo apt install imagemagick
需要提一下的是,如果是windows下的图片处理,可能需要而外一些库的支持,比如笔者这里要把wdp图片转换成png,需要jxrlib包,但是这个包在网上资料很少,找了很久才找到一个别人编译的版本,地址找不到了,这里分享出来:https://pan.baidu.com/s/19gA0V2-zC2PInDNtcOupRA (提取码:28jq)
下面介绍下使用(windows下需要将下面的convert命令换成magick)
# 格式转换
convert image1.jpg image2.png
# 图片旋转,-rotate 90:将图像顺时针旋转 90 度
convert image1.jpg -rotate 90 image2.jpg
# 调整大小,-resize也可以是百分比,表示放大缩小倍数
convert image1.jpg -resize 500x500 image2.jpg
# 裁剪图片,-crop 200x200+50+100,从(50,100)开始裁剪长度为200x200的图片
convert image1.jpg -crop 200x200+50+100 image2.jpg
# 图片增强
# 调整亮度和对比度,-brightness-contrast 10x20:增加亮度10和对比度20
convert image1.jpg -brightness-contrast 10x20 image2.jpg
# 锐化图片,-sharpen 0x1:第一个参数0是半径,第二个参数1是强度
convert image1.jpg -sharpen 0x1 image2.jpg
# 调整饱和度,-modulate 100,150,100:100是亮度,150是饱和度,100是色调
convert image1.jpg -modulate 100,150,100 image2.jpg
# 增加对比度
convert image1.jpg -level 10%,90% image2.jpg
# 调整曝光,-auto-level:自动调整曝光和对比度
convert image1.jpg -auto-level image2.jpg
# 调整曝光,-modulate 110,120,130:增加亮度110%,饱和度120%,色调130%
convert image1.jpg -modulate 110,120,130 image2.jpg
Magick.NET
Magick.NET 是一个开源的 .NET 库,其主要目的是让 .NET 开发者能够方便地在应用程序中集成强大的图像处理功能,而无需在每个目标服务器或用户机器上单独安装 ImageMagick 软件。它提供了与 ImageMagick 原生功能相匹配的 API,支持超过 100 种图像格式的读取、写入和转换。(可惜的是目前版本还不能将wdp图片转换成png格式)
Magick.NET源码:https://github.com/dlemstra/Magick.NET
Magick.NET各版本:
Q8:使用8位每像素组件,内存占用最小,适合大多数常规图像处理需求,如网页图片、普通照片转换。
Q16:使用16位每像素组件,精度比Q8高一倍,适合专业图像处理(如微单/单反RAW文件编辑、高动态范围图像),但内存占用更大。
Q16-HDRI:使用32位浮点数表示颜色,支持高动态范围图像(HDR),精度最高,适用于极端专业的场景(如科学图像分析、电影级调色),但资源消耗最大
Magick.Net的简单使用
// 初始化Magick.NET
MagickNET.Initialize();
//图片格式转换
using MagickImage magickImage = new MagickImage(image1);
await magickImage.WriteAsync(image2);
//图片旋转
magickImage.Rotate(90);
await magickImage.WriteAsync(image3);
//调整图片大小
var size = new MagickGeometry(500, 500) { IgnoreAspectRatio = true };
magickImage.Resize(size);
await magickImage.WriteAsync(image4);
//裁剪图片
var size = new MagickGeometry(50, 100, 200, 200);
magickImage.Crop(size, Gravity.Undefined);
await magickImage.WriteAsync(image5);
总结
非常出色的图片处理库,上面只是一些简单的用法,还有很多用法,比如批处理等,感兴趣的可以去官网看看。
这个库很好用,以后我们如果有图片处理方面的需求,这个库为我们指明了方向。
但是有点需要吐槽一下,这个库虽然好,但是还有些东西需要完善,比如我这边的需求,居然要依赖于第三方的库实现!
貌似这个库还有其他的Api对接方式,后面有需求了再仔细研究下。

浙公网安备 33010602011771号