//go:build ignore // Re-encode an opaque icon as RGB PNG; Chromium may retain an unused alpha channel. package main import ( "bytes" "fmt" "image/png" "io" "os" ) func main() { if err := run(); err != nil { fmt.Fprintln(os.Stderr, err) os.Exit(1) } } func run() error { raw, err := io.ReadAll(io.LimitReader(os.Stdin, 8<<20)) if err != nil || len(raw) == 8<<20 { return fmt.Errorf("icon PNG exceeds input limit") } cfg, err := png.DecodeConfig(bytes.NewReader(raw)) if err != nil || cfg.Width != 1024 || cfg.Height != 1024 { return fmt.Errorf("icon must be a 1024-pixel PNG") } img, err := png.Decode(bytes.NewReader(raw)) if err != nil { return err } opaque, ok := img.(interface{ Opaque() bool }) if !ok || !opaque.Opaque() { return fmt.Errorf("iPhone icon must be fully opaque") } // The standard encoder omits alpha when every pixel is opaque. return png.Encode(os.Stdout, img) }