vimage

package module
v0.0.0-...-42f8dd5 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 26, 2025 License: Apache-2.0 Imports: 25 Imported by: 0

README

vimage

图像处理工具库,提供丰富的图像处理功能,包括调整大小、裁剪、马赛克、水印、噪点、验证码生成等。

安装

go get github.com/vogo/vimage

主要功能

  • 图像缩放 (Zoom) - 提供精确的像素级缩放
  • 图像切割 (Cut) - 从图像中切割指定区域
  • 正方形裁剪 (Square)
  • 圆形裁剪 (Circle)
  • 圆角处理 (Rounded Corner)
  • 马赛克处理 (Mosaic)
  • 水印添加 (Watermark)
  • 图像叠加 (Overlay)
  • 智能压缩 (Compress) - 基于内容复杂度分析的智能图像压缩
  • 噪点生成 (Noise)
  • 验证码生成 (Captcha)
  • 表格生成 (Table)
  • 绘制图形 (Draw) - 在图像上绘制圆形、矩形等图形

核心API用法示例

图像处理器框架
// 创建处理器链
processors := []vimage.Processor{
    // 添加多个处理器
    processor1,
    processor2,
    // ...
}

// 处理图片
result, err := vimage.ProcessImage(imgData, processors, nil)
图像缩放 (Zoom)
// 精确缩放(指定宽高)
zoomProcessor := vimage.NewZoomProcessor(width, height)

// 按比例缩放(例如:缩小到原来的50%)
zoomProcessor := vimage.NewZoomRatioProcessor(0.5)

// 按宽度缩放(高度按比例计算)
zoomProcessor := vimage.NewZoomWidthProcessor(300)

// 按高度缩放(宽度按比例计算)
zoomProcessor := vimage.NewZoomHeightProcessor(200)

// 按最大边缩放(保持比例)
zoomProcessor := vimage.NewZoomMaxProcessor(500)

// 按最小边缩放(保持比例)
zoomProcessor := vimage.NewZoomMinProcessor(300)

// 可选:设置缩放算法(默认为双线性插值)
zoomProcessor.WithScaler(draw.BiLinear) // 可选值: draw.NearestNeighbor, draw.ApproxBiLinear, draw.BiLinear, draw.CatmullRom

// 处理图像
zoomedImg, err := zoomProcessor.Process(srcImg)
图像切割 (Cut)
// 使用预定义位置切割矩形区域
// 位置可选: "center", "top", "bottom", "left", "right"
cutProcessor := vimage.NewCutProcessor(width, height, vimage.CutPositionCenter)

// 使用自定义区域切割图像
// x, y 是左上角坐标
cutProcessor := vimage.NewCutProcessorWithRegion(width, height, x, y)

// 处理图像
cutImg, err := cutProcessor.Process(srcImg)

注意: CutProcessor 是统一的切割处理器,同时支持矩形和正方形切割。

正方形裁剪
// 创建正方形裁剪处理器,自动使用较小边的尺寸
// 位置可选: "center", "top", "bottom", "left", "right"
squareProcessor := vimage.NewCutSquareProcessor("center")
squareImg, err := squareProcessor.Process(srcImg)

// 创建指定尺寸的正方形裁剪处理器
squareProcessor := vimage.NewCutSquareProcessorWithSize(100, "center")
squareImg, err := squareProcessor.Process(srcImg)

// 使用自定义坐标裁剪正方形
squareProcessor := vimage.NewCutSquareProcessorWithRegion(100, 50, 50) // size=100, x=50, y=50
squareImg, err := squareProcessor.Process(srcImg)
圆形裁剪
// 创建圆形裁剪处理器
circleProcessor := vimage.NewCutCircleProcessor()

// 处理图像(注意:输入图像必须是正方形)
circleImg, err := circleProcessor.Process(squareImg)
圆角处理
// 创建圆角处理器,指定圆角半径(像素)
roundedProcessor := vimage.NewRoundedCornerProcessor(30)

// 处理图像,将四个角切割成圆角,角外部分变为透明
roundedImg, err := roundedProcessor.Process(srcImg)
马赛克处理
// 定义马赛克区域
regions := []*vimage.MosaicRegion{
    {
        FromX: x1,
        FromY: y1,
        ToX:   x2,
        ToY:   y2,
    },
}

// 处理图像
result, err := vimage.MosaicImage(imgData, regions)

// 或使用更多选项
result, err := vimage.MosaicImageWithOptions(imgData, regions, 0.5, vimage.DirectionLeft)
水印添加
// 创建水印处理器
watermarkProcessor := &vimage.WatermarkProcessor{
    Text:     "水印文本",
    FontSize: 24,
    Color:    color.RGBA{R: 255, G: 255, B: 255, A: 255},
    Opacity:  0.7,
    Position: "bottom-right",
    Rotation: 30,
}

// 处理图像
result, err := watermarkProcessor.Process(srcImg)
图像叠加
// 创建叠加处理器
overlayProcessor := &vimage.OverlayProcessor{
    OverlayImage: overlayImg,
    Position:     "center",
    Opacity:      0.8,
    Scale:        0.5,
}

// 处理图像
result, err := overlayProcessor.Process(srcImg)
智能压缩

智能压缩功能通过分析图像内容复杂度,自动调整压缩参数,在保证图像质量的同时最大化压缩效果。

// 基础用法:使用默认策略压缩到目标文件大小
targetSize := int64(100 * 1024) // 100KB
processor := vimage.NewCompressProcessor(targetSize, vimage.CompressStrategyDefault)

