feat(图像渲染): 优化图像渲染
build.yaml / build (push) Successful in 38s

This commit is contained in:
2026-07-15 16:07:20 +08:00
parent e2896381e2
commit bc02d9e7f6
4 changed files with 22 additions and 9 deletions
+2
View File
@@ -71,6 +71,8 @@ func NewRenderer(reader *Reader, opts ...RendererOption) *Renderer {
DrawParams: reader.drawParamCache,
CompositeGraphicUnits: reader.compositeGraphicUnitCache,
FontMap: make(map[string]*canvas.FontFamily),
FontGIDMap: make(map[string]map[uint16]rune),
FontCIDMap: make(map[string]map[uint16]rune),
fontFSCache: make(map[fontFSKey]*canvas.FontFamily),
textGlyphPathCache: make(map[textGlyphPathCacheKey]textGlyphPathCacheValue),
templatePageCache: make(map[string]*PageContent),
+2
View File
@@ -20,10 +20,12 @@ import (
"fmt"
"image"
"image/color"
_ "image/gif"
canvasimage "github.com/tdewolff/canvas/image"
_ "github.com/xiaoqidun/jbig2"
_ "golang.org/x/image/bmp"
_ "golang.org/x/image/tiff"
)
// decodeImageData 解码图片数据
+13 -2
View File
@@ -48,6 +48,15 @@ type RendererOption func(*Renderer)
// 入参: page 页面内容
// 返回: *canvas.Canvas 画布实例, error 错误信息
func (r *Renderer) RenderPage(page *PageContent) (*canvas.Canvas, error) {
renderer := *r
renderer.decodeImages = true
return renderer.renderPage(page)
}
// renderPage 渲染特定页面内容
// 入参: page 页面内容
// 返回: *canvas.Canvas 画布实例, error 错误信息
func (r *Renderer) renderPage(page *PageContent) (*canvas.Canvas, error) {
box, err := r.GetPageBox(page)
if err != nil {
return nil, err
@@ -55,7 +64,7 @@ func (r *Renderer) RenderPage(page *PageContent) (*canvas.Canvas, error) {
width, height := box.W, box.H
c := canvas.New(width, height)
ctx := canvas.NewContext(c)
if err := r.RenderPageToContext(ctx, page); err != nil {
if err := r.renderPageToContext(ctx, page, true); err != nil {
return nil, err
}
return c, nil
@@ -85,7 +94,9 @@ func (r *Renderer) GetPageBox(page *PageContent) (Box, error) {
// 入参: ctx 画布上下文, page 页面内容
// 返回: error 错误信息
func (r *Renderer) RenderPageToContext(ctx *canvas.Context, page *PageContent) error {
return r.renderPageToContext(ctx, page, true)
renderer := *r
renderer.decodeImages = true
return renderer.renderPageToContext(ctx, page, true)
}
// renderPageToContext 渲染页面到指定上下文
+5 -7
View File
@@ -30,9 +30,7 @@ import (
// 入参: page 页面内容
// 返回: image.Image 图像对象, error 错误信息
func (r *Renderer) RenderToImage(page *PageContent) (image.Image, error) {
renderer := *r
renderer.decodeImages = true
c, err := renderer.RenderPage(page)
c, err := r.RenderPage(page)
if err != nil {
return nil, err
}
@@ -44,7 +42,7 @@ func (r *Renderer) RenderToImage(page *PageContent) (image.Image, error) {
// 入参: page 页面内容, writer 输出流
// 返回: error 错误信息
func (r *Renderer) RenderToSVG(page *PageContent, writer io.Writer) error {
c, err := r.RenderPage(page)
c, err := r.renderPage(page)
if err != nil {
return err
}
@@ -69,7 +67,7 @@ func replacePDFProducer(data []byte) []byte {
// 入参: page 页面内容, writer 输出流
// 返回: error 错误信息
func (r *Renderer) RenderToPDF(page *PageContent, writer io.Writer) error {
c, err := r.RenderPage(page)
c, err := r.renderPage(page)
if err != nil {
return err
}
@@ -88,7 +86,7 @@ func (r *Renderer) RenderToPDF(page *PageContent, writer io.Writer) error {
// 入参: page 页面内容, writer 输出流
// 返回: error 错误信息
func (r *Renderer) RenderToEPS(page *PageContent, writer io.Writer) error {
c, err := r.RenderPage(page)
c, err := r.renderPage(page)
if err != nil {
return err
}
@@ -113,7 +111,7 @@ func (r *Renderer) RenderToMultiPagePDF(writer io.Writer) error {
if err != nil {
continue
}
c, err := r.RenderPage(page)
c, err := r.renderPage(page)
if err != nil {
continue
}