英文:
golang pic.ShowImage why is it not generating the image but sending me the base64 value
问题
你使用Golang学习Golang,是否有什么问题需要更改配置信息?你的代码如下:
package main
import (
"golang.org/x/tour/pic"
"image"
"image/color"
)
type Image struct{} //新建一个Image结构体
func (i Image) ColorModel() color.Model { //实现Image包中颜色模式的方法
return color.RGBAModel
}
func (i Image) Bounds() image.Rectangle { //实现Image包中生成图片边界的方法
return image.Rect(0, 0, 200, 200)
}
func (i Image) At(x, y int) color.Color { //实现Image包中生成图像某个点的方法
return color.RGBA{uint8(x), uint8(y), uint8(255), uint8(255)}
}
func main() {
m := Image{}
pic.ShowImage(m) //调用
}
你使用了https://tour.go-zh.org/methods/24并运行了Golang代码,返回了一张图片。
英文:
i use golang study golang, Is there something wrong with my goland? Need to change configuration information?
my code
package main
import (
"golang.org/x/tour/pic"
"image"
"image/color"
)
type Image struct{} //新建一个Image结构体
func (i Image) ColorModel() color.Model { //实现Image包中颜色模式的方法
return color.RGBAModel
}
func (i Image) Bounds() image.Rectangle { //实现Image包中生成图片边界的方法
return image.Rect(0, 0, 200, 200)
}
func (i Image) At(x, y int) color.Color { //实现Image包中生成图像某个点的方法
return color.RGBA{uint8(x), uint8(y), uint8(255), uint8(255)}
}
func main() {
m := Image{}
pic.ShowImage(m) //调用
}
i use https://tour.go-zh.org/methods/24 and run golang return a picture
答案1
得分: 2
你的代码和Goland没有问题。
在Go Playground上显示图像的原因是因为Go Playground本身支持这个功能。
pic.ShowImage()
并没有什么神奇之处,它只是将文本打印到标准输出。它打印出IMAGE:
以及你传递的图像的Base64编码数据,编码为PNG图像。是Go Playground解释标准输出,如果输出以IMAGE:
开头,后端将解释输出的其余部分作为图像的Base64编码形式,并生成一个显示该图像的HTML <img>
标签。
可以通过以下示例进行验证:
func main() {
img := image.NewRGBA(image.Rect(0, 0, 100, 100))
red := color.RGBA{R: 255, A: 255}
for i := 0; i < 100; i++ {
img.Set(i, i, red)
}
buf := &bytes.Buffer{}
if err := png.Encode(buf, img); err != nil {
panic(err)
}
fmt.Println("IMAGE:" + base64.StdEncoding.EncodeToString(buf.Bytes()))
}
在Go Playground上运行此代码将得到以下结果(可以尝试:https://go.dev/play/p/N0RQSTBcqdE):
英文:
There is nothing wrong with your code or your Goland.
The reason why the image is displayed on the Go Playground is because the Go Playground itself supports this. It's kind of like a feature.
pic.ShowImage()
does nothing magical just prints text to the standard output. It prints IMAGE:
and the Base64-encoded data of the image you pass, encoded as a PNG image. It's the Go Playground that interprets the standard output, and if the output starts with IMAGE:
, the backend interprets the rest of the output as the Base64 encoded form of the image, generates an HTML <img>
tag displaying that image.
See this example to verify:
func main() {
img := image.NewRGBA(image.Rect(0, 0, 100, 100))
red := color.RGBA{R: 255, A: 255}
for i := 0; i < 100; i++ {
img.Set(i, i, red)
}
buf := &bytes.Buffer{}
if err := png.Encode(buf, img); err != nil {
panic(err)
}
fmt.Println("IMAGE:" + base64.StdEncoding.EncodeToString(buf.Bytes()))
}
This code running on the Go Playground will result in (try it: https://go.dev/play/p/N0RQSTBcqdE):
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论