// 处理图像文件字节
compressedBytes, err := processor.ProcessFile(imgBytes)

// 或处理 image.Image 对象
compressedImg, err := processor.Process(srcImg)
压缩策略

vimage 提供了6种预定义的压缩策略,适用于不同的使用场景:

// 1. 默认策略 - 适合大多数场景的通用压缩
processor := vimage.NewCompressProcessor(targetSize, vimage.CompressStrategyDefault)

// 2. 高质量策略 - 优先保证视觉质量,文件大小其次
processor := vimage.NewCompressProcessor(targetSize, vimage.CompressStrategyHighQuality)

// 3. 小文件策略 - 最小化文件大小,可接受质量损失
processor := vimage.NewCompressProcessor(targetSize, vimage.CompressStrategySmallSize)

// 4. 平衡策略 - 在质量和文件大小之间取得平衡
processor := vimage.NewCompressProcessor(targetSize, vimage.CompressStrategyBalanced)

// 5. Web 优化策略 - 针对网页加载速度优化
processor := vimage.NewCompressProcessor(targetSize, vimage.CompressStrategyWebOptimized)

// 6. 缩略图策略 - 生成高质量缩略图
processor := vimage.NewCompressProcessor(targetSize, vimage.CompressStrategyThumbnail)
自定义压缩策略
// 创建自定义压缩策略
customStrategy := &vimage.CompressionStrategy{
    Name:             "自定义策略",
    Description:      "针对特定场景优化",
    MinPixelRatio:    0.4,  // 最小像素比例
    MaxPixelRatio:    0.8,  // 最大像素比例
    PreferredRatio:   0.6,  // 首选像素比例
    QualityLevels:    []int{90, 85, 80, 75}, // 质量级别选项
    DefaultQuality:   85,   // 默认质量
    PreferredFormats: []string{"jpeg", "webp"}, // 优先格式
    DefaultFormat:    "jpeg", // 默认格式
    MaxIterations:    3,    // 最大迭代次数
    Tolerance:        0.08, // 容差范围(±8%)
}

processor := vimage.NewCompressProcessor(targetSize, customStrategy)
高级选项
// 设置输出格式
processor.SetFormat("jpeg") // 支持: "jpeg", "png", "webp"

// 切换压缩策略
processor.SetStrategy(vimage.CompressStrategyWebOptimized)

// 自定义缩放算法(可选)
processor.WithScaler(draw.BiLinear)

// 估算压缩后的文件大小(用于测试)
estimatedSize, err := processor.EstimateFileSize(srcImg)
智能压缩特性
  • 内容感知压缩: 自动分析图像的颜色方差和边缘密度,针对不同复杂度的内容调整压缩参数
  • 性能优化: 使用 Welford's online algorithm 实现单次遍历的方差计算,比传统方法快 45%
  • 类型断言优化: 对 *image.RGBA 图像使用快速路径,直接访问像素缓冲区,性能提升 3-5 倍
  • 灰度值缓存: 在边缘检测中预计算灰度值,减少 75% 的重复计算
  • 采样分析: 对大图像使用采样分析(最大 100x100),在保证准确性的同时提升性能
完整示例
import (
    "os"
    "github.com/vogo/vimage"
)

func CompressImageFile(inputPath, outputPath string, maxSize int64) error {
    // 读取原始图像
    imgBytes, err := os.ReadFile(inputPath)
    if err != nil {
        return err
    }

    // 创建压缩处理器(使用 Web 优化策略)
    processor := vimage.NewCompressProcessor(maxSize, vimage.CompressStrategyWebOptimized)

    // 设置输出格式为 JPEG
    processor.SetFormat("jpeg")

    // 压缩图像
    compressedBytes, err := processor.ProcessFile(imgBytes)
    if err != nil {
        return err
    }

    // 保存压缩后的图像
    return os.WriteFile(outputPath, compressedBytes, 0644)
}

// 使用示例
err := CompressImageFile("/path/to/large.jpg", "/path/to/compressed.jpg", 100*1024)
验证码生成
// 使用默认配置生成验证码
captchaText := "1234"
captchaImg, err := vimage.GenerateCaptcha(captchaText, nil)

// 使用自定义配置
config := &vimage.CaptchaConfig{
    Width:      160,
    Height:     60,
    NoiseLines: 8,
    NoiseDots:  100,
    BgColor:    color.RGBA{R: 240, G: 240, B: 240, A: 255},
    TextColor:  color.RGBA{R: 0, G: 0, B: 200, A: 255},
}
captchaImg, err := vimage.GenerateCaptcha(captchaText, config)
绘制图形
绘制圆形
// 在图像上绘制圆形边框
circleProcessor := vimage.NewDrawCircleProcessor(
    centerX,  // 圆心X坐标
    centerY,  // 圆心Y坐标
    radius,   // 半径
    color.RGBA{R: 255, G: 0, B: 0, A: 255}, // 颜色
    false,    // false = 只绘制边框,true = 填充圆形
)
result, err := circleProcessor.Process(srcImg)

