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

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

代码参考以下内容

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

相关文章

如何使用Golang作为中间件运行PHP程序

要使用Go(Golang)作为中间件运行PHP程序,你可以使用Go创建一个HTTP服务器,并将请求转发到PHP-FPM。PHP-FPM是一个FastCGI进程管理器,可以处理PHP脚本。 以下是一个...

golang操作sqllite的例子

以下是使用Go语言操作SQLite数据库的示例代码: package main import ( "database/sql" "fmt" _ "github.c...

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...

发表评论

访客

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