hreenshan112 1 year ago
parent
commit
8490492ac0
  1. BIN
      assets/img/1.png
  2. 6
      assets/img/output_image.svg
  3. 0
      assets/img/output_image111.svg
  4. 6
      assets/svg/output22_image.svg
  5. 6
      assets/svg/output_image.svg
  6. 0
      assets/svg/output_image111.svg
  7. 57
      controller/common/img.go
  8. 227
      controller/common/shiyan.go
  9. 9
      go.mod
  10. 23
      go.sum
  11. 12
      main.go

BIN
assets/img/1.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

6
assets/img/output_image.svg

@ -0,0 +1,6 @@
<?xml version="1.0"?>
<!-- Generated by SVGo -->
<svg width="0" height="0"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink">
</svg>

After

Width:  |  Height:  |  Size: 171 B

0
assets/img/output_image111.svg

6
assets/svg/output22_image.svg

@ -0,0 +1,6 @@
<?xml version="1.0"?>
<!-- Generated by SVGo -->
<svg width="0" height="0"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink">
</svg>

After

Width:  |  Height:  |  Size: 171 B

6
assets/svg/output_image.svg

@ -0,0 +1,6 @@
<?xml version="1.0"?>
<!-- Generated by SVGo -->
<svg width="0" height="0"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink">
</svg>

After

Width:  |  Height:  |  Size: 171 B

0
assets/svg/output_image111.svg

57
controller/common/img.go

@ -0,0 +1,57 @@
package common
import (
"bytes"
"fmt"
"image/jpeg"
"log"
"os"
svg "github.com/ajstarks/svgo"
)
func JpgPngToSvgw(inputPAgth, outputPath string) {
// 加载JPG图片
// 加载JPEG图片
jpgFile, err := os.Open(inputPAgth)
if err != nil {
log.Fatalf("Error opening JPEG file: %v", err)
}
defer jpgFile.Close()
img, err := jpeg.Decode(jpgFile)
if err != nil {
log.Fatalf("Error decoding JPEG image: %v", err)
}
// 创建SVG画布
width, height := img.Bounds().Dx(), img.Bounds().Dy()
canvas := svg.New(bytes.NewBuffer(nil))
canvas.Start(width, height)
// 将JPEG图片转换为SVG路径指令
for y := 0; y < height; y++ {
for x := 0; x < width; x++ {
// 获取每个像素的颜色
r, g, b, _ := img.At(x, y).RGBA()
canvas.Circle(x, y, 1, fmt.Sprintf("fill=\"rgb(%d,%d,%d)\"", r, g, b))
}
}
// 结束SVG文档
canvas.End()
// 输出SVG文件
// svgData := canvas.Bytes()
svgFile, err := os.Create(outputPath)
if err != nil {
log.Fatalf("Error creating SVG file: %v", err)
}
defer svgFile.Close()
// _, err = svgFile.Write(canvas)
if err != nil {
log.Fatalf("Error writing SVG data: %v", err)
}
}

227
controller/common/shiyan.go

