前言

上次我用 C# + AOT 开发了一个 ICO 图标生成工具

这个实用小工具一经发布就受到不少朋友的关注

最近还被做成了网站,有图形化界面来一键生成 ico 图标,更方便普通用户的使用

这种 C# 开发,GitHub Actions 自动化发布 nuget 包和 dotnet tool 的一站式体验非常好,以至于让我对这种感觉有点上瘾了

最近又陆续开发了两个类似的工具,其中一个就是本文要介绍图片处理工具。

项目开源地址,欢迎 Star 和 PR : https://github.com/star-plan/image-glider

关于 ImageGlider

一开始我开发这个工具,只是为了实现把目录中的 jfif 图片批量转换为 Windows 文件管理器能显示缩略图的 jpg 或者 png 格式。

不过在开发过程中,发现 C# 写小工具还真是方便,于是就慢慢增加了一堆功能。

接下来我还打算增加一个相似图片识别功能。

以下是目前的项目介绍:

ImageGlider 是一个功能强大的跨平台图像处理工具套件,使用 C# (.NET 9) 和 ImageSharp 实现。项目采用模块化架构设计,包含核心类库、命令行工具、Web API、示例程序和完整的单元测试,支持 AOT 编译以获得原生性能。

通过 ImageGlider,可以轻松进行图像处理操作,完全摆脱外部依赖,无需 ImageMagick、Node.js 或 Python,适合在 .NET 项目中内嵌、分发或集成自动化流程中使用。

目标是打造一个跨平台、零依赖、高性能、全功能的图像处理解决方案!(可以理解为简化操作版本的 ImageMagick)

项目地址: https://github.com/star-plan/image-glider

功能特点

核心图像处理功能

  • 格式转换:支持 JPEG、PNG、GIF、BMP、TIFF、WebP 等多种图像格式的相互转换
  • 尺寸调整:支持拉伸、保持宽高比、裁剪等多种调整模式
  • 压缩优化:智能压缩算法,在保持质量的同时减小文件体积
  • 图像裁剪:精确裁剪指定区域,支持中心裁剪和自定义坐标裁剪
  • 缩略图生成:快速生成高质量缩略图,支持多种尺寸模式
  • 水印功能:支持文本和图片水印,9种位置选择,可调透明度和缩放
  • 元数据清理:一键清除 EXIF、ICC、XMP 等隐私敏感的元数据信息
  • 颜色调整:调整亮度、对比度、饱和度、色相、伽马值等颜色参数
  • 信息提取:获取图像详细信息,支持JSON格式输出

️ 技术特性

  • 跨平台:基于 .NET 9 和 ImageSharp,支持 Windows、Linux、macOS
  • AOT 编译:支持原生AOT编译,启动速度快,内存占用低
  • 零依赖:无需安装额外的图像处理工具或运行时环境
  • 模块化设计:核心功能封装为独立类库,便于集成和扩展
  • 多种接口:提供CLI工具、Web API、核心类库三种使用方式

使用方式

  • 命令行工具:16种专业命令,支持单文件和批量处理
  • Web API:RESTful接口,支持HTTP文件上传和处理
  • 核心类库:直接集成到.NET项目中使用
  • 批量处理:自动扫描目录,支持递归处理和文件过滤
  • 详细日志:完整的日志记录,支持多种日志级别
  • 错误处理:完善的异常处理机制,提供详细的处理结果信息

使用方法

作为 .NET Global Tool 安装(推荐)

dotnet tool install --global ImageGlider.Cli

安装完成之后就可以通过命令行使用了

