daShangDao_utils/README.md
Cai1Cai1 a92f8e2c10 feat: 初始版本 v1.0.0
- 新增 imglib 包,支持 FilePath/URL/Base64 三种图片输入方式
- 纯白占比检测、白底居中合成、等比缩放、去白边、裁切
- 二维码生成与识别、条形码生成(Code128/EAN13/Code39)
- 中文文字图片、书籍信息水印、通用水印叠加
- 输出辅助:EncodeToBytes/EncodeToBase64/SaveToFile/SaveJPEG/SavePNG
- 字体缓存,避免重复加载
- 完整测试覆盖(23个测试用例)
2026-06-30 11:56:28 +08:00

5.6 KiB
Raw Blame History

daShangDao_utils

版本: v1.0.0 | 图片处理工具库

提供统一的图片加载接口(支持文件路径/网络 URL/Base64 三种输入方式),包含纯白检测、缩放、裁切、去白边、二维码/条形码生成识别、中文水印等完整图片处理能力。


安装

go get github.com/你的用户名/daShangDao_utils/imglib

然后导入:

import "github.com/你的用户名/daShangDao_utils/imglib"

核心类型

ImageInput统一图片输入源

ImageInput 是本库的核心输入类型,支持 三种图片加载方式,任意设置一个即可:

// 方式一:从磁盘文件加载
input := imglib.NewImageInputFromFile("/path/to/image.jpg")

// 方式二:从网络 URL 加载
input := imglib.NewImageInputFromURL("https://example.com/image.png")

// 方式三:从 Base64 字符串加载(自动处理 data:image/ 前缀)
input := imglib.NewImageInputFromBase64("iVBORw0KGgo...")

// 统一加载方法
img, format, err := input.Load()

API 文档

纯白占比检测

pct, err := imglib.CalculateWhitePercentage(input)
// pct: 0.0 ~ 1.0 之间的纯白像素占比

白底居中合成

rgba, err := imglib.CreateWhiteBottomCenteredImage(input, width, height)
// 在 width×height 的白色背景上居中放置原图

等比高度缩放

img, err := imglib.ResizeToHeight(input, targetHeight)
// 按目标高度等比例缩放Lanczos3 插值

自适应尺寸缩放

rgba, err := imglib.ResizeToDimensions(input, dstWidth, dstHeight)
// 按目标宽高等比例缩放,自实现 Lanczos3 算法

去白边

img, err := imglib.RemoveWhiteBorder(input)
// 自动检测白色边框并裁剪,默认阈值 240

img, err := imglib.RemoveWhiteBorderWithConfig(input, threshold, margin)
// threshold: 检测阈值(0-255)margin: 保留边距(像素)

图片裁切

rgba, err := imglib.Crop(input, x, y, width, height)
// 按指定矩形区域裁切

二维码识别

text, err := imglib.ScanQRCode(input)
// 返回二维码中的文本内容

text, qrImg, err := imglib.ScanQRCodeWithBounds(input)
// 返回文本内容 + 裁剪后的二维码区域图片

二维码生成

img, err := imglib.GenerateQRCode(content, width, height)
// content: 二维码内容, width/height: 图片尺寸

条形码生成

// 支持三种编码类型:
img, err := imglib.GenerateBarcode(imglib.Code128, "1234567890")
img, err := imglib.GenerateBarcode(imglib.EAN13, "1234567890123")
img, err := imglib.GenerateBarcode(imglib.Code39, "ABC-123")

中文文字图片

img, err := imglib.CreateChineseTextImage(text, width, height, fontSize)
// 将中英文文本渲染为图片,超长自动换行并显示省略号

书籍信息水印

// 先在现有 RGBA 图片上绘制书名/作者/出版社
err := imglib.DrawChineseInfo(rgba, "书名", "作者", "出版社")

通用水印

result, err := imglib.ApplyWatermark(imglib.WatermarkConfig{
    SourceImage:  imglib.NewImageInputFromFile("source.jpg"),
    WatermarkImg: imglib.NewImageInputFromBase64(b64data),
    Opacity:      0.5,                              // 不透明度
    Position:     "bottom-right",                    // center/top-left/top-right/bottom-left/bottom-right/tile
    Scale:        0.3,                               // 水印缩放比例
    XOffset:      10,
    YOffset:      10,
})

Position 可选值:

说明
center 居中
top-left 左上角
top-right 右上角
bottom-left 左下角
bottom-right 右下角
tile 平铺

输出辅助

// 编码为字节数组
bytes, err := imglib.EncodeToBytes(img, "jpeg", 95)

// 编码为 Base64 字符串(带 data:image/ 前缀)
b64, err := imglib.EncodeToBase64(img, "png", 95)

// 保存到文件(自动根据扩展名选择格式)
err := imglib.SaveToFile(img, "output.png")

// 保存为 JPEG
err := imglib.SaveJPEG(img, "out.jpg", 95)

// 保存为 PNG
err := imglib.SavePNG(img, "out.png")

完整示例

package main

import (
    "fmt"
    "github.com/你的用户名/daShangDao_utils/imglib"
)

func main() {
    // 1. 从 URL 裁切图片
    cropped, err := imglib.Crop(
        imglib.NewImageInputFromURL("https://example.com/photo.jpg"),
        100, 50, 400, 300,
    )
    if err != nil {
        panic(err)
    }
    imglib.SaveJPEG(cropped, "cropped.jpg", 95)

    // 2. 从 Base64 识别二维码
    text, err := imglib.ScanQRCode(
        imglib.NewImageInputFromBase64("iVBORw0KGgoAAAANSUhEUg..."),
    )
    fmt.Println("二维码内容:", text)

    // 3. 从本地文件去白边
    cleaned, err := imglib.RemoveWhiteBorder(
        imglib.NewImageInputFromFile("scan.png"),
    )
    imglib.SavePNG(cleaned, "cleaned.png")

    // 4. 从 URL 添加 Base64 水印
    result, err := imglib.ApplyWatermark(imglib.WatermarkConfig{
        SourceImage:  imglib.NewImageInputFromURL("https://example.com/book.jpg"),
        WatermarkImg: imglib.NewImageInputFromBase64("iVBORw0KGgo..."),
        Opacity:      0.8,
        Position:     "center",
    })
    b64, _ := imglib.EncodeToBase64(result, "jpeg", 95)
    fmt.Println("水印结果:", b64[:50]+"...")

    // 5. 生成二维码并保存
    qr, _ := imglib.GenerateQRCode("https://example.com", 300, 300)
    imglib.SavePNG(qr, "qrcode.png")
}

版本历史

版本 日期 说明
v1.0.0 2026-06-30 初始版本,支持三种图片输入方式,完整图片处理功能

许可证

MIT License