WCP.Drawing 8.0.0

dotnet add package WCP.Drawing --version 8.0.0
                    
NuGet\Install-Package WCP.Drawing -Version 8.0.0
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="WCP.Drawing" Version="8.0.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="WCP.Drawing" Version="8.0.0" />
                    
Directory.Packages.props
<PackageReference Include="WCP.Drawing" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add WCP.Drawing --version 8.0.0
                    
#r "nuget: WCP.Drawing, 8.0.0"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package WCP.Drawing@8.0.0
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=WCP.Drawing&version=8.0.0
                    
Install as a Cake Addin
#tool nuget:?package=WCP.Drawing&version=8.0.0
                    
Install as a Cake Tool

WCP.Drawing

WCP.Drawing 是一个围绕图片与文件处理场景的轻量级工具库,封装了常用的:

  • 文件与 byte[]、Stream 的互转
  • 图片与 Base64 的互转
  • 文件哈希值计算(SHA1 / SHA256 / MD5)
  • 二维码生成(基于 QRCoder 与 ZXing.Net)

适用于 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.Common
  • QRCoder
  • ZXing.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,..." /> 显示。
  • BitmapToBase64(string path)
    • 直接根据文件路径读取图片并转为 Base64 字符串。
  • Base64ToBitmap(string strBase64)
    • Base64 字符串还原为 Bitmap 对象。
  • FilestreamToMemoryStream(string path)
    • 将文件转换为 MemoryStream,方便以流方式处理。
  • UrlToBase64(string url)
    • 下载网络图片并转为 Base64,返回 (bool success, string 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。
  • 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 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. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
8.0.0 231 11/28/2025
1.0.4 267 11/17/2023
1.0.3 203 11/17/2023
1.0.2 229 11/2/2023
1.0.1 215 11/2/2023
1.0.0 201 11/2/2023