// 绘制填充的圆形
filledCircleProcessor := vimage.NewDrawCircleProcessor(
    100, 100, 50,
    color.RGBA{R: 0, G: 255, B: 0, A: 255},
    true, // 填充圆形
)
result, err := filledCircleProcessor.Process(srcImg)
绘制矩形
// 在图像上绘制矩形边框
rect := image.Rect(x1, y1, x2, y2) // 定义矩形区域
rectProcessor := vimage.NewDrawRectProcessor(
    rect,
    color.RGBA{R: 0, G: 0, B: 255, A: 255}, // 颜色
    false, // false = 只绘制边框,true = 填充矩形
)
result, err := rectProcessor.Process(srcImg)

// 绘制填充的矩形
filledRectProcessor := vimage.NewDrawRectProcessor(
    image.Rect(20, 20, 80, 80),
    color.RGBA{R: 255, G: 255, B: 0, A: 255},
    true, // 填充矩形
)
result, err := filledRectProcessor.Process(srcImg)

// 绘制带有不同边框和填充颜色的矩形
bicolorRectProcessor := vimage.NewDrawRectProcessorWithFillColor(
    image.Rect(20, 20, 80, 80),
    color.RGBA{R: 0, G: 0, B: 255, A: 255},   // 蓝色边框
    color.RGBA{R: 255, G: 255, B: 0, A: 255}, // 黄色填充
)
result, err := bicolorRectProcessor.Process(srcImg)
组合使用示例
// 将图片裁剪为正方形并缩放
func SquareAndZoomImage(imgData []byte, position string, size int) ([]byte, error) {
    // 创建处理器链
    processors := []vimage.Processor{
        // 先裁剪为正方形
        vimage.NewCutSquareProcessor(position),
        // 再缩放
        vimage.NewZoomProcessor(size, size),
    }

    // 处理图片
    return vimage.ProcessImage(imgData, processors, nil)
}

// 将图片裁剪为正方形并应用圆形裁剪
func SquareAndCircleImage(imgData []byte, position string) ([]byte, error) {
    // 创建处理器链
    processors := []vimage.Processor{
        // 先裁剪为正方形
        vimage.NewCutSquareProcessor(position),
        // 再应用圆形裁剪
        vimage.NewCutCircleProcessor(),
    }

    // 处理图片
    return vimage.ProcessImage(imgData, processors, nil)
}

// 按比例缩放图片并添加水印
func ZoomRatioAndWatermark(imgData []byte, ratio float64, watermarkText string) ([]byte, error) {
    // 创建处理器链
    processors := []vimage.Processor{
        // 先按比例缩放
        vimage.NewZoomRatioProcessor(ratio), // 使用新的缩放处理器
        // 再添加水印
        &vimage.WatermarkProcessor{
            Text:     watermarkText,
            FontSize: 24,
            Color:    color.White,
            Opacity:  0.7,
            Position: "bottom-right",
        },
    }

    // 处理图片
    return vimage.ProcessImage(imgData, processors, nil)
}

// 按最大边切割图片并裁剪为圆形
func CutAndCircle(imgData []byte, maxSize int) ([]byte, error) {
    // 创建处理器链
    processors := []vimage.Processor{
        // 先裁剪为正方形
        vimage.NewCutProcessor(maxSize, maxSize, vimage.CutPositionCenter), // 使用新的切割处理器
        // 最后裁剪为圆形
        vimage.NewCutCircleProcessor(),
    }

    // 处理图片
    return vimage.ProcessImage(imgData, processors, nil)
}

// 先切割指定区域再缩放
func CutAndZoom(imgData []byte, cutWidth, cutHeight, x, y int, zoomRatio float64) ([]byte, error) {
    // 创建处理器链
    processors := []vimage.Processor{
        // 先切割指定区域
        vimage.NewCutProcessorWithRegion(cutWidth, cutHeight, x, y),
        // 再按比例缩放
        vimage.NewZoomRatioProcessor(zoomRatio),
    }

    // 处理图片
    return vimage.ProcessImage(imgData, processors, nil)
}

// 缩放图片并添加圆角效果
func ZoomAndRoundedCorner(imgData []byte, width, height, cornerRadius int) ([]byte, error) {
    // 创建处理器链
    processors := []vimage.Processor{
        // 先缩放到指定尺寸
        vimage.NewZoomProcessor(width, height),
        // 再添加圆角效果
        vimage.NewRoundedCornerProcessor(cornerRadius),
    }

    // 处理图片
    return vimage.ProcessImage(imgData, processors, nil)
}

// 压缩图片到指定大小并添加水印
func CompressAndWatermark(imgData []byte, targetSize int64, watermarkText string) ([]byte, error) {
    // 先使用智能压缩处理
    processor := vimage.NewCompressProcessor(targetSize, vimage.CompressStrategyBalanced)
    compressedImg, err := processor.Process(srcImg)
    if err != nil {
        return nil, err
    }

    // 再添加水印
    watermarkProcessor := &vimage.WatermarkProcessor{
        Text:     watermarkText,
        FontSize: 20,
        Color:    color.White,
        Opacity:  0.6,
        Position: "bottom-right",
    }

    return watermarkProcessor.Process(compressedImg)
}

贡献代码

欢迎贡献代码,请遵循以下步骤:

  1. Fork 本仓库
  2. 创建你的特性分支 (git checkout -b feature/amazing-feature)
  3. 提交你的更改 (git commit -m 'Add some amazing feature')
  4. 推送到分支 (git push origin feature/amazing-feature)
  5. 创建一个 Pull Request
开发环境设置
# 克隆仓库
git clone https://github.com/yourusername/vimage.git
cd vimage

# 安装依赖
go mod download

