ImageMagick简单介绍

  其实这个源自我遇到的一个需求:

    机台生产了一个.wdp格式的图片,windows是可以打开的,但是我们开发的是web程序,浏览器不能识别,所以我们需要将它转换成浏览器可以识别的模式,比如png,jpg等
    windows下在微软官网找到的相关的转换函数,但是在linux下能读取.wdp图片的资料很少

  尝试了很多方式,发现有个ImageMagick库,专门处理图片的,这给了我很大的帮助,这里简单介绍一下这个库。

  ImageMagick 

  image

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

  官网地址:https://imagemagick.org/

  源码地址:https://github.com/ImageMagick/ImageMagick

  支持的图片格式列表:https://imagemagick.org/script/formats.php

  image

  下载安装地址: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对接方式,后面有需求了再仔细研究下。

posted @ 2026-03-21 14:54  没有星星的夏季  阅读(204)  评论(0)    收藏  举报