33 lines
726 B
Go
33 lines
726 B
Go
package binmeta
|
|
|
|
import (
|
|
"bytes"
|
|
"fmt"
|
|
"image"
|
|
_ "image/png" // Register png support for image package
|
|
|
|
"github.com/fogleman/gg"
|
|
_ "github.com/mat/besticon/ico" // Register ico support for image package
|
|
)
|
|
|
|
// ConvertICOtoPNG converts a an .ico to a .png image.
|
|
func ConvertICOtoPNG(ico []byte) (png []byte, err error) {
|
|
// Decode the ICO.
|
|
icon, _, err := image.Decode(bytes.NewReader(ico))
|
|
if err != nil {
|
|
return nil, fmt.Errorf("failed to decode ICO: %w", err)
|
|
}
|
|
|
|
// Convert to raw image.
|
|
img := gg.NewContextForImage(icon)
|
|
|
|
// Convert to PNG.
|
|
imgBuf := &bytes.Buffer{}
|
|
err = img.EncodePNG(imgBuf)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("failed to encode PNG: %w", err)
|
|
}
|
|
|
|
return imgBuf.Bytes(), nil
|
|
}
|