# 安装开发工具
go install github.com/vogo/license-header-checker/cmd/license-header-checker@latest
go install golang.org/x/tools/cmd/goimports@latest
go install mvdan.cc/gofumpt@latest
go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest
代码规范
  • 所有代码必须通过 golangci-lint 检查
  • 所有新文件必须包含 Apache License 2.0 许可证头
  • 所有函数和类型必须有适当的文档注释
  • 测试覆盖率应尽可能高
构建和测试
# 格式化代码
make format

# 检查许可证头
make license-check

# 运行代码检查
make lint

# 运行测试
make test

# 完整构建流程(包括上述所有步骤)
make build

许可证

Apache License 2.0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	CompressStrategyDefault = &CompressionStrategy{
		Name:             "Default Strategy",
		Description:      "General compression suitable for most scenarios",
		MinPixelRatio:    0.3,
		MaxPixelRatio:    1.0,
		PreferredRatio:   0.7,
		QualityLevels:    []int{95, 90, 85, 80, 75},
		DefaultQuality:   85,
		PreferredFormats: []string{"jpeg", "webp", "png"},
		DefaultFormat:    "jpeg",
		MaxIterations:    3,
		Tolerance:        0.1,
	}

	CompressStrategyHighQuality = &CompressionStrategy{
		Name:             "High Quality",
		Description:      "Prioritize visual quality, file size is secondary",
		MinPixelRatio:    0.8,
		MaxPixelRatio:    1.0,
		PreferredRatio:   0.9,
		QualityLevels:    []int{98, 95, 92, 90},
		DefaultQuality:   95,
		PreferredFormats: []string{"png", "webp", "jpeg"},
		DefaultFormat:    "png",
		MaxIterations:    2,
		Tolerance:        0.2,
	}

	CompressStrategySmallSize = &CompressionStrategy{
		Name:             "Small Size",
		Description:      "Minimize file size, quality loss is acceptable",
		MinPixelRatio:    0.2,
		MaxPixelRatio:    0.6,
		PreferredRatio:   0.4,
		QualityLevels:    []int{85, 75, 65, 60, 55},
		DefaultQuality:   70,
		PreferredFormats: []string{"webp", "jpeg"},
		DefaultFormat:    "webp",
		MaxIterations:    5,
		Tolerance:        0.05,
	}

	CompressStrategyBalanced = &CompressionStrategy{
		Name:             "Balanced Strategy",
		Description:      "Balance between quality and file size",
		MinPixelRatio:    0.4,
		MaxPixelRatio:    0.8,
		PreferredRatio:   0.6,
		QualityLevels:    []int{90, 85, 80, 75, 70},
		DefaultQuality:   80,
		PreferredFormats: []string{"jpeg", "webp"},
		DefaultFormat:    "jpeg",
		MaxIterations:    3,
		Tolerance:        0.08,
	}

	CompressStrategyWebOptimized = &CompressionStrategy{
		Name:             "Web Optimized",
		Description:      "Optimized for web loading speed",
		MinPixelRatio:    0.5,
		MaxPixelRatio:    0.9,
		PreferredRatio:   0.7,
		QualityLevels:    []int{85, 80, 75, 70},
		DefaultQuality:   80,
		PreferredFormats: []string{"webp", "jpeg"},
		DefaultFormat:    "webp",
		MaxIterations:    2,
		Tolerance:        0.1,
	}

	CompressStrategyThumbnail = &CompressionStrategy{
		Name:             "Thumbnail Strategy",
		Description:      "Generate high quality thumbnails",
		MinPixelRatio:    0.1,
		MaxPixelRatio:    0.3,
		PreferredRatio:   0.2,
		QualityLevels:    []int{90, 85, 80},
		DefaultQuality:   85,
		PreferredFormats: []string{"jpeg", "webp"},
		DefaultFormat:    "jpeg",
		MaxIterations:    1,
		Tolerance:        0.15,
	}
)

Predefined strategies

View Source
var DefaultCaptchaConfig = &CaptchaConfig{
	Width:            120,
	Height:           40,
	BgColor:          color.RGBA{R: 255, G: 255, B: 255, A: 255},
	TextColor:        color.RGBA{R: 0, G: 0, B: 0, A: 255},
	NoiseLines:       5,
	NoiseDots:        50,
	Face:             basicfont.Face7x13,
	CharSpacing:      18,
	CharWidth:        16,
	CharYOffsetRange: 8,
	CharXOffsetRange: 6,
}

DefaultCaptchaConfig 默认验证码配置

View Source
var DefaultProcessorOptions = ProcessorOptions{
	Quality: 90,
}

DefaultProcessorOptions 默认处理器选项

View Source
var DefaultTextOptions = TextOptions{
	Font:  basicfont.Face7x13,
	Color: color.Black,

	MaxWidth:    0,
	LineSpacing: 1.5,
	Align:       gg.AlignLeft,
	CharWrap:    false,
}

DefaultTextOptions 默认文本选项

Functions

func Circle

func Circle(img image.Image) (image.Image, error)

Circle crops the image into a circle, making pixels outside the circle transparent If the image is not square, returns an error

func ContextProcess

func ContextProcess(img image.Image, processors []ContextProcessor) (image.Image, error)

ContextProcess 上下文处理

func DrawLine

func DrawLine(img *image.RGBA, x0, y0, x1, y1 int, c color.RGBA)

DrawLine draws a line (simple Bresenham algorithm implementation)

func GenCaptchaImage

