daShangDao_kfzgw-info/md/image.md
2025-12-22 19:09:56 +08:00

200 lines
5.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# image.dll 使用教程
## 1.创建DLL工具实例
### 加载DLL文件
```gotemplate
// ImageDLL 图片处理DLL结构
type imageDLL struct {
dll *syscall.DLL
processImage *syscall.Proc
freeCString *syscall.Proc
}
// 初始化imageDLL
func InitImageDll() (*imageDLL, error) {
dllPath := filepath.Join("image", "dll", "image.dll")
if _, err := os.Stat(dllPath); os.IsNotExist(err) {
return nil, fmt.Errorf("image DLL 不存在: %s", dllPath)
}
if dll, err := syscall.LoadDLL(dllPath); err != nil {
return nil, fmt.Errorf("加载image DLL 失败: %s", err)
} else {
return &imageDLL{
dll: dll,
processImage: dll.MustFindProc("ProcessImage"),
freeCString: dll.MustFindProc("FreeCString"),
}, nil
}
}
dll,err := InitImageDll()
```
### 获取C字符串
```gotemplate
// cStr 将 C 字符串指针转换为 Go 字符串
func cStr(ptr uintptr) string {
if ptr == 0 {
return ""
}
var b []byte
for {
c := *(*byte)(unsafe.Pointer(ptr))
if c == 0 {
break
}
b = append(b, c)
ptr++
}
return string(b)
}
```
## 2.使用dll函数示例
```gotemplate
func (m *imageDLL) ProcessImage(config *Config) error {
marshal, err := json.Marshal(config)
if err != nil {
return fmt.Errorf("json转换失败: %s", err)
}
fromString, _ := syscall.BytePtrFromString(string(marshal))
info, _, _ := m.processImage.Call(uintptr(unsafe.Pointer(fromString)))
cStr(info)
return nil
}
```
# 接口详情
## 1.检测图片纯白占比--ProcessImage
### 请求信息
```gotemplate
dll.ProcessImage(jsonConfig)
```
### 请求参数
| 参数名 | 类型 | 必填 | 说明 |
|--|--|--|------------|
| jsonConfig | string | 是 | json字符串 |
### json字符串结构体
```gotemplate
// Config 配置结构体
type Config struct {
OutputDir string // 输出目录路径
FileName string // 文件名
MatchDir string // 满足条件的图片目录名
UnmatchDir string // 不满足条件的图片目录名
EqualHeightDir string // 等高的图片目录名
WhiteDir string // 白色底图的图片目录名
WhiteBorderPngDir string // 去白边转PNG的图片目录名
MinWhitePct float64 // 纯白占比下限0-1
MaxWhitePct float64 // 纯白占比上限0-1
Extensions []string // 支持的图片扩展名
}
```
### 响应示例
```
string
```
## 2.根据原始图片生成新的白底图片--CreateWhiteBottomCenteredImage
### 请求信息
```gotemplate
dll.CreateWhiteBottomCenteredImage(jsonConfig,width,height)
```
### 请求参数
| 参数名 | 类型 | 必填 | 说明 |
|--|--------|--|---------|
| jsonConfig | string | 是 | json字符串 |
| width | int | 是 | 宽度 |
| height | int | 是 | 高度 |
### json字符串结构体
```gotemplate
// Config 配置结构体
type Config struct {
OutputDir string // 输出目录路径
FileName string // 文件名
MatchDir string // 满足条件的图片目录名
UnmatchDir string // 不满足条件的图片目录名
EqualHeightDir string // 等高的图片目录名
WhiteDir string // 白色底图的图片目录名
WhiteBorderPngDir string // 去白边转PNG的图片目录名
MinWhitePct float64 // 纯白占比下限0-1
MaxWhitePct float64 // 纯白占比上限0-1
Extensions []string // 支持的图片扩展名
}
```
### 响应示例
```
文件名称:string
```
## 3.根据高度生成等比例图片--ResizeToHeightQuality
### 请求信息
```gotemplate
dll.ResizeToHeightQuality(jsonConfig,targetHeight)
```
### 请求参数
| 参数名 | 类型 | 必填 | 说明 |
|--|--------|--|---------|
| jsonConfig | string | 是 | json字符串 |
| targetHeight | int | 是 | 等比例高度 |
### json字符串结构体
```gotemplate
// Config 配置结构体
type Config struct {
OutputDir string // 输出目录路径
FileName string // 文件名
MatchDir string // 满足条件的图片目录名
UnmatchDir string // 不满足条件的图片目录名
EqualHeightDir string // 等高的图片目录名
WhiteDir string // 白色底图的图片目录名
WhiteBorderPngDir string // 去白边转PNG的图片目录名
MinWhitePct float64 // 纯白占比下限0-1
MaxWhitePct float64 // 纯白占比上限0-1
Extensions []string // 支持的图片扩展名
}
```
### 响应示例
```
文件名称:string
```
## 4.去掉白边并转PNG图片工具--RemoveWhiteBorderAndPNG
### 请求信息
```gotemplate
dll.RemoveWhiteBorderAndPNG(jsonConfig)
```
### 请求参数
| 参数名 | 类型 | 必填 | 说明 |
|--|--------|--|---------|
| jsonConfig | string | 是 | json字符串 |
### json字符串结构体
```gotemplate
// Config 配置结构体
type Config struct {
OutputDir string // 输出目录路径
FileName string // 文件名
MatchDir string // 满足条件的图片目录名
UnmatchDir string // 不满足条件的图片目录名
EqualHeightDir string // 等高的图片目录名
WhiteDir string // 白色底图的图片目录名
WhiteBorderPngDir string // 去白边转PNG的图片目录名
MinWhitePct float64 // 纯白占比下限0-1
MaxWhitePct float64 // 纯白占比上限0-1
Extensions []string // 支持的图片扩展名
}
```
### 响应示例
```
文件名称:string
```
## 9.释放C字符串内存--FreeCString
### 请求信息
```gotemplate
dll.FreeCString(str)
```
### 请求参数
| 参数名 | 类型 | 必填 | 说明 |
|--|--|--|----------|
| str | string | 是 | 需要释放的字符串 |