mirror of
https://github.com/xiaoqidun/ofdgo.git
synced 2026-11-01 20:51:18 +08:00
Compare commits
3
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c5abb3667a | ||
|
|
9a618d6eae | ||
|
|
391725d379 |
No files matched your search
@@ -5,7 +5,7 @@ go 1.26.0
|
||||
require (
|
||||
github.com/tdewolff/canvas v0.0.0-20260901160717-dae8cd8e19a7
|
||||
github.com/tdewolff/font v0.0.0-20260822205238-d0d2f004b117
|
||||
github.com/xiaoqidun/jbig2 v0.0.0-20260911163254-c41e397f74ad
|
||||
github.com/xiaoqidun/jbig2 v0.0.0-20260911193906-4ff0e8c3778b
|
||||
golang.org/x/image v0.46.0
|
||||
golang.org/x/text v0.42.0
|
||||
)
|
||||
|
||||
@@ -71,8 +71,8 @@ github.com/tdewolff/test v1.0.12 h1:7F21DqIajswxuche0geHdrUZRCWE4oko4b7bcmkkrxk=
|
||||
github.com/tdewolff/test v1.0.12/go.mod h1:XPuWBzvdUzhCuxWO1ojpXsyzsA5bFoS3tO/Q3kFuTG8=
|
||||
github.com/wcharczuk/go-chart/v2 v2.1.2 h1:Y17/oYNuXwZg6TFag06qe8sBajwwsuvPiJJXcUcLL6E=
|
||||
github.com/wcharczuk/go-chart/v2 v2.1.2/go.mod h1:Zi4hbaqlWpYajnXB2K22IUYVXRXaLfSGNNR7P4ukyyQ=
|
||||
github.com/xiaoqidun/jbig2 v0.0.0-20260911163254-c41e397f74ad h1:HQG4NaAxnmTXetcjA9uH0uGHPSIEwMOlC+yKFCVDIlw=
|
||||
github.com/xiaoqidun/jbig2 v0.0.0-20260911163254-c41e397f74ad/go.mod h1:8QonVWtENmh2kc6l+leqeGl7psb79DWlHDkCpdChjfQ=
|
||||
github.com/xiaoqidun/jbig2 v0.0.0-20260911193906-4ff0e8c3778b h1:roazxr+FPYc+8H3M/GeJFZRdsKAbLaHyoAesXSHiNak=
|
||||
github.com/xiaoqidun/jbig2 v0.0.0-20260911193906-4ff0e8c3778b/go.mod h1:8QonVWtENmh2kc6l+leqeGl7psb79DWlHDkCpdChjfQ=
|
||||
github.com/xyproto/randomstring v1.0.5 h1:YtlWPoRdgMu3NZtP45drfy1GKoojuR7hmRcnhZqKjWU=
|
||||
github.com/xyproto/randomstring v1.0.5/go.mod h1:rgmS5DeNXLivK7YprL0pY+lTuhNQW3iGxZ18UQApw/E=
|
||||
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
|
||||
|
||||
+29
-1
@@ -144,7 +144,7 @@ func imageWithMask(img, mask image.Image) image.Image {
|
||||
for x := bounds.Min.X; x < bounds.Max.X; x++ {
|
||||
mx := maskBounds.Min.X + x - bounds.Min.X
|
||||
my := maskBounds.Min.Y + y - bounds.Min.Y
|
||||
a := color.GrayModel.Convert(opacity.At(mx, my)).(color.Gray).Y
|
||||
a := imageGrayAt(opacity, mx, my).Y
|
||||
c := imageNRGBAAt(source, x, y)
|
||||
c.A = uint8(int(c.A) * int(a) / 255)
|
||||
out.SetNRGBA(x, y, c)
|
||||
@@ -289,6 +289,17 @@ func imageWithAlpha(img image.Image, alpha *int) image.Image {
|
||||
bounds := img.Bounds()
|
||||
out := image.NewNRGBA(bounds)
|
||||
source := imagePixelSource(img)
|
||||
if src, ok := source.(*image.NRGBA); ok {
|
||||
for y := 0; y < bounds.Dy(); y++ {
|
||||
offset := src.PixOffset(bounds.Min.X, bounds.Min.Y+y)
|
||||
row := out.Pix[y*out.Stride : (y+1)*out.Stride]
|
||||
copy(row, src.Pix[offset:offset+len(row)])
|
||||
for x := 3; x < len(row); x += 4 {
|
||||
row[x] = uint8(int(row[x]) * a / 255)
|
||||
}
|
||||
}
|
||||
return out
|
||||
}
|
||||
for y := bounds.Min.Y; y < bounds.Max.Y; y++ {
|
||||
for x := bounds.Min.X; x < bounds.Max.X; x++ {
|
||||
c := imageNRGBAAt(source, x, y)
|
||||
@@ -394,6 +405,23 @@ func imagePixelSource(img image.Image) image.Image {
|
||||
return img
|
||||
}
|
||||
|
||||
// imageGrayAt 获取图片灰度像素
|
||||
// 入参: img 图片对象, x X坐标, y Y坐标
|
||||
// 返回: color.Gray 灰度像素
|
||||
func imageGrayAt(img image.Image, x, y int) color.Gray {
|
||||
if src, ok := img.(*image.Gray); ok {
|
||||
return src.GrayAt(x, y)
|
||||
}
|
||||
if src, ok := img.(*image.Paletted); ok {
|
||||
return color.GrayModel.Convert(src.At(x, y)).(color.Gray)
|
||||
}
|
||||
if src, ok := img.(image.RGBA64Image); ok {
|
||||
r, g, b, _ := src.RGBA64At(x, y).RGBA()
|
||||
return color.Gray{Y: uint8((19595*r + 38470*g + 7471*b + 1<<15) >> 24)}
|
||||
}
|
||||
return color.GrayModel.Convert(img.At(x, y)).(color.Gray)
|
||||
}
|
||||
|
||||
// imageNRGBAAt 获取图片NRGBA像素
|
||||
// 入参: img 图片对象, x X坐标, y Y坐标
|
||||
// 返回: color.NRGBA NRGBA像素
|
||||
|
||||
Reference in new issue
Block a user