func GenCaptchaImage(captcha string) (*bytes.Buffer, error)

GenCaptchaImage 生成验证码图片 captcha: 验证码文本 返回: 图片字节缓冲区和错误信息

func GenCaptchaImageWithConfig

func GenCaptchaImageWithConfig(captcha string, config *CaptchaConfig) (*bytes.Buffer, error)

GenCaptchaImageWithConfig 使用自定义配置生成验证码图片

func GenMultipleColumnsTableImage

func GenMultipleColumnsTableImage(font *truetype.Font, headers []string, data [][]string) (*bytes.Buffer, error)

GenMultipleColumnsTableImage 根据数据生成列式表格图片 headers 为标题,作为最左侧的一列显示 data 为数据内容,每一条数据作为一列展示 返回PNG格式的图片数据

func GenMultipleRowsTableImage

func GenMultipleRowsTableImage(font *truetype.Font, headers []string, data [][]string, widths []float64) (*bytes.Buffer, error)

GenMultipleRowsTableImage 根据数据生成表格图片 headers 为标题, data 为数据内容 widths 为每列宽度,如果为空则使用默认宽度 返回PNG格式的图片数据

func GetDefaultFont

func GetDefaultFont() (*truetype.Font, error)

func LoadFont

func LoadFont(font **truetype.Font, localPath, downloadUrl string) *truetype.Font

func LoadHarmonyOSSansSCBlack

func LoadHarmonyOSSansSCBlack() *truetype.Font

func LoadNotoSansSCVariableFontWght

func LoadNotoSansSCVariableFontWght() *truetype.Font

func MosaicImage

func MosaicImage(img []byte, regions []*MosaicRegion) ([]byte, error)

MosaicImage 对图片指定区域添加马赛克效果 (向后兼容版本) img: 原始图片字节数据 regions: 需要添加马赛克的区域列表 返回: 处理后的图片字节数据和错误信息

func MosaicImageSingle

func MosaicImageSingle(img []byte, fromX, fromY, toX, toY int) ([]byte, error)

MosaicImageSingle 对图片单个区域添加马赛克效果 (向后兼容版本)

func MosaicImageSingleWithOptions

func MosaicImageSingleWithOptions(img []byte, fromX, fromY, toX, toY int, mosaicPercent float32, startDirection Direction) ([]byte, error)

MosaicImageSingleWithOptions 对图片单个区域添加马赛克效果,支持指定百分比和方向

func MosaicImageWithOptions

func MosaicImageWithOptions(img []byte, regions []*MosaicRegion, mosaicPercent float32, startDirection Direction) ([]byte, error)

MosaicImageWithOptions 对图片指定区域添加马赛克效果,支持指定百分比和方向 img: 原始图片字节数据 regions: 需要添加马赛克的区域列表 mosaicPercent: 马赛克区域百分比,范围0-1,表示要处理的区域比例 startDirection: 开始马赛克的方向(left, right, top, bottom) 返回: 处理后的图片字节数据和错误信息

func Process

func Process(img image.Image, processors []Processor) (image.Image, error)

Process 循环处理图片

func ProcessImage

func ProcessImage(imgData []byte, processors []Processor, options *ProcessorOptions) ([]byte, error)

ProcessImage 使用处理器链处理图片 imgData: 原始图片字节数据 processors: 处理器链 options: 处理选项 返回: 处理后的图片字节数据和错误信息

func SetDefaultFont

func SetDefaultFont(font *truetype.Font)

Types

type CaptchaConfig

type CaptchaConfig struct {
	Width            int        // 图片宽度
	Height           int        // 图片高度
	BgColor          color.RGBA // 背景颜色
	TextColor        color.RGBA // 文字颜色
	NoiseLines       int        // 干扰线数量
	NoiseDots        int        // 干扰点数量
	Face             font.Face  // 字体
	CharSpacing      int        // 字符间距
	CharWidth        int        // 字符宽度
	CharYOffsetRange int        // 垂直随机偏移范围
	CharXOffsetRange int        // 水平随机偏移范围
}

CaptchaConfig 验证码配置

type CompressProcessor

type CompressProcessor struct {
	// Basic configuration
	TargetFileSize int64
	Strategy       *CompressionStrategy
	Format         string
	// contains filtered or unexported fields
}

CompressProcessor smart compression processor

func NewCompressProcessor

func NewCompressProcessor(targetFileSize int64, strategy *CompressionStrategy) *CompressProcessor

NewCompressProcessor creates a new compression processor

func (*CompressProcessor) EstimateFileSize

func (p *CompressProcessor) EstimateFileSize(img image.Image) (int64, error)

EstimateFileSize estimates compressed file size (for testing)

func (*CompressProcessor) GetStrategyName

func (p *CompressProcessor) GetStrategyName() string

GetStrategyName gets current strategy name

func (*CompressProcessor) Process

func (p *CompressProcessor) Process(img image.Image) (image.Image, error)

Process implements the Processor interface

func (*CompressProcessor) ProcessFile

func (p *CompressProcessor) ProcessFile(input []byte) ([]byte, error)

ProcessFile processes image file bytes

func (*CompressProcessor) SetFormat

func (p *CompressProcessor) SetFormat(format string) error

SetFormat sets the output format

func (*CompressProcessor) SetStrategy

func (p *CompressProcessor) SetStrategy(strategy *CompressionStrategy)

SetStrategy sets the compression strategy

func (*CompressProcessor) WithScaler

