1
0
Fork 0
mirror of https://github.com/anyproto/anytype-heart.git synced 2025-06-08 13:57:12 +09:00
anytype-heart/util/svg/rasterizer.go
AnastasiaShemyakinskaya 788d4a29fb
GO-2078: add second file for no rasterize case and add flag in build
Signed-off-by: AnastasiaShemyakinskaya <shem98a@mail.ru>
2024-10-02 15:49:45 +02:00

43 lines
949 B
Go

//go:build rasterizesvg
package svg
import (
"bytes"
"context"
"image"
"image/png"
"io"
"github.com/srwiley/oksvg"
"github.com/srwiley/rasterx"
"github.com/anyproto/anytype-heart/core/files"
)
const pngMedia = "image/png"
func ProcessSvg(ctx context.Context, file files.File) (io.ReadSeeker, error) {
reader, err := file.Reader(ctx)
if err != nil {
return nil, err
}
icon, err := oksvg.ReadIconStream(reader)
if err != nil {
return nil, err
}
w, h := icon.ViewBox.W, icon.ViewBox.H
img := image.NewRGBA(image.Rect(0, 0, int(w), int(h)))
icon.Draw(rasterx.NewDasher(int(w), int(h), rasterx.NewScannerGV(int(w), int(h), img, img.Bounds())), 1)
file.Info().Media = pngMedia
return writePNGToReader(img)
}
func writePNGToReader(img image.Image) (io.ReadSeeker, error) {
pngBuffer := &bytes.Buffer{}
err := png.Encode(pngBuffer, img)
if err != nil {
return nil, err
}
return bytes.NewReader(pngBuffer.Bytes()), nil
}