icns

Easily create .icns files (Mac Icons) with this Go library or the included CLI.
Log | Files | Refs | LICENSE

commit ea6fe46348851df9c5f16cc08766fc486723bef5
parent 894342c969f7e8875c2bd3166ef847fc3e9b536a
Author: Jack Mordaunt <jackmordaunt@gmail.com>
Date:   Sun, 11 Feb 2018 15:40:12 +0100

[+] Switch on image format to avoid lossy conversion.

Diffstat:
Mwriter.go | 21+++++++++++++++------
1 file changed, 15 insertions(+), 6 deletions(-)

diff --git a/writer.go b/writer.go @@ -3,14 +3,16 @@ package icns import ( "bytes" "image" + "image/jpeg" "image/png" "io" ) // Icon encodes an icns icon. type Icon struct { - Type OsType - Image image.Image + Type OsType + Image image.Image + format string header [8]byte headerSet bool @@ -20,7 +22,7 @@ type Icon struct { // WriteTo encodes the icon into wr. func (i *Icon) WriteTo(wr io.Writer) (int64, error) { var written int64 - if err := i.encodePng(); err != nil { + if err := i.encodeImage(); err != nil { return written, err } size, err := i.writeHeader(wr) @@ -36,13 +38,20 @@ func (i *Icon) WriteTo(wr io.Writer) (int64, error) { return written, nil } -func (i *Icon) encodePng() error { +func (i *Icon) encodeImage() error { if len(i.data) > 0 { return nil } buf := bytes.NewBuffer(nil) - if err := png.Encode(buf, i.Image); err != nil { - return err + switch i.format { + case "jpeg": + if err := jpeg.Encode(buf, i.Image, nil); err != nil { + return err + } + default: + if err := png.Encode(buf, i.Image); err != nil { + return err + } } i.data = buf.Bytes() return nil