mirror of
https://github.com/xiaoqidun/ofdgo.git
synced 2026-10-29 17:27:08 +08:00
This commit is contained in:
1 parent
74b6b0ac93
commit
e488d25775
8 files changed
+121
-126
No files matched your search
@@ -19,6 +19,8 @@ import (
|
||||
"bytes"
|
||||
"fmt"
|
||||
"image"
|
||||
"image/jpeg"
|
||||
"image/png"
|
||||
"io"
|
||||
|
||||
"github.com/tdewolff/canvas"
|
||||
@@ -82,6 +84,53 @@ func (r *Renderer) RenderToImage(page *PageContent) (image.Image, error) {
|
||||
return raster.Image, nil
|
||||
}
|
||||
|
||||
// RenderToPNG 渲染为PNG,像素尺寸由DPI决定
|
||||
// 入参: page 页面内容, writer 输出流
|
||||
// 返回: error 错误信息
|
||||
func (r *Renderer) RenderToPNG(page *PageContent, writer io.Writer) error {
|
||||
img, err := r.RenderToImage(page)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return png.Encode(writer, img)
|
||||
}
|
||||
|
||||
// RenderToJPEG 渲染为白底JPEG,像素尺寸由DPI决定
|
||||
// 入参: page 页面内容, writer 输出流, options 编码选项,nil使用标准库默认值
|
||||
// 返回: error 错误信息
|
||||
func (r *Renderer) RenderToJPEG(page *PageContent, writer io.Writer, options *jpeg.Options) error {
|
||||
img, err := r.RenderToImage(page)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return jpeg.Encode(writer, fillWhiteBackground(img), options)
|
||||
}
|
||||
|
||||
// fillWhiteBackground 填充白色背景,复用当前导出图片的RGBA像素
|
||||
// 入参: img 图片对象
|
||||
// 返回: image.Image 图片对象
|
||||
func fillWhiteBackground(img image.Image) image.Image {
|
||||
bounds := img.Bounds()
|
||||
if rgba, ok := img.(*image.RGBA); ok {
|
||||
for y := 0; y < bounds.Dy(); y++ {
|
||||
row := rgba.Pix[y*rgba.Stride : y*rgba.Stride+bounds.Dx()*4]
|
||||
for i := 0; i < len(row); i += 4 {
|
||||
if alpha := 255 - row[i+3]; alpha != 0 {
|
||||
row[i] += alpha
|
||||
row[i+1] += alpha
|
||||
row[i+2] += alpha
|
||||
row[i+3] = 255
|
||||
}
|
||||
}
|
||||
}
|
||||
return rgba
|
||||
}
|
||||
dst := image.NewRGBA(bounds)
|
||||
draw.Draw(dst, bounds, image.White, image.Point{}, draw.Src)
|
||||
draw.Draw(dst, bounds, img, bounds.Min, draw.Over)
|
||||
return dst
|
||||
}
|
||||
|
||||
// RenderToSVG 渲染为SVG
|
||||
// 入参: page 页面内容, writer 输出流
|
||||
// 返回: error 错误信息
|
||||
|
||||
Reference in new issue
Block a user