oficina / estilo Public

Clone
git clone https://amadan.net/oficina/estilo

Plain git — no account needed to clone.

Download

Download this file

1//go:build ignore
2
3// Re-encode an opaque icon as RGB PNG; Chromium may retain an unused alpha channel.
4package main
5
6import (
7 "bytes"
8 "fmt"
9 "image/png"
10 "io"
11 "os"
12)
13
14func main() {
15 if err := run(); err != nil {
16 fmt.Fprintln(os.Stderr, err)
17 os.Exit(1)
18 }
19}
20
21func run() error {
22 raw, err := io.ReadAll(io.LimitReader(os.Stdin, 8<<20))
23 if err != nil || len(raw) == 8<<20 {
24 return fmt.Errorf("icon PNG exceeds input limit")
25 }
26 cfg, err := png.DecodeConfig(bytes.NewReader(raw))
27 if err != nil || cfg.Width != 1024 || cfg.Height != 1024 {
28 return fmt.Errorf("icon must be a 1024-pixel PNG")
29 }
30 img, err := png.Decode(bytes.NewReader(raw))
31 if err != nil {
32 return err
33 }
34 opaque, ok := img.(interface{ Opaque() bool })
35 if !ok || !opaque.Opaque() {
36 return fmt.Errorf("iPhone icon must be fully opaque")
37 }
38 // The standard encoder omits alpha when every pixel is opaque.
39 return png.Encode(os.Stdout, img)
40}
41