$ imageglider
=== ImageGlider 命令行工具 === 用法:
ImageGlider.Cli <命令> [选项]
ImageGlider.Cli help [命令] 显示帮助信息 可用命令:
adjust 调整单个图片文件的颜色(亮度、对比度、饱和度、色相、伽马值)
batch-adjust 批量调整指定目录下图片文件的颜色(亮度、对比度、饱和度、色相、伽马值)
batch-compress 批量压缩优化图片文件
batch-convert 批量转换图片文件
batch-crop 批量裁剪指定目录下的图片文件
batch-info 批量查看目录下图片文件的详细信息
batch-resize 批量调整图片文件尺寸
batch-strip-metadata 批量清理指定目录下图片文件的元数据
batch-thumbnail 批量生成指定目录下图片文件的缩略图
batch-watermark 批量为图片文件添加水印
compress 压缩优化单个图片文件
convert 转换单个图片文件
crop 裁剪单个图片文件
info 查看图片文件的详细信息
resize 调整单个图片文件尺寸
strip-metadata 清理单个图片文件的元数据
thumbnail 生成单个图片文件的缩略图
watermark 为单个图片文件添加水印 使用 'ImageGlider.Cli help <命令>' 查看特定命令的详细帮助。 示例:
ImageGlider.Cli convert -s image.jfif -t image.jpeg -q 85
ImageGlider.Cli batch-convert -se .jfif -te .jpeg -q 90
ImageGlider.Cli resize -s input.jpg -t output.jpg -w 800 -h 600
ImageGlider.Cli compress -s input.jpg -t output.jpg -l 60
ImageGlider.Cli help convert

AOT 与其他方式

通过其他方式安装(如 scoop、brew)和 AOT 编译发布,本文就不赘述了,请查看 项目文档

小结

这套开发流程非常舒服,我甚至想把这套流程集成到我的模板项目 FluentConsole 里了

接下来会输出几篇与这套流程有关的文章,感兴趣的同学可以关注一下。