@ -4,7 +4,14 @@ import (
"appNewPlatform/generalmethod"
"appNewPlatform/utils"
"appNewPlatform/utils/formatoutput"
"fmt"
"image"
"image/draw"
"image/jpeg"
"image/png"
"os"
svg "github.com/ajstarks/svgo"
"github.com/gin-gonic/gin"
)
@ -36,3 +43,223 @@ func (a *ApiMethod) Index(c *gin.Context) {
func (a *ApiMethod) JieXiJwt(c *gin.Context) {
}
/*
*
@ 作者: 秦东
@ 时间: 2024-11-08 15:20:28
@ 功能: 实验图片改变格式
@ 参数
#
@ 返回值
#
@ 方法原型
#
*/
func (a *ApiMethod) JpgToSvg(c *gin.Context) {
}
/*
*
@ 作者: 秦东
@ 时间: 2024-11-08 15:21:29
@ 功能: 将图像转换为SVG
@ 参数
#inputImagePath 来源
#outputSVGPath 目标
@ 返回值
#
@ 方法原型
#
*/
func ImageToSVG(inputImagePath, outputSVGPath string) error {
// 打开输入图像文件
inputFile, err := os.Open(inputImagePath)
if err != nil {
return fmt.Errorf("无法打开输入图像文件: %v", err)
}
defer inputFile.Close()
// 解码图像
var img image.Image
var config image.Config
if inputImagePath[len(inputImagePath)-3:] == "png" {
img, err = png.Decode(inputFile)
} else if inputImagePath[len(inputImagePath)-3:] == "jpg" {
img, err = jpeg.Decode(inputFile)
} else {
return fmt.Errorf("不支持的图像格式")
}
if err != nil {
return fmt.Errorf("无法解码图像: %v", err)
}
// 创建一个空白的RGBA图像,大小与原始图像相同
rgba := image.NewRGBA(image.Rect(0, 0, config.Width, config.Height))
draw.Draw(rgba, rgba.Bounds(), img, image.Point{0, 0}, draw.Src)
// 创建SVG文件
outputFile, err := os.Create(outputSVGPath)
if err != nil {
return fmt.Errorf("无法创建SVG文件: %v", err)
}
defer outputFile.Close()
// 初始化SVG绘制上下文
svg := svg.New(outputFile)
svg.Start(config.Width, config.Height)
// 遍历图像的每个像素,将其绘制到SVG中
for y := 0; y < config.Height; y++ {
for x := 0; x < config.Width; x++ {
r, g, b, a := rgba.At(x, y).RGBA()
svg.Rect(x, y, 1, 1, fmt.Sprintf("fill:rgba(%d,%d,%d,%f)", r>>8, g>>8, b>>8, float64(a)/65535))
}
}
svg.End()
return nil
}
/*
*
@ 作者: 秦东
@ 时间: 2024-11-08 16:24:10
@ 功能:
@ 参数
#
@ 返回值
#
@ 方法原型
#
*/
// func ImgToSvg(inputImagePath, outputSVGPath string) {
// // 打开输入的 PNG 图像文件
// inputFile, err := os.Open("input.png")
// if err != nil {
// log.Fatalf("无法打开输入图像文件: %v", err)
// }
// defer inputFile.Close()
// // 解码 PNG 图像
// img, err := png.Decode(inputFile)
// if err != nil {
// log.Fatalf("无法解码 PNG 图像: %v", err)
// }
// // 获取图像的边界
// bounds := img.Bounds()
// width, height := bounds.Max.X, bounds.Max.Y
// // 将图像转换为 RGBA 格式
// rgbaImg := image.NewRGBA(bounds)
// draw.Draw(rgbaImg, bounds, img, image.Point{0, 0}, draw.Src)
// // 使用 go-libimagequant 进行图像量化
// quantizer := imagequant.NewQuantizer()
// defer quantizer.Close()
// // 配置量化参数(可选,这里使用默认参数)
// quantizer.SetMaxColors(256)
// quantizer.SetMinQuality(75)
// // 对图像进行量化
// result, err := quantizer.Quantize(rgbaImg)
// if err != nil {
// log.Fatalf("图像量化失败: %v", err)
// }
// defer result.Close()
// // 创建新的图像,使用量化后的颜色
// quantizedImg := image.NewPaletted(bounds, result.Palette())
// for y := 0; y < height; y++ {
// for x := 0; x < width; x++ {
// index := result.Image().At(x, y).(color.NRGBA).R
// quantizedImg.Set(x, y, result.Palette()[int(index)])
// }
// }
// // 保存量化后的图像为新的 PNG 文件
// outputFile, err := os.Create("output.png")
// if err != nil {
// log.Fatalf("无法创建输出图像文件: %v", err)
// }
// defer outputFile.Close()
// if err := png.Encode(outputFile, quantizedImg); err != nil {
// log.Fatalf("无法保存输出图像文件: %v", err)
// }
// log.Println("图像量化完成,已保存为 output.png")
// }
/*
*
@ 作者: 秦东
@ 时间: 2024-11-09 08:20:56
@ 功能:
@ 参数
#
@ 返回值
#
@ 方法原型
#
*/
func JpgPngToSvg(inputPAgth, outputPath string) {
// imgFile, err := os.Open(inputPAgth)
// if err != nil {
// log.Fatalf("Error opening image: %v", err)
// }
// defer imgFile.Close()
// img, _, err := image.Decode(imgFile)
// if err != nil {
// log.Fatalf("Error decoding image: %v", err)
// }
// // 创建一个新的SVG画布
// dc := gg.NewContext(img.Bounds().Dx(), img.Bounds().Dy())
// // 将图片绘制到SVG上下文
// dc.DrawImage(img, 0, 0)
// // 将SVG内容写入文件
// var buf bytes.Buffer
// if err := gg.RenderToSVG(&buf, dc.Image().Bounds(), dc.Image(), nil); err != nil { //+
// log.Fatalf("Error rendering to SVG: %v", err) //+
// } //+
// svgFile, err := os.Create("output.svg")
// if err != nil {
// log.Fatalf("Error creating SVG file: %v", err)
// }
// defer svgFile.Close()
// if _, err := io.Copy(svgFile, &buf); err != nil {
// log.Fatalf("Error writing SVG file: %v", err)
// }
// fmt.Println("Image converted to SVG successfully.")
}

9
go.mod

@ -3,10 +3,12 @@ module appNewPlatform
go 1.21.5
require (
github.com/ajstarks/svgo v0.0.0-20211024235047-1546f124cd8b
github.com/fogleman/gg v1.3.0
github.com/fsnotify/fsnotify v1.7.0
github.com/gin-gonic/gin v1.10.0
github.com/golang-jwt/jwt v3.2.2+incompatible
github.com/golang-jwt/jwt/v5 v5.2.1
github.com/otiai10/gosseract/v2 v2.4.1
github.com/redis/go-redis/v9 v9.6.1
github.com/spf13/viper v1.19.0
gorm.io/driver/mysql v1.5.7
@ -14,14 +16,14 @@ require (
)
require (
github.com/ajstarks/svgo v0.0.0-20211024235047-1546f124cd8b // indirect
github.com/Jeffail/gabs v1.4.0 // indirect
github.com/Jeffail/gabs/v2 v2.7.0 // indirect
github.com/bytedance/sonic v1.11.6 // indirect
github.com/bytedance/sonic/loader v0.1.1 // indirect
github.com/cespare/xxhash/v2 v2.2.0 // indirect
github.com/cloudwego/base64x v0.1.4 // indirect
github.com/cloudwego/iasm v0.2.0 // indirect
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect
github.com/disintegration/imaging v1.6.2 // indirect
github.com/gabriel-vasile/mimetype v1.4.3 // indirect
github.com/gin-contrib/sse v0.1.0 // indirect
github.com/go-playground/locales v0.14.1 // indirect
@ -36,7 +38,6 @@ require (
github.com/json-iterator/go v1.1.12 // indirect
github.com/klauspost/cpuid/v2 v2.2.7 // indirect
github.com/leodido/go-urn v1.4.0 // indirect
github.com/llgcode/draw2d v0.0.0-20240627062922-0ed1ff131195 // indirect
github.com/magiconair/properties v1.8.7 // indirect
github.com/mattn/go-isatty v0.0.20 // indirect
github.com/mitchellh/mapstructure v1.5.0 // indirect

23
go.sum

@ -1,4 +1,8 @@
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/Jeffail/gabs v1.4.0 h1://5fYRRTq1edjfIrQGvdkcd22pkYUrHZ5YC/H2GJVAo=
github.com/Jeffail/gabs v1.4.0/go.mod h1:6xMvQMK4k33lb7GUUpaAPh6nKMmemQeg5d4gn7/bOXc=
github.com/Jeffail/gabs/v2 v2.7.0 h1:Y2edYaTcE8ZpRsR2AtmPu5xQdFDIthFG0jYhu5PY8kg=
github.com/Jeffail/gabs/v2 v2.7.0/go.mod h1:dp5ocw1FvBBQYssgHsG7I1WYsiLRtkUaB1FEtSwvNUw=
github.com/ajstarks/deck v0.0.0-20200831202436-30c9fc6549a9/go.mod h1:JynElWSGnm/4RlzPXRlREEwqTHAN3T56Bv2ITsFT3gY=
github.com/ajstarks/deck/generate v0.0.0-20210309230005-c3f852c02e19/go.mod h1:T13YZdzov6OU0A1+RfKZiZN9ca6VeKdBdyDV+BY97Tk=
github.com/ajstarks/svgo v0.0.0-20211024235047-1546f124cd8b h1:slYM766cy2nI3BwyRiyQj/Ud48djTMtMebDqepE95rw=
@ -23,8 +27,8 @@ github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78=
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc=
github.com/disintegration/imaging v1.6.2 h1:w1LecBlG2Lnp8B3jk5zSuNqd7b4DXhcjwek1ei82L+c=
github.com/disintegration/imaging v1.6.2/go.mod h1:44/5580QXChDfwIclfc/PCwrr44amcmDAg8hxG0Ewe4=
github.com/fogleman/gg v1.3.0 h1:/7zJX8F6AaYQc57WQCyN9cAIz+4bCJGO9B+dyW29am8=
github.com/fogleman/gg v1.3.0/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k=
github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8=
github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0=
github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA=
@ -49,8 +53,6 @@ github.com/goccy/go-json v0.10.2 h1:CrxCmQqYDkv1z7lO7Wbh2HN93uovUHgrECaO5ZrCXAU=
github.com/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I=
github.com/golang-jwt/jwt v3.2.2+incompatible h1:IfV12K8xAKAnZqdXVzCZ+TOjboZ2keLg81eXfW3O+oY=
github.com/golang-jwt/jwt v3.2.2+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzqecmYZeUEB8OUGHkxJ+I=
github.com/golang-jwt/jwt/v5 v5.2.1 h1:OuVbFODueb089Lh128TAcimifWaLhJwVflnrgM17wHk=
github.com/golang-jwt/jwt/v5 v5.2.1/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk=
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 h1:DACJavvAHhabrF08vX0COfcOBJRhZ8lUbR+ZWIs0Y5g=
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k=
github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=
@ -75,8 +77,6 @@ github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/leodido/go-urn v1.4.0 h1:WT9HwE9SGECu3lg4d/dIA+jxlljEa1/ffXKmRjqdmIQ=
github.com/leodido/go-urn v1.4.0/go.mod h1:bvxc+MVxLKB4z00jd1z+Dvzr47oO32F/QSNjSBOlFxI=
github.com/llgcode/draw2d v0.0.0-20240627062922-0ed1ff131195 h1:Vdz2cBh5Fw2MYHWi3ED2PraDQaWEUhNCr1XFHrP4N5A=
github.com/llgcode/draw2d v0.0.0-20240627062922-0ed1ff131195/go.mod h1:1Vk0LDW6jG5cGc2D9RQUxHaE0vYhTvIwSo9mOL6K4/U=
github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY=
github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0=
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
@ -88,6 +88,10 @@ github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M=
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
github.com/otiai10/gosseract/v2 v2.4.1 h1:G8AyBpXEeSlcq8TI85LH/pM5SXk8Djy2GEXisgyblRw=
github.com/otiai10/gosseract/v2 v2.4.1/go.mod h1:1gNWP4Hgr2o7yqWfs6r5bZxAatjOIdqWxJLWsTsembk=
github.com/otiai10/mint v1.6.3 h1:87qsV/aw1F5as1eH1zS/yqHY85ANKVMgkDrf9rcxbQs=
github.com/otiai10/mint v1.6.3/go.mod h1:MJm72SBthJjz8qhefc4z1PYEieWmy8Bku7CjcAqyUSM=
github.com/pelletier/go-toml/v2 v2.2.2 h1:aYUidT7k73Pcl9nb2gScu7NSrKCSHIDE89b3+6Wq+LM=
github.com/pelletier/go-toml/v2 v2.2.2/go.mod h1:1t835xjRzz80PqgE6HHgN2JOsmgYu/h4qDAS4n929Rs=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
@ -144,9 +148,6 @@ golang.org/x/crypto v0.23.0 h1:dIJU/v2J8Mdglj/8rJ6UUOM3Zc9zLZxVZwwxMooUSAI=
golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8=
golang.org/x/exp v0.0.0-20230905200255-921286631fa9 h1:GoHiUyI/Tp2nVkLI2mCxVkOjsbSXD66ic0XW0js0R9g=
golang.org/x/exp v0.0.0-20230905200255-921286631fa9/go.mod h1:S2oDrQGGwySpoQPVqRShND87VCbxmc6bL1Yd2oYrm6k=
golang.org/x/image v0.0.0-20191009234506-e7c1f5e7dbb8/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
golang.org/x/image v0.18.0 h1:jGzIakQa/ZXI1I0Fxvaa9W7yP25TqT6cHIHn+6CqvSQ=
golang.org/x/image v0.18.0/go.mod h1:4yyo5vMFQjVjUcVk4jEQcU9MGy/rulF5WvUILseCM2E=
golang.org/x/image v0.22.0 h1:UtK5yLUzilVrkjMAZAZ34DXGpASN8i8pj8g+O+yd10g=
golang.org/x/image v0.22.0/go.mod h1:9hPFhljd4zZ1GNSIZJ49sqbp45GKK9t6w+iXvGqZUz4=
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
@ -167,10 +168,6 @@ golang.org/x/sys v0.20.0 h1:Od9JTbYCk261bKm4M/mw7AklTlFYIa0bIp9BgSm1S8Y=
golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.15.0 h1:h1V/4gjBv8v9cjcR6+AR5+/cIYK5N/WAgiv4xlsEtAk=
golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
golang.org/x/text v0.16.0 h1:a94ExnEXNtEwYLGJSIUxnWoxoRz/ZcCsV63ROupILh4=
golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI=
golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug=
golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=

12
main.go

@ -2,6 +2,7 @@ package main
import (
"appNewPlatform/appConstant"
"appNewPlatform/controller/common"
"appNewPlatform/initialization"
"fmt"
"runtime"
@ -18,6 +19,17 @@ func main() {
appConstant.MaxCpuNumber = Ncpu
fmt.Printf("设置并发服务器核心数量:%v\n", Ncpu)
runtime.GOMAXPROCS(Ncpu) //设置使用核心数量
inputImagePath := ".\\assets\\img\\1.png" // 替换为实际的输入图像路径,可支持PNG或JPEG
outputSVGPath := "./assets/svg/output_image1111.svg" // 替换为实际的输出SVG路径
common.JpgPngToSvgw(inputImagePath, outputSVGPath)
// if err != nil {
// fmt.Println("转换失败:", err)
// } else {
// fmt.Println("转换成功,SVG文件已生成:", outputSVGPath)
// }
//加载数据库
initialization.LoadingDatabase()
//加载Redis

Loading…
Cancel
Save