func (p *CompressProcessor) WithScaler(scaler draw.Scaler) *CompressProcessor

WithScaler sets the scaling algorithm

type CompressionStrategy

type CompressionStrategy struct {
	Name             string   // Strategy name
	Description      string   // Strategy description
	MinPixelRatio    float64  // Minimum pixel ratio
	MaxPixelRatio    float64  // Maximum pixel ratio
	PreferredRatio   float64  // Preferred pixel ratio
	QualityLevels    []int    // Quality levels options
	DefaultQuality   int      // Default quality
	PreferredFormats []string // Preferred formats
	DefaultFormat    string   // Default format
	MaxIterations    int      // Maximum iterations
	Tolerance        float64  // Tolerance range
}

CompressionStrategy configures the compression strategy

type ContextProcessor

type ContextProcessor interface {
	ContextProcess(ctx *ImageProcessContext) error
}

type CutCircleProcessor

type CutCircleProcessor struct{}

CutCircleProcessor implements the Processor interface for circular image cropping

func NewCutCircleProcessor

func NewCutCircleProcessor() *CutCircleProcessor

func (*CutCircleProcessor) Process

func (p *CutCircleProcessor) Process(img image.Image) (image.Image, error)

Process cuts the image into a circle.

type CutPosition

type CutPosition string

CutPosition 定义切割位置

const (
	// CutPositionCenter 居中切割
	CutPositionCenter CutPosition = "center"
	// CutPositionTop 从顶部切割
	CutPositionTop CutPosition = "top"
	// CutPositionBottom 从底部切割
	CutPositionBottom CutPosition = "bottom"
	// CutPositionLeft 从左侧切割
	CutPositionLeft CutPosition = "left"
	// CutPositionRight 从右侧切割
	CutPositionRight CutPosition = "right"
)

type CutProcessor

type CutProcessor struct {
	// 目标宽度和高度(0表示自动检测)
	Width  int
	Height int
	// 切割位置
	Position CutPosition
	// 自定义切割区域(如果指定了,则忽略Position)
	X int // 左上角X坐标
	Y int // 左上角Y坐标
	// 是否使用自定义区域
	UseCustomRegion bool
	// 是否为正方形模式(自动使用较小边)
	SquareMode bool
}

CutProcessor 图像切割处理器 从原始图像中切割出指定区域(支持矩形和正方形)

func NewCutProcessor

func NewCutProcessor(width, height int, position CutPosition) *CutProcessor

NewCutProcessor 创建新的矩形切割处理器(使用预定义位置)

func NewCutProcessorWithRegion

func NewCutProcessorWithRegion(width, height, x, y int) *CutProcessor

NewCutProcessorWithRegion 创建新的切割处理器(使用自定义区域)

func NewCutSquareProcessor

func NewCutSquareProcessor(position string) *CutProcessor

NewCutSquareProcessor 创建正方形切割处理器(自动使用较小边)

func NewCutSquareProcessorWithRegion

func NewCutSquareProcessorWithRegion(size, x, y int) *CutProcessor

NewCutSquareProcessorWithRegion 创建使用自定义坐标的正方形切割处理器

func NewCutSquareProcessorWithSize

func NewCutSquareProcessorWithSize(size int, position string) *CutProcessor

NewCutSquareProcessorWithSize 创建指定尺寸的正方形切割处理器

func NewSquareCutProcessor

func NewSquareCutProcessor(size int, position CutPosition) *CutProcessor

NewSquareCutProcessor 创建正方形切割处理器

func (*CutProcessor) Process

func (p *CutProcessor) Process(img image.Image) (image.Image, error)

Process 实现Processor接口

type CutSquareProcessor

type CutSquareProcessor = CutProcessor

Type alias for backward compatibility

type Direction

type Direction string

Direction 表示马赛克开始的方向

const (
	DirectionLeft   Direction = "left"   // 从左侧开始
	DirectionRight  Direction = "right"  // 从右侧开始
	DirectionTop    Direction = "top"    // 从顶部开始
	DirectionBottom Direction = "bottom" // 从底部开始
)

type DrawCircleProcessor

type DrawCircleProcessor struct {
	X, Y, Radius int
	Color        color.Color
	Fill         bool // If true, fill the circle with the same color as the border
}

DrawCircleProcessor draws a circle on the image using fogleman/gg.

func NewDrawCircleProcessor

func NewDrawCircleProcessor(x, y, radius int, c color.Color, fill bool) *DrawCircleProcessor

NewDrawCircleProcessor creates a new DrawCircleProcessor. If fill is true, the circle will be filled with the same color as the border.

func (*DrawCircleProcessor) ContextProcess

func (p *DrawCircleProcessor) ContextProcess(ctx *ImageProcessContext) error

ContextProcess draws a circle on the image using the gg.Context.

func (*DrawCircleProcessor) Process

func (p *DrawCircleProcessor) Process(img image.Image) (image.Image, error)

Process implements the Processor interface for backward compatibility.

type DrawRectProcessor

type DrawRectProcessor struct {
	Rect      image.Rectangle
	Color     color.Color  // Border/stroke color
	FillColor *color.Color // Optional fill color (nil = no fill, use Color for both)
	Fill      bool         // If true, fill the rectangle
}

DrawRectProcessor draws a rectangle on the image using fogleman/gg.

func NewDrawRectProcessor

func NewDrawRectProcessor(rect image.Rectangle, c color.Color, fill bool) *DrawRectProcessor