纯 C#实现+AOT 打造的多功能图片处理工具 ImageGlider的更多相关文章

  1. iOS:删除storyBoard,纯代码实现UITabBarController的视图切换功能

    storyboard是一个很强大的编写代码的辅助工具,可以帮助布局多个视图之间的联系,既直观又能减少代码量:但是,作为一个程序员,在不使用storyboard的情况下,纯代码编写是必须的技能. 下面就 ...

  2. 打造程序员的高效生产力工具-mac篇

    打造程序员的高效生产力工具-mac篇 1   概述 古语有云:“工欲善其事,必先利其器” [1] ,作为一个程序员,他最重要的生产资源是脑力知识,最重要的生产工具是什么?电脑. 在进行重要的脑力成果输 ...

  3. 与众不同 windows phone (40) - 8.0 媒体: 音乐中心的新增功能, 图片中心的新增功能, 后台音乐播放的新增功能

    [源码下载] 与众不同 windows phone (40) - 8.0 媒体: 音乐中心的新增功能, 图片中心的新增功能, 后台音乐播放的新增功能 作者:webabcd 介绍与众不同 windows ...

  4. 多功能网页刷新工具,刷pv工具

    多功能网页刷新工具,刷pv工具,在线刷流量,刷PV,刷UV小牛刷新助手功能介绍:1.设置多个刷新网页地址.2.设置刷新时间3.开始工作4.其他操作:老板键:打开时自动刷新:置系统托盘5.可手动输入地址 ...

  5. 架构师成长之路1.2-多功能系统信息统计工具dstat

    点击返回架构师成长之路 架构师成长之路1.2-多功能系统信息统计工具dstat dstat命令是一个用来替换vmstat.iostat.netstat.nfsstat和ifstat这些命令的工具,是一 ...

  6. PHP结合zyupload多功能图片上传实例

    PHP结合zyupload多功能图片上传实例,支持拖拽和裁剪.可以自定义高度和宽度,类型,远程上传地址等. zyupload上传基本配置 $("#zyupload").zyUplo ...

  7. 用WPF窗体打造个性化界面的图片浏览器

    原文:用WPF窗体打造个性化界面的图片浏览器 本文使用WPF窗体(XAML及C#)与Win Form控件(FolderBrowserDialog)结合的方式, 演示制作了一个简易漂亮的WPF图片浏览器 ...

  8. APICloud首款全功能集成开发工具重磅发布,彰显云端一体理念

    近日,APICloud重磅推出首款云端一体的全功能集成开发工具--APICloud Studio 2.为了更深入了解这款开发工具的特性及优势,APICloud CTO 邹达针对几个核心问题做出了解答. ...

  9. HTML实现包含公共部分:通过ECMA6的模块化,纯前端实现类似jsp:include的功能

    以前一直是用 jsp:include 的方式来引入 html 头部的公共部分 php也有类似的方式 但以上两种,个人感觉都并不纯粹,本着折腾的精神,优化原有代码,解耦合 使用 ECMA6 的模块化方式 ...

  10. Yii 打造带有缓存功能的AR

    继承AR类 重写 findByPk方法为pk  还有afterSave afterDelete 通过对象主键缓存其属性  在insert update delete 操作时候 都会自动更新缓存还是挺方 ...

随机推荐

  1. minikube dashboard ImagePullBackOff 失败问题的解决方法

    问题 通过minikube启动k8s集群后,我们想安装启动k8s的dashboard插件,执行minikube dashboard后,一直卡住直到提示验证失败. 查看pod状态,我们看到kuberne ...

  2. 一文速通Python并行计算:11 Python多进程编程-进程之间的数据安全传输-基于队列和管道

    一文速通 Python 并行计算:11 Python 多进程编程-进程之间的数据安全传输-基于队列和管道 摘要: Python 多进程中,Queue 和 Pipe 提供进程间安全通信.Queue 依赖 ...

  3. docker基础学习笔记

    Docker安装 Docker基本组成 docker架构图 安装步骤 官网安装参考手册:https://docs.docker.com/engine/install/ubuntu/ 卸载旧版本 for ...

  4. 总决赛定档!“天翼云息壤杯”高校AI大赛巅峰之战即将打响!

    近日,为梦想添翼,让AI发光--"天翼云息壤杯"高校AI大赛总决赛时间正式揭晓.总决赛将于2025年7月1日至7月17日在北京举办.届时,来自全国各地上百支成功晋级的优秀队伍和特邀 ...

  5. AtCoder Beginner Contest 408 E-F 题解

    E. Minimum OR Path 题意 给你一个 \(N\) 个点 \(M\) 条边的无自环的无向图,第 \(i\) 条边连接 \(u_i\) 和 \(v_i\),权值为 \(w_i\). 在所有 ...

  6. Docker安装运行报错wsl问题排查方案

    Docker运行报错wsl问题排查方案 在window中安装运行Docker Desktop时容易遇到有关wsl的报错问题,这里给出几个排查解决的方法用于记录. 排查步骤如下: 一.开启虚拟化问题 1 ...

  7. Form 表单在数栈的应用(下):深入篇

    ​ 这篇文章的主题为我们对 Form 表单在数栈产品中使用之后理解消化的一个过程,通过介绍一些 Form 表单中常用到的方法,来理解部分设计思想,加深我们对技术的追求.主要介绍 Form 表单的创建和 ...

  8. FastAPI权限缓存:你的性能瓶颈是否藏在这只“看不见的手”里?

    title: FastAPI权限缓存:你的性能瓶颈是否藏在这只"看不见的手"里? date: 2025/06/23 05:27:13 updated: 2025/06/23 05: ...

  9. git ---多用户管理

    一.概述 ​ 相信大家都遇到过这样的问题,实际开发中需要在一台PC上用到 不同平台git的账号甚至同一个平台的多个账号(比如本人gitee .字自己在nas上搭建的gitea ,另外还有github账 ...

  10. Java 基础记录

    SpringBoot SpringBoot优点 Create stand-alone Spring applications 创建独立Spring应用 Embed Tomcat, Jetty or U ...