Golang如何将图像写入标准输出
Golang如何将图像写入标准输出 我需要将图像写入标准输出,以便在Unix管道中使用,例如:
$ mycmd foo.jpg | cmd2 | cmd3
图像类型是 *image.NRGBA,我可以使用 Encode 函数将其成功写入文件,例如:
err := jpeg.Encode(fd, img, nil)
这工作正常,但如果我写入标准输出,例如:
err := jpeg.Encode(os.Stdout, img, nil)
生成的文件仅被识别为数据而不是jpeg,例如:
$ mycmd foo.jpg | file -
/dev/stdin: data
非常感谢任何帮助理解此问题,以便我能修复它。
此致,
D
更多关于Golang如何将图像写入标准输出的实战教程也可以访问 https://www.itying.com/category-94-b0.html
嗨 @nehakakar,
你的解决方案完全奏效了,非常感谢!我之前没有意识到需要从 os.Stdout 创建一个新的 bufio 写入器。我原以为 os.Stdout 本身就已经是一个 bufio 写入器了。不管怎样,再次感谢,我真的很感激你的帮助。
更多关于Golang如何将图像写入标准输出的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
在写入图像数据之前,请设置适当的 HTTP Content-Type 头部。
package main
import (
"image"
"image/jpeg"
"os"
)
func main() {
// 假设您已将图像存储在类型为 *image.NRGBA 的 `img` 变量中
// 将 Content-Type 头部设置为 "image/jpeg"
os.Stdout.Write([]byte("Content-Type: image/jpeg\n\n"))
// 对图像进行编码并将其写入标准输出
err := jpeg.Encode(os.Stdout, img, nil)
if err != nil {
// 处理错误
}
}
在写入图像数据之前将 “Content-Type” 头部设置为 “image/jpeg”,您向管道的接收端表明正在传输的数据是 JPEG 格式。 采用这种方法,当您运行如下命令时:
$ mycmd foo.jpg | cmd2 | cmd3
管道中后续的命令(cmd2 和 cmd3)会将 mycmd 的输出识别为 JPEG 图像。
祝一切顺利。
你可以直接使用 os.Stdout 作为 io.Writer 来写入图像数据。以下是示例代码:
package main
import (
"image"
"image/jpeg"
"os"
)
func main() {
// 假设 img 是你的 *image.NRGBA 图像
var img image.Image // 替换为你的图像数据
// 将图像以 JPEG 格式写入标准输出
if err := jpeg.Encode(os.Stdout, img, nil); err != nil {
panic(err)
}
}
确保你的程序只输出图像数据,不要添加任何额外的日志或输出。例如,避免在图像数据前后使用 fmt.Println。
如果你需要支持其他图像格式,可以使用相应的编码包,比如 image/png:
import "image/png"
// 写入 PNG 格式
if err := png.Encode(os.Stdout, img); err != nil {
panic(err)
}
检查你的程序是否在写入标准输出之前或之后打印了其他内容,这可能会破坏图像数据。

