golang将图片的的白色背景替换成透明 并且支持拖拽转换

lcy5个月前 (04-25)编程相关232

代码参考以下内容

package main

import (
    "flag"
    "fmt"
    "image"
    "image/color"
    "image/png"
    "os"
)

func main() {
    // 解析命令行参数
    flag.Parse()
    args := flag.Args()
    if len(args) != 1 {
        fmt.Println("请指定要处理的PNG文件")
        os.Exit(1)
    }
    filename := args[0]

    // 打开PNG文件
    file, err := os.Open(filename)
    if err != nil {
        fmt.Println("无法打开文件:", err)
        os.Exit(1)
    }
    defer file.Close()

    img, err := png.Decode(file)
    if err != nil {
        fmt.Println("无法解码PNG文件:", err)
        os.Exit(1)
    }

    // 创建一个新的RGBA图片,并将所有白色像素替换为透明
    bounds := img.Bounds()
    output := image.NewRGBA(bounds)
    for x := bounds.Min.X; x < bounds.Max.X; x++ {
        for y := bounds.Min.Y; y < bounds.Max.Y; y++ {
            r, g, b, a := img.At(x, y).RGBA()
            if r == 65535 && g == 65535 && b == 65535 {
                output.SetRGBA(x, y, color.RGBA{0, 0, 0, 0})
            } else {
                output.SetRGBA(x, y, color.RGBA{uint8(r / 256), uint8(g / 256), uint8(b / 256), uint8(a / 256)})
            }
        }
    }

    // 将处理后的PNG文件保存到与原始文件相同的目录和文件名下
    outputFile, err := os.Create(filename[:len(filename)-4] + "_transparent.png")
    if err != nil {
        fmt.Println("无法创建输出文件:", err)
        os.Exit(1)
    }
    defer outputFile.Close()

    err = png.Encode(outputFile, output)
    if err != nil {
        fmt.Println("无法编码PNG文件:", err)
        os.Exit(1)
    }

    fmt.Println("已成功将白色像素替换为透明!")
}

GOOS:目标可执行程序运行操作系统,支持 darwin,freebsd,linux,windows
GOARCH:目标可执行程序操作系统构架,包括 386,amd64,arm
CGO_ENABLED: 设置0则不启用cgo 设置1启用cgo。 交叉编译不支持cgo所以要设置为0

1.Mac

Mac下编译Linux, Windows平台的64位可执行程序:

CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build test.go

CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build test.go

2.Linux

Linux下编译Mac, Windows平台的64位可执行程序:

CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build test.go

CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build test.go

3.Windows

# cmd
set GOARCH=amd64
go env -w GOARCH=amd64
set GOOS=linux
go env -w GOOS=linux
 
# 还原
set GOARCH=amd64
go env -w GOARCH=amd64
set GOOS=windows
go env -w GOOS=windows
 
#go build

相关文章

python批量ping一个ip段

使用ipaddress模块来生成对应IP段的所有IP地址,并通过subprocess模块中的ping命令来实现批量ping。 以下是一个简单的示例脚本: import subprocess im...

百度智能云文字识别 python版本代码

获取 access_token 和图表文字识别的 Python 文件示例: python import requests import base64 # 百度智能 AI 图表文字识别 AP...

python将图片的背景色换成透明的

如果您想使用Python将图片的背景颜色替换为透明色,可以使用Python的Pillow库。以下是一个使用Pillow库的示例代码: from PIL import Image # 打开图像文...

golang编译的exe静默执行

64位: CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build -ldflags="-H windowsgui" -o pngx64.exe png.go...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。