golang的pic.ShowImage为什么没有生成图像,而是给我发送了base64值?

huangapple go评论160阅读模式
英文:

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) //调用
}

golang的pic.ShowImage为什么没有生成图像,而是给我发送了base64值?

i use https://tour.go-zh.org/methods/24 and run golang return a picture
golang的pic.ShowImage为什么没有生成图像,而是给我发送了base64值?

答案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):

golang的pic.ShowImage为什么没有生成图像,而是给我发送了base64值?

英文:

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 &lt;img&gt; 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 &lt; 100; i++ {
		img.Set(i, i, red)
	}

	buf := &amp;bytes.Buffer{}
	if err := png.Encode(buf, img); err != nil {
		panic(err)
	}

	fmt.Println(&quot;IMAGE:&quot; + base64.StdEncoding.EncodeToString(buf.Bytes()))
}

This code running on the Go Playground will result in (try it: https://go.dev/play/p/N0RQSTBcqdE):

golang的pic.ShowImage为什么没有生成图像,而是给我发送了base64值?

huangapple
  • 本文由 发表于 2022年10月14日 23:31:06
  • 转载请务必保留本文链接:https://go.coder-hub.com/74071586.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定