gpt4 book ai didi

go - 通过 Martini 提供解码图像

转载 作者:IT王子 更新时间:2023-10-29 00:54:32 24 4
gpt4 key购买 nike

我目前正在使用 golang 和 Martini 等,并希望动态地提供一些操作/生成的图像。这是一个最小的例子:

package main

import (
"github.com/codegangsta/martini"
"github.com/nfnt/resize"
"image"
"image/jpeg"
"log"
"os"
)

func thumb() image.Image {
file, err := os.Open("test.jpg")
if err != nil {
log.Fatal(err)
}

img, err := jpeg.Decode(file)
if err != nil {
log.Fatal(err)
}
file.Close()

m := resize.Resize(0, 200, img, resize.MitchellNetravali)

return m
}

func main() {
m := martini.Classic()
m.Get("/") image.Image {
return thumb()
})
m.Run()
}

编译很好,但我没有提供图像,而是得到一些“Content-Type:text/plain; charset=utf-8”,看起来像这样:

<*image.RGBA64 Value>

我很确定我需要再次对图像进行编码,然后再提供它。但是我不太确定如何在不将图像保存到磁盘的情况下执行此操作...

提前致谢!

最佳答案

您可以直接写入 ResponseWriter,因为它实现了 io.Writer 接口(interface),无需使用缓冲区或将图像复制到磁盘。

您几乎完成了,只需要设置内容类型并像您提到的那样将 image.Image 对象编码回 jpeg。幸运的是,jpeg.Encode() 方法需要写入程序,而您可以使用 ResponseWriter 来执行此操作,这要归功于 Martini 能够将其注入(inject)您的处理程序。

注意:您可能希望执行比我提供的更可靠的错误处理工作。这只是为了让球滚动。 ;)

package main

import (
"image"
"image/jpeg"
"log"
"net/http"
"os"

"github.com/codegangsta/martini"
"github.com/nfnt/resize"
)

func thumb() image.Image {
file, err := os.Open("test.jpg")
if err != nil {
log.Fatal(err)
}

img, err := jpeg.Decode(file)
if err != nil {
log.Fatal(err)
}
file.Close()

m := resize.Resize(0, 200, img, resize.MitchellNetravali)

return m
}

func main() {
m := martini.Classic()

m.Get("/", func(res http.ResponseWriter, req *http.Request) {
res.Header().Set("Content-Type", "image/jpeg")
err := jpeg.Encode(res, thumb(), &jpeg.Options{100})
if err != nil {
res.WriteHeader(500)
} else {
res.WriteHeader(200)
}
})
m.Run()
}

关于go - 通过 Martini 提供解码图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22565544/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com