NewDrawRectProcessor creates a new DrawRectProcessor. If fill is true, the rectangle will be filled with the same color as the border.

func NewDrawRectProcessorWithFillColor

func NewDrawRectProcessorWithFillColor(rect image.Rectangle, borderColor, fillColor color.Color) *DrawRectProcessor

NewDrawRectProcessorWithFillColor creates a DrawRectProcessor with separate border and fill colors. The rectangle will be filled with fillColor and stroked with borderColor.

func (*DrawRectProcessor) ContextProcess

func (p *DrawRectProcessor) ContextProcess(ctx *ImageProcessContext) error

ContextProcess draws a rectangle on the image using the gg.Context.

func (*DrawRectProcessor) Process

func (p *DrawRectProcessor) Process(img image.Image) (image.Image, error)

Process implements the Processor interface for backward compatibility.

type EmptyProcessor

type EmptyProcessor struct{}

func (*EmptyProcessor) Process

func (p *EmptyProcessor) Process(img image.Image) (image.Image, error)

type ImageProcessContext

type ImageProcessContext struct {
	Width  int
	Height int
	// contains filtered or unexported fields
}

func NewImageProcessContext

func NewImageProcessContext(img image.Image) *ImageProcessContext

func (*ImageProcessContext) DC

func (ctx *ImageProcessContext) DC() *gg.Context

type MosaicProcessor

type MosaicProcessor struct {
	Regions        []*MosaicRegion // 马赛克区域
	MosaicPercent  float32         // 马赛克区域百分比 (0-1)
	StartDirection Direction       // 开始方向
}

MosaicProcessor 马赛克处理器

func NewMosaicProcessor

func NewMosaicProcessor(regions []*MosaicRegion, mosaicPercent float32, startDirection Direction) *MosaicProcessor

NewMosaicProcessor 创建新的马赛克处理器

func (*MosaicProcessor) Process

func (p *MosaicProcessor) Process(img image.Image) (image.Image, error)

Process 实现Processor接口

type MosaicRegion

type MosaicRegion struct {
	FromX int // 区域左上角X坐标
	FromY int // 区域左上角Y坐标
	ToX   int // 区域右下角X坐标
	ToY   int // 区域右下角Y坐标
}

MosaicRegion 表示一个需要添加马赛克的区域

type NoiseProcessor

type NoiseProcessor struct {
	NoiseLines int        // 干扰线数量
	NoiseDots  int        // 干扰点数量
	LineColor  color.RGBA // 线条颜色
	DotColor   color.RGBA // 点颜色
}

NoiseProcessor 噪点处理器

func NewNoiseProcessor

func NewNoiseProcessor(noiseLines, noiseDots int, lineColor, dotColor color.RGBA) *NoiseProcessor

NewNoiseProcessor 创建新的噪点处理器

func (*NoiseProcessor) Process

func (p *NoiseProcessor) Process(img image.Image) (image.Image, error)

Process 实现Processor接口

type OverlayProcessor

type OverlayProcessor struct {
	OverlayImage image.Image // 叠加图像
	X            int         // 叠加位置X坐标
	Y            int         // 叠加位置Y坐标
	Opacity      float64     // 不透明度 (0-1)
	Scale        float64     // 缩放比例 (0-n)
	Position     string      // 预设位置 ("center", "top-left", "bottom-right" 等)
}

OverlayProcessor 图层叠加处理器

func NewOverlayProcessor

func NewOverlayProcessor(overlayImage image.Image, x, y int, opacity, scale float64) *OverlayProcessor

NewOverlayProcessor 创建新的图层叠加处理器

func NewOverlayProcessorWithPosition

func NewOverlayProcessorWithPosition(overlayImage image.Image, position string, opacity, scale float64) *OverlayProcessor

NewOverlayProcessorWithPosition 创建新的图层叠加处理器(使用预设位置)

func (*OverlayProcessor) ContextProcess

func (p *OverlayProcessor) ContextProcess(ctx *ImageProcessContext) error

ContextProcess 实现 ContextProcessor 接口

func (*OverlayProcessor) Process

func (p *OverlayProcessor) Process(img image.Image) (image.Image, error)

Process 实现Processor接口

type Processor

type Processor interface {
	Process(img image.Image) (image.Image, error)
}

Processor 定义新的处理器接口,支持选项参数

type ProcessorOptions

type ProcessorOptions struct {
	// 可以添加通用选项
	Quality int // JPEG压缩质量 (1-100)
}

ProcessorOptions 处理器选项

type RotateProcessor

type RotateProcessor struct {
	// 旋转角度(度数,顺时针方向)
	Angle float64
	// 背景颜色(旋转后可能出现的空白区域填充颜色)
	Background color.Color
	// 是否保持原始尺寸
	KeepSize bool
}

RotateProcessor 图像旋转处理器 对图像进行旋转处理,保持原有清晰度

func NewRotateProcessor

func NewRotateProcessor(angle float64) *RotateProcessor

NewRotateProcessor 创建新的旋转处理器

func (*RotateProcessor) Process

func (p *RotateProcessor) Process(img image.Image) (image.Image, error)

Process 实现Processor接口

func (*RotateProcessor) WithBackground

func (p *RotateProcessor) WithBackground(background color.Color) *RotateProcessor

WithBackground 设置背景颜色

func (*RotateProcessor) WithKeepSize

func (p *RotateProcessor) WithKeepSize(keepSize bool) *RotateProcessor

WithKeepSize 设置是否保持原始尺寸

