Created
June 21, 2023 10:23
-
-
Save itcuihao/71c4d5b5f097e2ff83cd4e552d92e83a to your computer and use it in GitHub Desktop.
golang gen plantuml png
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
```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