Skip to content

Instantly share code, notes, and snippets.

@itcuihao
Created June 21, 2023 10:23
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save itcuihao/71c4d5b5f097e2ff83cd4e552d92e83a to your computer and use it in GitHub Desktop.
Save itcuihao/71c4d5b5f097e2ff83cd4e552d92e83a to your computer and use it in GitHub Desktop.
golang gen plantuml png
```golang
package handle
import (
"encoding/base64"
"fmt"
"image"
"image/png"
"io/ioutil"
"log"
"net/http"
"os"
"strings"
)
func GenMindMap() (objPic string) {
url := "https://uml.asp.ugleberg.dk/api/Render"
method := "POST"
payload := strings.NewReader(`"@startmindmap\n<style>\nmindmapDiagram {\n .green {\n BackgroundColor lightgreen\n }\n .rose {\n BackgroundColor #FFBBCC\n }\n .your_style_name {\n BackgroundColor lightblue\n }\n}\n</style>\n+ 库名(Dreamacro/clash) <<rose>>\n++ 库的文档\n+++ Clash 是一款使用 Go 语言编写的高性能代理服务器,支持 HTTP、SOCKS5、VMess 等多种代理协议。\n+++ Clash 提供了丰富的配置选项和自定义规则,可以实现精细的网络流量控制和防火墙策略。\n+++ Clash 的文档详细介绍了如何安装、配置和使用 Clash,以及相关的常见问题和解决方案。\n\n++ 代码结构\n+++ Clash 代码结构清晰,主要包括 cmd、core、proxies、scripts、ui 等几个目录。\n+++ 源代码采用 Go 语言实现,使用了 Go 的标准库和第三方库,如 gin、viper、gRPC 等。\n+++ 源代码中包含了代理服务器的核心功能实现,以及各种代理协议和规则的解析和转发。\n\n++ 依赖关系\n+++ Clash 依赖了多个第三方库,如 gin、viper、gRPC、protobuf 等。\n+++ Clash 的兼容性较好,支持 Windows、Mac、Linux 等多个操作系统平台。\n+++ Clash 可以与多种代理软件和协议配合使用,如 Shadowsocks、Trojan、V2Ray 等。\n\n++ 性能和安全性\n+++ Clash 的性能较好,可以处理大量的网络流量和连接请求。\n+++ Clash 使用了加密安全的网络通信和数据传输方式,保证了数据的隐私和安全。\n+++ Clash 的代码经过了多次测试和优化,并且已经被广泛应用于生产环境中。\n@endmindmap"`)
client := &http.Client{}
req, err := http.NewRequest(method, url, payload)
if err != nil {
fmt.Println(err)
return
}
req.Header.Add("authority", "uml.asp.ugleberg.dk")
req.Header.Add("accept", "application/json")
req.Header.Add("accept-language", "zh-CN,zh;q=0.9")
req.Header.Add("content-type", "application/json")
req.Header.Add("cookie", "_ga=GA1.1.908227472.1687162998; _ga_TCK6146F9G=GS1.1.1687162998.1.0.1687163006.0.0.0")
req.Header.Add("origin", "https://uml.asp.ugleberg.dk")
req.Header.Add("referer", "https://uml.asp.ugleberg.dk/")
req.Header.Add("sec-ch-ua", "\"Not.A/Brand\";v=\"8\", \"Chromium\";v=\"114\", \"Google Chrome\";v=\"114\"")
req.Header.Add("sec-ch-ua-mobile", "?0")
req.Header.Add("sec-ch-ua-platform", "\"macOS\"")
req.Header.Add("sec-fetch-dest", "empty")
req.Header.Add("sec-fetch-mode", "cors")
req.Header.Add("sec-fetch-site", "same-origin")
req.Header.Add("user-agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36")
req.Header.Add("Referer", "https://uml.asp.ugleberg.dk/")
req.Header.Add("User-Agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36")
res, err := client.Do(req)
if err != nil {
fmt.Println(err)
return
}
defer res.Body.Close()
body, err := ioutil.ReadAll(res.Body)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(string(body))
objPic = string(body)
objPic = strings.Replace(objPic, "\"", "", -1)
return
}
func SavePng(base64Str string) {
// 去掉 Base64 编码的头部
imgBase64 := strings.Replace(base64Str, "data:image/png;base64,", "", 1)
// 解码 Base64 字符串
imgBytes, err := base64.StdEncoding.DecodeString(imgBase64)
if err != nil {
log.Fatal(err)
}
// 将字节数组转为图片
img, _, err := image.Decode(strings.NewReader(string(imgBytes)))
if err != nil {
log.Fatal(err)
}
// 将图片保存到文件
outFile, err := os.Create("out.png")
if err != nil {
log.Fatal(err)
}
defer outFile.Close()
err = png.Encode(outFile, img)
if err != nil {
log.Fatal(err)
}
}
```
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment