You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
57 lines
1.1 KiB
57 lines
1.1 KiB
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)
|
|
}
|
|
|
|
}
|
|
|