WCP.Drawing
8.0.0
dotnet add package WCP.Drawing --version 8.0.0
NuGet\Install-Package WCP.Drawing -Version 8.0.0
<PackageReference Include="WCP.Drawing" Version="8.0.0" />
<PackageVersion Include="WCP.Drawing" Version="8.0.0" />
<PackageReference Include="WCP.Drawing" />
paket add WCP.Drawing --version 8.0.0
#r "nuget: WCP.Drawing, 8.0.0"
#:package WCP.Drawing@8.0.0
#addin nuget:?package=WCP.Drawing&version=8.0.0
#tool nuget:?package=WCP.Drawing&version=8.0.0
WCP.Drawing
WCP.Drawing 是一个围绕图片与文件处理场景的轻量级工具库,封装了常用的:
适用于 Web 接口、后台服务、桌面程序等需要做图片转换、二维码生成、文件校验的 .NET 应用。
- Target Framework:
net8.0 - License:
Apache-2.0 - 作者 / Author: 吴存平
安装 (Install)
在 NuGet 中搜索并安装:
- 包名:
WCP.Drawing
使用 .NET CLI:
dotnet add package WCP.Drawing
使用 Package Manager:
Install-Package WCP.Drawing
PackageReference 示例:
<ItemGroup>
<PackageReference Include="WCP.Drawing" Version="8.0.0" />
</ItemGroup>
版本号以实际发布到 NuGet 为准。
依赖 (Dependencies)
WCP.Drawing 基于以下图形与二维码库:
System.Drawing.CommonQRCoderZXing.Net
在非 Windows 环境使用
System.Drawing.Common时,请参考 .NET 官方文档关于跨平台支持的说明。
核心功能 (Features)
1. 文件 / 字节 / 图片 互转 - FileHelper
命名空间:WCP.Drawing
主要能力:
BytesToFile(byte[] buff, string savepath, string fileName)- 将
byte[]保存为文件,自动创建目录并覆盖同名文件。
- 将
FileToBytes(string filePath)- 将文件读取为
byte[]字节数组。
- 将文件读取为
BitmapToBytes(Bitmap bitmap)- 将
Bitmap以 PNG 格式保存为byte[]。
- 将
BytesToBase64(byte[] buff)- 将字节数组转为 Base64 字符串,适合前端
<img src="data:image/...;base64,..." />显示。
- 将字节数组转为 Base64 字符串,适合前端
BitmapToBase64(string path)- 直接根据文件路径读取图片并转为 Base64 字符串。
Base64ToBitmap(string strBase64)- Base64 字符串还原为
Bitmap对象。
- Base64 字符串还原为
FilestreamToMemoryStream(string path)- 将文件转换为
MemoryStream,方便以流方式处理。
- 将文件转换为
UrlToBase64(string url)- 下载网络图片并转为 Base64,返回
(bool success, string base64)。
- 下载网络图片并转为 Base64,返回
- 文件哈希:
GetSHA1(string path)GetSHA256(string path)GetMD5(string path)
2. 二维码生成 - QRCoder 实现
命名空间:WCP.Drawing.QRCoderPackage.QRCoderPackage
类:QRCoderHelper
Bitmap GenerateBitmapQRCode(string plainText, int pixel)- 使用 QRCoder 生成二维码
Bitmap。
- 使用 QRCoder 生成二维码
byte[] GenerateBtyesQRCode(string plainText, int pixel)- 生成 PNG 格式二维码图片字节数组,适合直接返回给前端或保存为文件。
3. 二维码生成 - ZXing.Net 实现
命名空间:WCP.Drawing.QRCoderPackage.ZXingPackage
类:QRCoderHelper
byte[] DrawQrCode(string msg, int width = 500, int height = 500)- 使用 ZXing 编码生成二维码 PNG 图片字节数组。
两套实现可以按需选择:需要
Bitmap对象可使用 QRCoder 版本,需要直接byte[]输出可以任选其一。
示例:文件与 Base64 工具 (File & Base64 Utils)
将上传的图片保存到本地,并计算 MD5:
using System.Drawing;
using WCP.Drawing;
// 假设 fileBytes 来自上传文件
byte[] fileBytes = ...;
// 保存到指定目录
var saveDir = "C:/data/images/";
var fileName = "avatar.png";
FileHelper.BytesToFile(fileBytes, saveDir, fileName);
// 再将文件读回为 byte[]
var loadedBytes = FileHelper.FileToBytes(saveDir + fileName);
// 计算 MD5
string md5 = FileHelper.GetMD5(saveDir + fileName);
// 转为 Base64 方便前端预览
string base64 = FileHelper.BytesToBase64(loadedBytes);
// 前端可用:<img src="data:image/png;base64,{base64}" />
从网络图片直接转为 Base64:
(string success, string base64) = FileHelper.UrlToBase64("https://example.com/logo.png");
if (success)
{
Console.WriteLine(base64);
}
示例:使用 QRCoder 生成二维码 (QRCoder)
生成包含 URL 的二维码,并在 ASP.NET Core 中返回:
using Microsoft.AspNetCore.Mvc;
using System.Drawing;
using WCP.Drawing.QRCoderPackage.QRCoderPackage;
[ApiController]
[Route("api/[controller]")]
public class QrCodeController : ControllerBase
{
[HttpGet("qrcoder")]
public IActionResult GetQrByQRCoder(string url)
{
if (string.IsNullOrWhiteSpace(url))
{
url = "https://example.com";
}
// 生成 Bitmap
Bitmap bitmap = QRCoderHelper.GenerateBitmapQRCode(url, pixel: 20);
// 或直接生成 byte[]
byte[] bytes = QRCoderHelper.GenerateBtyesQRCode(url, pixel: 20);
return File(bytes, "image/png");
}
}
示例:使用 ZXing.Net 生成二维码 (ZXing)
使用 ZXing.Net 生成二维码字节流:
using Microsoft.AspNetCore.Mvc;
using WCP.Drawing.QRCoderPackage.ZXingPackage;
[ApiController]
[Route("api/[controller]")]
public class QrCodeController : ControllerBase
{
[HttpGet("zxing")]
public IActionResult GetQrByZXing(string text)
{
if (string.IsNullOrWhiteSpace(text))
{
text = "Hello ZXing";
}
byte[] pngBytes = QRCoderHelper.DrawQrCode(text, width: 400, height: 400);
return File(pngBytes, "image/png");
}
}
注意事项 (Notes)
跨平台支持
System.Drawing.Common在 Windows 上支持最好。- 在 Linux / macOS 上使用时,请参考 .NET 官方文档,或考虑运行在带有完整 GDI+ 支持的环境中。
资源释放
Bitmap、Image等对象使用后应及时Dispose(例如使用using语句),以避免内存泄漏。- 示例中简单演示核心调用,实际生产代码请注意封装与资源管理。
安全性
- 处理来自用户上传或网络下载的文件/图片时,请做好大小限制、类型校验和异常处理。
- 计算哈希(SHA1 / SHA256 / MD5)时,请注意 MD5 不适合作为强安全校验手段,可作为完整性校验参考。
License
本项目使用 Apache-2.0 许可证。详情请参阅 NuGet 包或源码中的 LICENSE 说明。
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net8.0
- QRCoder (>= 1.7.0)
- System.Drawing.Common (>= 8.0.22)
- ZXing.Net (>= 0.16.11)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.