golang将图片的的白色背景替换成透明 并且支持拖拽转换
代码参考以下内容
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