Implement DrawImage in svg context
This commit is contained in:
parent
1b49270d08
commit
99cc16d0ac
3 changed files with 36 additions and 5 deletions
|
@ -4,9 +4,13 @@
|
||||||
package draw2dsvg
|
package draw2dsvg
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"bytes"
|
||||||
|
"encoding/base64"
|
||||||
"fmt"
|
"fmt"
|
||||||
"github.com/llgcode/draw2d"
|
"github.com/llgcode/draw2d"
|
||||||
|
"image"
|
||||||
"image/color"
|
"image/color"
|
||||||
|
"image/png"
|
||||||
"math"
|
"math"
|
||||||
"strings"
|
"strings"
|
||||||
)
|
)
|
||||||
|
@ -110,3 +114,11 @@ func toSvgTransform(mat draw2d.Matrix) string {
|
||||||
mat[0], mat[1], mat[2], mat[3], mat[4], mat[5],
|
mat[0], mat[1], mat[2], mat[3], mat[4], mat[5],
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func imageToSvgHref(image image.Image) string {
|
||||||
|
out := "data:image/png;base64,"
|
||||||
|
pngBuf := &bytes.Buffer{}
|
||||||
|
png.Encode(pngBuf, image)
|
||||||
|
out += base64.RawStdEncoding.EncodeToString(pngBuf.Bytes())
|
||||||
|
return out
|
||||||
|
}
|
||||||
|
|
|
@ -353,6 +353,19 @@ func (gc *GraphicContext) SetFontSize(fontSize float64) {
|
||||||
gc.recalc()
|
gc.recalc()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// DrawImage draws the raster image in the current canvas
|
||||||
|
func (gc *GraphicContext) DrawImage(image image.Image) {
|
||||||
|
bounds := image.Bounds()
|
||||||
|
|
||||||
|
gc.newGroup(0).Image = &Image{
|
||||||
|
Href: imageToSvgHref(image),
|
||||||
|
X: bounds.Min.X,
|
||||||
|
Y: bounds.Min.Y,
|
||||||
|
Width: bounds.Max.X - bounds.Min.X,
|
||||||
|
Height: bounds.Max.Y - bounds.Min.Y,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
///////////////////////////////////////
|
///////////////////////////////////////
|
||||||
// TODO implement following methods (or remove if not neccesary)
|
// TODO implement following methods (or remove if not neccesary)
|
||||||
|
|
||||||
|
@ -362,11 +375,6 @@ func (gc *GraphicContext) GetFontName() string {
|
||||||
return fmt.Sprintf("%s:%d:%d:%d", fontData.Name, fontData.Family, fontData.Style, gc.Current.FontSize)
|
return fmt.Sprintf("%s:%d:%d:%d", fontData.Name, fontData.Family, fontData.Style, gc.Current.FontSize)
|
||||||
}
|
}
|
||||||
|
|
||||||
// DrawImage draws the raster image in the current canvas
|
|
||||||
func (gc *GraphicContext) DrawImage(image image.Image) {
|
|
||||||
// panic("not implemented")
|
|
||||||
}
|
|
||||||
|
|
||||||
// ClearRect fills the specified rectangle with a default transparent color
|
// ClearRect fills the specified rectangle with a default transparent color
|
||||||
func (gc *GraphicContext) ClearRect(x1, y1, x2, y2 int) {
|
func (gc *GraphicContext) ClearRect(x1, y1, x2, y2 int) {
|
||||||
// panic("not implemented")
|
// panic("not implemented")
|
||||||
|
|
|
@ -42,6 +42,7 @@ type Group struct {
|
||||||
Groups []*Group `xml:"g"`
|
Groups []*Group `xml:"g"`
|
||||||
Paths []*Path `xml:"path"`
|
Paths []*Path `xml:"path"`
|
||||||
Texts []*Text `xml:"text"`
|
Texts []*Text `xml:"text"`
|
||||||
|
Image *Image `xml:"image"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type Path struct {
|
type Path struct {
|
||||||
|
@ -58,6 +59,16 @@ type Text struct {
|
||||||
Style string `xml:"style,attr,omitempty"`
|
Style string `xml:"style,attr,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type Image struct {
|
||||||
|
Href string `xml:"href,attr"`
|
||||||
|
X int `xml:"x,attr,omitempty"`
|
||||||
|
Y int `xml:"y,attr,omitempty"`
|
||||||
|
Width int `xml:"width,attr"`
|
||||||
|
Height int `xml:"height,attr"`
|
||||||
|
}
|
||||||
|
|
||||||
|
/* font related elements */
|
||||||
|
|
||||||
type Font struct {
|
type Font struct {
|
||||||
Identity
|
Identity
|
||||||
Face *Face `xml:"font-face"`
|
Face *Face `xml:"font-face"`
|
||||||
|
|
Loading…
Reference in a new issue