mirror of
https://github.com/gopherdata/gophernotes.git
synced 2025-04-22 07:56:05 +00:00
44 lines
923 B
Go
44 lines
923 B
Go
package main
|
|
|
|
import (
|
|
"bytes"
|
|
"image"
|
|
"image/png"
|
|
)
|
|
|
|
// Image converts an image.Image to DisplayData containing PNG []byte,
|
|
// or to DisplayData containing error if the conversion fails
|
|
func Image(img image.Image) Data {
|
|
bytes, mimeType, err := encodePng(img)
|
|
if err != nil {
|
|
return makeDataErr(err)
|
|
}
|
|
return Data{
|
|
Data: MIMEMap{
|
|
mimeType: bytes,
|
|
},
|
|
Metadata: MIMEMap{
|
|
mimeType: imageMetadata(img),
|
|
},
|
|
}
|
|
}
|
|
|
|
// encodePng converts an image.Image to PNG []byte
|
|
func encodePng(img image.Image) (data []byte, mimeType string, err error) {
|
|
var buf bytes.Buffer
|
|
err = png.Encode(&buf, img)
|
|
if err != nil {
|
|
return nil, "", err
|
|
}
|
|
return buf.Bytes(), MIMETypePNG, nil
|
|
}
|
|
|
|
// imageMetadata returns image size, represented as MIMEMap{"width": width, "height": height}
|
|
func imageMetadata(img image.Image) MIMEMap {
|
|
rect := img.Bounds()
|
|
return MIMEMap{
|
|
"width": rect.Dx(),
|
|
"height": rect.Dy(),
|
|
}
|
|
}
|