ImageGlider 核心库 - 纯 C# 实现的跨平台图像格式转换工具套件核心功能。基于 ImageSharp 和 ImageMagick 实现,支持 JPEG、PNG、GIF、BMP、TIFF、WebP、AVIF 等多种格式的转换。
$ dotnet add package ImageGlider
ImageGlider 是一个功能强大的跨平台图像处理工具套件,使用 C# (.NET 9)、ImageSharp 和 ImageMagick.NET 实现。项目采用模块化架构设计,包含核心类库、命令行工具、Web API、示例程序和完整的单元测试,支持 AOT 编译以获得原生性能。
通过ImageGlider,您可以轻松进行图像处理操作,支持包括现代 AVIF 格式在内的多种图像格式,适合在 .NET 项目中内嵌、分发或集成自动化流程中使用。
🚀 跨平台、零依赖、高性能、全功能的图像处理解决方案!
dotnet tool install --global ImageGlider.Cli
git clone https://github.com/Deali-Axy/image-glider.git
cd image-glider
dotnet build -c Release
# Windows x64
dotnet publish src/ImageGlider.Cli -c Release -r win-x64 --self-contained -p:PublishSingleFile=true
# Linux x64
dotnet publish src/ImageGlider.Cli -c Release -r linux-x64 --self-contained -p:PublishSingleFile=true
# macOS x64 (Intel)
dotnet publish src/ImageGlider.Cli -c Release -r osx-x64 --self-contained -p:PublishSingleFile=true
# macOS ARM64 (Apple Silicon)
dotnet publish src/ImageGlider.Cli -c Release -r osx-arm64 --self-contained -p:PublishSingleFile=true
# Windows x64 AOT
dotnet publish src/ImageGlider.Cli -c Release -r win-x64 -p:PublishAot=true
# Linux x64 AOT
dotnet publish src/ImageGlider.Cli -c Release -r linux-x64 -p:PublishAot=true
# macOS x64 AOT
dotnet publish src/ImageGlider.Cli -c Release -r osx-x64 -p:PublishAot=true
# macOS ARM64 AOT
dotnet publish src/ImageGlider.Cli -c Release -r osx-arm64 -p:PublishAot=true
安装完成后,您可以直接使用 imageglider 命令:
# 查看所有可用命令
imageglider --help
# 查看特定命令的帮助
imageglider help convert
启动Web API服务:
cd src/ImageGlider.WebApi
dotnet run
# 服务将在 http://localhost:5000 启动
在您的.NET项目中引用核心类库:
<PackageReference Include="ImageGlider" Version="1.0.0" />
using ImageGlider;
// 转换图像格式
ImageConverter.ConvertImage("input.png", "output.jpg", 85);
// 调整图像尺寸
ImageConverter.ResizeImage("input.jpg", "output.jpg", 800, 600);
# 运行所有测试
dotnet test
# 运行测试并生成覆盖率报告
dotnet test --collect:"XPlat Code Coverage"
# 运行示例程序,了解核心类库的用法
dotnet run --project src/ImageGlider.Example
ImageGlider CLI 提供了16种专业命令,支持单文件和批量处理。所有命令都经过精心设计,提供丰富的参数选项。
| 命令 | 描述 | 批量版本 |
|---|---|---|
convert | 格式转换 | batch-convert |
resize | 尺寸调整 | batch-resize |
compress | 图像压缩 | batch-compress |
crop | 图像裁剪 | batch-crop |
thumbnail | 缩略图生成 | batch-thumbnail |
watermark | 添加水印 | batch-watermark |
strip-metadata | 清理元数据 | batch-strip-metadata |
adjust | 颜色调整 | batch-adjust |
info | 信息提取 | batch-info |
# 查看所有命令
imageglider --help
# 查看特定命令的详细帮助
imageglider help convert
imageglider help batch-resize
# 单文件转换
imageglider convert -s image.jpg -t image.png -q 85
# 批量转换目录下所有JPEG文件为PNG
imageglider batch-convert -sd ./input -od ./output -se .jpg -te .png -q 90
# 转换特定格式并设置质量
imageglider convert -s photo.webp -t photo.jpg --quality 95
# 转换为现代 AVIF 格式(高压缩比)
imageglider convert -s photo.jpg -t photo.avif --quality 80
# 从 AVIF 格式转换为其他格式
imageglider convert -s photo.avif -t photo.png
# 批量转换为 AVIF 格式
imageglider batch-convert -sd ./photos -od ./avif -se .jpg -te .avif -q 75
# 按指定宽度和高度调整(拉伸模式)
imageglider resize -s input.jpg -t output.jpg -w 800 -h 600
# 保持宽高比调整(只指定宽度)
imageglider resize -s input.jpg -t output.jpg -w 800 --mode keep-aspect
# 批量调整目录下所有图片
imageglider batch-resize -sd ./photos -od ./resized -w 1920 -h 1080 -ext .jpg
#### 🗜️ 压缩优化 (compress)
```bash
# 默认压缩(质量75)
imageglider compress -s input.jpg -t compressed.jpg
# 指定压缩质量(1-100)
imageglider compress -s input.jpg -t output.jpg -q 60
# 批量压缩目录下所有JPEG文件
imageglider batch-compress -sd ./photos -od ./compressed -ext .jpg -q 80
# 从指定坐标裁剪
imageglider crop -s input.png -t cropped.png -x 100 -y 50 -w 400 -h 300
# 中心裁剪
imageglider crop -s input.jpg -t cropped.jpg -w 800 -h 600 --center
# 批量裁剪
imageglider batch-crop -sd ./photos -od ./cropped -w 500 -h 500 --center -ext .jpg
# 生成标准缩略图
imageglider thumbnail -s input.jpg -t thumb.jpg -w 150 -h 150
# 保持宽高比的缩略图
imageglider thumbnail -s input.jpg -t thumb.jpg -w 200 --keep-aspect
# 批量生成缩略图
imageglider batch-thumbnail -sd ./photos -od ./thumbs -w 300 -h 300 -ext .jpg
# 添加文本水印
imageglider watermark -s input.jpg -t watermarked.jpg --text "© 2024" --position bottom-right
# 添加图片水印
imageglider watermark -s input.jpg -t watermarked.jpg --image logo.png --opacity 50 --scale 0.3
# 批量添加水印
imageglider batch-watermark -sd ./photos -od ./watermarked --text "Sample" -ext .jpg
# 清理所有元数据
imageglider strip-metadata -s input.jpg -t clean.jpg --all
# 只清理EXIF数据
imageglider strip-metadata -s input.jpg -t clean.jpg --exif
# 批量清理元数据
imageglider batch-strip-metadata -sd ./photos -od ./cleaned -ext .jpg --all
# 调整亮度和对比度
imageglider adjust -s input.jpg -t adjusted.jpg --brightness 20 --contrast 15
# 调整饱和度和色相
imageglider adjust -s input.jpg -t adjusted.jpg --saturation 30 --hue 45
# 批量颜色调整
imageglider batch-adjust -sd ./photos -od ./adjusted --brightness 10 --gamma 1.2 -ext .jpg
# 显示图像基本信息
imageglider info -s image.jpg
# 以JSON格式输出详细信息
imageglider info -s image.jpg --json
# 批量提取信息并保存到文件
imageglider batch-info -sd ./photos --json --output info.json
### 🌐 Web API 使用指南
ImageGlider 提供了完整的RESTful API服务,支持通过HTTP接口进行图像处理。
#### 启动API服务
```bash
cd src/ImageGlider.WebApi
dotnet run
# 服务将在 http://localhost:5000 启动
# 上传并转换图像格式
curl -X POST "http://localhost:5000/api/convert" \
-F "file=@input.jpg" \
-F "targetFormat=png" \
-F "quality=85"
# 上传并调整图像尺寸
curl -X POST "http://localhost:5000/api/resize" \
-F "file=@input.jpg" \
-F "width=800" \
-F "height=600" \
-F "mode=KeepAspectRatio"
# 上传并压缩图像
curl -X POST "http://localhost:5000/api/compress" \
-F "file=@input.jpg" \
-F "quality=70"
# 获取图像信息
curl -X POST "http://localhost:5000/api/info" \
-F "file=@input.jpg"
在您的.NET项目中直接使用ImageGlider核心功能:
using ImageGlider;
using ImageGlider.Enums;
// 格式转换
bool success = ImageConverter.ConvertImage("input.jpg", "output.png", quality: 85);
// 转换为 AVIF 格式(现代高效压缩)
bool avifSuccess = ImageConverter.ConvertImage("input.jpg", "output.avif", quality: 80);
// 从 AVIF 格式转换
bool fromAvif = ImageConverter.ConvertImage("input.avif", "output.png");
// 尺寸调整
bool resized = ImageConverter.ResizeImage("input.jpg", "output.jpg", 800, 600, ResizeMode.KeepAspectRatio);
// 图像压缩
bool compressed = ImageConverter.CompressImage("input.jpg", "compressed.jpg", quality: 70);
// 添加文本水印
bool watermarked = ImageConverter.AddTextWatermark("input.jpg", "watermarked.jpg", "© 2024", WatermarkPosition.BottomRight);
// 批量转换为 AVIF 格式
var avifResult = ImageConverter.BatchConvert("./photos", "./avif", ".jpg", ".avif", quality: 75);
Console.WriteLine($"AVIF 转换成功: {avifResult.SuccessfulConversions}/{avifResult.TotalFiles}");
// 批量处理
var result = ImageConverter.BatchConvert("./input", "./output", ".jpg", ".png", quality: 90);
Console.WriteLine($"成功转换: {result.SuccessfulConversions}/{result.TotalFiles}");
// 获取图像信息
var info = ImageConverter.GetImageInfo("image.jpg");
Console.WriteLine($"尺寸: {info.Width}x{info.Height}, 格式: {info.Format}");
// 图像文件验证
using ImageGlider.Utilities;
// 检测文件是否为有效图片(综合检测)
bool isValidImage = ImageValidator.IsValidImageFile("path/to/file.jpg");
// 启用深度验证(通过ImageSharp加载验证)
bool isValidWithDeepCheck = ImageValidator.IsValidImageFile("path/to/file.jpg", useDeepValidation: true);
// 仅检测文件扩展名
bool hasImageExtension = ImageValidator.IsValidImageExtension("file.png");
// 基于文件头检测(魔数签名)
bool isValidBySignature = ImageValidator.IsValidImageBySignature("path/to/file.jpg");
// 获取支持的图片格式列表
string[] supportedFormats = ImageValidator.GetSupportedExtensions();
Console.WriteLine($"支持的格式: {string.Join(", ", supportedFormats)}");
using ImageGlider.Processors;
using ImageGlider.Core;
// 使用处理器工厂
var resizer = ImageProcessorFactory.CreateResizer();
var compressor = ImageProcessorFactory.CreateCompressor();
var watermark = ImageProcessorFactory.CreateWatermark();
// 链式处理
bool processed = resizer.ProcessImage("input.jpg", "temp.jpg", 800, 600) &&
compressor.ProcessImage("temp.jpg", "final.jpg", 80);
当前测试状态:
运行测试并生成覆盖率报告:
# 运行所有测试
dotnet test
# 生成覆盖率报告
dotnet test --collect:"XPlat Code Coverage" --results-directory ./TestResults
# 生成HTML覆盖率报告
reportgenerator -reports:"TestResults/**/coverage.cobertura.xml" -targetdir:"TestResults/CoverageReport" -reporttypes:Html
ImageGlider/
├── src/
│ ├── ImageGlider/ # 核心类库
│ │ ├── Core/ # 核心接口和工厂
│ │ ├── Processors/ # 图像处理器
│ │ ├── Utilities/ # 工具类
│ │ ├── Enums/ # 枚举定义
│ │ └── ImageConverter.cs # 主要API入口
│ ├── ImageGlider.Cli/ # 命令行工具
│ │ ├── Commands/ # 16种命令实现
│ │ └── Program.cs # CLI程序入口
│ ├── ImageGlider.WebApi/ # Web API服务
│ │ ├── Endpoints/ # API端点
│ │ ├── Services/ # 服务层
│ │ └── Program.cs # API程序入口
│ └── ImageGlider.Example/ # 示例程序
│ └── Program.cs # 使用示例
└── tests/
└── ImageGlider.Tests/ # 单元测试
├── TestHelpers/ # 测试辅助工具
└── *.cs # 180个测试用例
# 克隆项目
git clone https://github.com/Deali-Axy/image-glider.git
cd image-glider
# 恢复依赖
dotnet restore
# 构建项目
dotnet build -c Release
# 运行测试
dotnet test
# 运行示例
dotnet run --project src/ImageGlider.Example
# Windows x64 AOT(优化体积)
dotnet publish src/ImageGlider.Cli -c Release -r win-x64 -p:PublishAot=true -p:IlcOptimizationPreference=Size
# Linux x64 AOT(优化性能)
dotnet publish src/ImageGlider.Cli -c Release -r linux-x64 -p:PublishAot=true -p:IlcOptimizationPreference=Speed
我们欢迎各种形式的贡献!
git checkout -b feature/AmazingFeature)git commit -m 'Add some AmazingFeature')git push origin feature/AmazingFeature)本项目采用 MIT 许可证 - 查看 LICENSE 文件了解详情。
AVIF (AV1 Image File Format) 是基于 AV1 视频编解码器的现代图像格式,具有以下优势:
ImageGlider 提供多种 AVIF 格式支持方案,优先使用 FFmpeg,备选 ImageMagick.NET:
libaom-av1 编码器,性能更优-threads 8) 和行并行 (-row-mt 1)-cpu-used 6,范围 0-8)⭐ 如果这个项目对您有帮助,请给我们一个星标!