type RoundedCornerProcessor

type RoundedCornerProcessor struct {
	// 圆角半径,单位为像素
	Radius int
}

RoundedCornerProcessor 实现圆角处理器 将图片的四个角切割成圆角,角的大小可以通过半径参数控制

func NewRoundedCornerProcessor

func NewRoundedCornerProcessor(radius int) *RoundedCornerProcessor

NewRoundedCornerProcessor 创建新的圆角处理器 radius: 圆角半径,单位为像素

func (*RoundedCornerProcessor) Process

func (p *RoundedCornerProcessor) Process(img image.Image) (image.Image, error)

Process 实现Processor接口 将图片的四个角切割成圆角,角外部分变为透明

type TextOptions

type TextOptions struct {
	Text     string
	Position image.Point
	Font     font.Face
	Color    color.Color
	// 旋转角度(度数,顺时针方向)
	Angle float64
	// 最大文本宽度(像素)。>0 时按宽度自动换行
	MaxWidth float64
	// 行距倍数(相对于字体行高),用于换行模式
	LineSpacing float64
	// 文本对齐方式(左/中/右),用于换行模式
	Align gg.Align
	// 使用按字符换行(适合中文、日文等无空格语言)
	CharWrap bool
}

TextOptions 定义文本处理器的选项

type TextProcessor

type TextProcessor struct {
	Options TextOptions
}

TextProcessor 实现文本处理器

func NewTextProcessor

func NewTextProcessor(opts TextOptions) *TextProcessor

NewTextProcessor 创建新的文本处理器

func (*TextProcessor) ContextProcess

func (p *TextProcessor) ContextProcess(ctx *ImageProcessContext) error

ContextProcess 实现 ContextProcessor 接口

func (*TextProcessor) Process

func (p *TextProcessor) Process(img image.Image) (image.Image, error)

Process 实现Processor接口

func (*TextProcessor) WithAngle

func (p *TextProcessor) WithAngle(angle float64) *TextProcessor

WithAngle 设置文本旋转角度

type WatermarkProcessor

type WatermarkProcessor struct {
	Text     string     // 水印文本
	FontSize float64    // 字体大小
	Color    color.RGBA // 水印颜色
	Opacity  float64    // 不透明度 (0-1)
	Position string     // 位置 ("center", "top-left", "bottom-right" 等)
	Rotation float64    // 旋转角度
	FontFace font.Face  // 字体
}

WatermarkProcessor 水印处理器

func NewWatermarkProcessor

func NewWatermarkProcessor(text string, fontSize float64, color color.RGBA, opacity float64, position string, rotation float64) *WatermarkProcessor

NewWatermarkProcessor 创建新的水印处理器

func (*WatermarkProcessor) ContextProcess

func (p *WatermarkProcessor) ContextProcess(ctx *ImageProcessContext) error

ContextProcess 实现 ContextProcessor 接口

func (*WatermarkProcessor) Process

func (p *WatermarkProcessor) Process(img image.Image) (image.Image, error)

Process 实现Processor接口

type ZoomMode

type ZoomMode int

ZoomMode 定义缩放模式

const (
	// ZoomModeExact 精确缩放到指定尺寸
	ZoomModeExact ZoomMode = iota
	// ZoomModeRatio 按比例缩放
	ZoomModeRatio
	// ZoomModeWidth 按宽度缩放,高度等比例调整
	ZoomModeWidth
	// ZoomModeHeight 按高度缩放,宽度等比例调整
	ZoomModeHeight
	// ZoomModeMax 按最大边缩放,保持比例
	ZoomModeMax
	// ZoomModeMin 按最小边缩放,保持比例
	ZoomModeMin
)

type ZoomProcessor

type ZoomProcessor struct {
	// 目标宽度和高度
	Width  int
	Height int
	// 缩放比例 (0.0-1.0表示缩小,>1.0表示放大)
	Ratio float64
	// 缩放模式
	Mode ZoomMode
	// 缩放算法
	Scaler draw.Scaler
}

ZoomProcessor 图像缩放处理器 对图像进行像素级缩放,不进行裁剪

func NewZoomHeightProcessor

func NewZoomHeightProcessor(height int) *ZoomProcessor

NewZoomHeightProcessor 创建新的按高度缩放处理器

func NewZoomMaxProcessor

func NewZoomMaxProcessor(size int) *ZoomProcessor

NewZoomMaxProcessor 创建新的按最大边缩放处理器

func NewZoomMinProcessor

func NewZoomMinProcessor(size int) *ZoomProcessor

NewZoomMinProcessor 创建新的按最小边缩放处理器

func NewZoomProcessor

func NewZoomProcessor(width, height int) *ZoomProcessor

NewZoomProcessor 创建新的精确缩放处理器

func NewZoomRatioProcessor

func NewZoomRatioProcessor(ratio float64) *ZoomProcessor

NewZoomRatioProcessor 创建新的按比例缩放处理器

func NewZoomWidthProcessor

func NewZoomWidthProcessor(width int) *ZoomProcessor

NewZoomWidthProcessor 创建新的按宽度缩放处理器

func (*ZoomProcessor) Process

func (p *ZoomProcessor) Process(img image.Image) (image.Image, error)

Process 实现Processor接口

func (*ZoomProcessor) WithScaler

func (p *ZoomProcessor) WithScaler(scaler draw.Scaler) *ZoomProcessor

WithScaler 设置缩放算法

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL