纯 C#实现+AOT 打造的多功能图片处理工具 ImageGlider
前言
上次我用 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的更多相关文章
- iOS:删除storyBoard,纯代码实现UITabBarController的视图切换功能
storyboard是一个很强大的编写代码的辅助工具,可以帮助布局多个视图之间的联系,既直观又能减少代码量:但是,作为一个程序员,在不使用storyboard的情况下,纯代码编写是必须的技能. 下面就 ...
- 打造程序员的高效生产力工具-mac篇
打造程序员的高效生产力工具-mac篇 1 概述 古语有云:“工欲善其事,必先利其器” [1] ,作为一个程序员,他最重要的生产资源是脑力知识,最重要的生产工具是什么?电脑. 在进行重要的脑力成果输 ...
- 与众不同 windows phone (40) - 8.0 媒体: 音乐中心的新增功能, 图片中心的新增功能, 后台音乐播放的新增功能
[源码下载] 与众不同 windows phone (40) - 8.0 媒体: 音乐中心的新增功能, 图片中心的新增功能, 后台音乐播放的新增功能 作者:webabcd 介绍与众不同 windows ...
- 多功能网页刷新工具,刷pv工具
多功能网页刷新工具,刷pv工具,在线刷流量,刷PV,刷UV小牛刷新助手功能介绍:1.设置多个刷新网页地址.2.设置刷新时间3.开始工作4.其他操作:老板键:打开时自动刷新:置系统托盘5.可手动输入地址 ...
- 架构师成长之路1.2-多功能系统信息统计工具dstat
点击返回架构师成长之路 架构师成长之路1.2-多功能系统信息统计工具dstat dstat命令是一个用来替换vmstat.iostat.netstat.nfsstat和ifstat这些命令的工具,是一 ...
- PHP结合zyupload多功能图片上传实例
PHP结合zyupload多功能图片上传实例,支持拖拽和裁剪.可以自定义高度和宽度,类型,远程上传地址等. zyupload上传基本配置 $("#zyupload").zyUplo ...
- 用WPF窗体打造个性化界面的图片浏览器
原文:用WPF窗体打造个性化界面的图片浏览器 本文使用WPF窗体(XAML及C#)与Win Form控件(FolderBrowserDialog)结合的方式, 演示制作了一个简易漂亮的WPF图片浏览器 ...
- APICloud首款全功能集成开发工具重磅发布,彰显云端一体理念
近日,APICloud重磅推出首款云端一体的全功能集成开发工具--APICloud Studio 2.为了更深入了解这款开发工具的特性及优势,APICloud CTO 邹达针对几个核心问题做出了解答. ...
- HTML实现包含公共部分:通过ECMA6的模块化,纯前端实现类似jsp:include的功能
以前一直是用 jsp:include 的方式来引入 html 头部的公共部分 php也有类似的方式 但以上两种,个人感觉都并不纯粹,本着折腾的精神,优化原有代码,解耦合 使用 ECMA6 的模块化方式 ...
- Yii 打造带有缓存功能的AR
继承AR类 重写 findByPk方法为pk 还有afterSave afterDelete 通过对象主键缓存其属性 在insert update delete 操作时候 都会自动更新缓存还是挺方 ...
随机推荐
- minikube dashboard ImagePullBackOff 失败问题的解决方法
问题 通过minikube启动k8s集群后,我们想安装启动k8s的dashboard插件,执行minikube dashboard后,一直卡住直到提示验证失败. 查看pod状态,我们看到kuberne ...
- 一文速通Python并行计算:11 Python多进程编程-进程之间的数据安全传输-基于队列和管道
一文速通 Python 并行计算:11 Python 多进程编程-进程之间的数据安全传输-基于队列和管道 摘要: Python 多进程中,Queue 和 Pipe 提供进程间安全通信.Queue 依赖 ...
- docker基础学习笔记
Docker安装 Docker基本组成 docker架构图 安装步骤 官网安装参考手册:https://docs.docker.com/engine/install/ubuntu/ 卸载旧版本 for ...
- 总决赛定档!“天翼云息壤杯”高校AI大赛巅峰之战即将打响!
近日,为梦想添翼,让AI发光--"天翼云息壤杯"高校AI大赛总决赛时间正式揭晓.总决赛将于2025年7月1日至7月17日在北京举办.届时,来自全国各地上百支成功晋级的优秀队伍和特邀 ...
- AtCoder Beginner Contest 408 E-F 题解
E. Minimum OR Path 题意 给你一个 \(N\) 个点 \(M\) 条边的无自环的无向图,第 \(i\) 条边连接 \(u_i\) 和 \(v_i\),权值为 \(w_i\). 在所有 ...
- Docker安装运行报错wsl问题排查方案
Docker运行报错wsl问题排查方案 在window中安装运行Docker Desktop时容易遇到有关wsl的报错问题,这里给出几个排查解决的方法用于记录. 排查步骤如下: 一.开启虚拟化问题 1 ...
- Form 表单在数栈的应用(下):深入篇
这篇文章的主题为我们对 Form 表单在数栈产品中使用之后理解消化的一个过程,通过介绍一些 Form 表单中常用到的方法,来理解部分设计思想,加深我们对技术的追求.主要介绍 Form 表单的创建和 ...
- FastAPI权限缓存:你的性能瓶颈是否藏在这只“看不见的手”里?
title: FastAPI权限缓存:你的性能瓶颈是否藏在这只"看不见的手"里? date: 2025/06/23 05:27:13 updated: 2025/06/23 05: ...
- git ---多用户管理
一.概述 相信大家都遇到过这样的问题,实际开发中需要在一台PC上用到 不同平台git的账号甚至同一个平台的多个账号(比如本人gitee .字自己在nas上搭建的gitea ,另外还有github账 ...
- Java 基础记录
SpringBoot SpringBoot优点 Create stand-alone Spring applications 创建独立Spring应用 Embed Tomcat, Jetty or U ...