feat(转换能力): 加速图像重采样
build.yaml / build (push) Successful in 3m1s

This commit is contained in:
xiaoqidun committed 2026-10-15 16:47:42 +08:00
1 parent 307e3a718a
commit 6e8eb7cfcc
3 files changed
+21 -3

No files matched your search

+1 -1
View File
@@ -10,7 +10,7 @@ require (
github.com/tdewolff/font v0.0.0-20261010204837-88a7f6b56918 github.com/tdewolff/font v0.0.0-20261010204837-88a7f6b56918
github.com/xiaoqidun/j2kgo v1.0.1 github.com/xiaoqidun/j2kgo v1.0.1
github.com/xiaoqidun/jbig2 v1.1.7 github.com/xiaoqidun/jbig2 v1.1.7
github.com/xiaoqidun/pdfgo v0.0.0-20261015080813-04cab548eee1 github.com/xiaoqidun/pdfgo v0.0.0-20261015084227-8b2c590c8095
golang.org/x/crypto v0.58.0 golang.org/x/crypto v0.58.0
golang.org/x/image v0.47.0 golang.org/x/image v0.47.0
golang.org/x/text v0.43.0 golang.org/x/text v0.43.0
+2 -2
View File
@@ -62,8 +62,8 @@ github.com/xiaoqidun/j2kgo v1.0.1 h1:W0SytzjvgiOhXwq+JNRSVKLB847fjGOvGWTNKqmwvo0
github.com/xiaoqidun/j2kgo v1.0.1/go.mod h1:DCwAfuDzCDYqUiAlZ7BDwigTjaXw7o9L1FtEma/D1aA= github.com/xiaoqidun/j2kgo v1.0.1/go.mod h1:DCwAfuDzCDYqUiAlZ7BDwigTjaXw7o9L1FtEma/D1aA=
github.com/xiaoqidun/jbig2 v1.1.7 h1:118d2lQn2ZsupmXazK+2p23Jp5xQ09btBmPUoYoa/+Y= github.com/xiaoqidun/jbig2 v1.1.7 h1:118d2lQn2ZsupmXazK+2p23Jp5xQ09btBmPUoYoa/+Y=
github.com/xiaoqidun/jbig2 v1.1.7/go.mod h1:9jromqVwMqlptUDEt6Yip8vqYA5I1YjhG7FgMl/Z2dA= github.com/xiaoqidun/jbig2 v1.1.7/go.mod h1:9jromqVwMqlptUDEt6Yip8vqYA5I1YjhG7FgMl/Z2dA=
github.com/xiaoqidun/pdfgo v0.0.0-20261015080813-04cab548eee1 h1:j0HPne+OoMJt3moQyurnlWfMsVd0SyCmEl/epSOIpG4= github.com/xiaoqidun/pdfgo v0.0.0-20261015084227-8b2c590c8095 h1:lkK0xbGXJIKvH9zgKtf94HiGt35krCmy8EESPUCxRFE=
github.com/xiaoqidun/pdfgo v0.0.0-20261015080813-04cab548eee1/go.mod h1:FUQ8+TfNoec6tZCdsckx+rrD25JACm7EzuZyFH37QHg= github.com/xiaoqidun/pdfgo v0.0.0-20261015084227-8b2c590c8095/go.mod h1:FUQ8+TfNoec6tZCdsckx+rrD25JACm7EzuZyFH37QHg=
github.com/xyproto/randomstring v1.0.5 h1:YtlWPoRdgMu3NZtP45drfy1GKoojuR7hmRcnhZqKjWU= github.com/xyproto/randomstring v1.0.5 h1:YtlWPoRdgMu3NZtP45drfy1GKoojuR7hmRcnhZqKjWU=
github.com/xyproto/randomstring v1.0.5/go.mod h1:rgmS5DeNXLivK7YprL0pY+lTuhNQW3iGxZ18UQApw/E= github.com/xyproto/randomstring v1.0.5/go.mod h1:rgmS5DeNXLivK7YprL0pY+lTuhNQW3iGxZ18UQApw/E=
github.com/yuin/goldmark v1.8.5 h1:r6N5afV5qj/5S4UTch8agZHJ8UxNCMwX7WjkkJam2NA= github.com/yuin/goldmark v1.8.5 h1:r6N5afV5qj/5S4UTch8agZHJ8UxNCMwX7WjkkJam2NA=
+18
View File
@@ -265,9 +265,27 @@ func DrawPixels(dst draw.Image, src image.Image, m [6]float64, op draw.Op) {
if drawRasterAxisImage(dst, src, m, op) { if drawRasterAxisImage(dst, src, m, op) {
return return
} }
src = rasterTransformSource(src, TransformBounds(b, m, dst.Bounds()))
draw.CatmullRom.Transform(dst, f64.Aff3{m[0], m[2], m[4], m[1], m[3], m[5]}, src, b, op, nil) draw.CatmullRom.Transform(dst, f64.Aff3{m[0], m[2], m[4], m[1], m[3], m[5]}, src, b, op, nil)
} }
// rasterTransformSource 为放大的通用图像缓存十六位预乘像素,限制临时缓冲大小
// 入参: src 源图像, affected 目标采样区域
// 返回: image.Image 等值采样图像
func rasterTransformSource(src image.Image, affected image.Rectangle) image.Image {
switch src.(type) {
case *image.RGBA, *image.RGBA64:
return src
}
b := src.Bounds()
if b.Empty() || affected.Empty() || b.Dx() > rasterScaleBufferLimit/8/b.Dy() || float64(affected.Dx())*float64(affected.Dy()) < float64(b.Dx())*float64(b.Dy()) {
return src
}
pixels := image.NewRGBA64(b)
draw.Draw(pixels, b, src, b.Min, draw.Src)
return pixels
}
// rasterScaleBounds 检查变换是否可无几何取整地使用缩放器,并限制其中间缓冲 // rasterScaleBounds 检查变换是否可无几何取整地使用缩放器,并限制其中间缓冲
// 入参: b 源边界, m 像素变换 // 入参: b 源边界, m 像素变换
// 返回: image.Rectangle 缩放边界, bool 是否适用 // 返回: image.Rectangle 缩放边界, bool 是否适用