先看一个简单代码, 它执行后会产生下面的300*500的png图片文件:
代码:
1: package main
2:
3: import (
4: "fmt"
5: "image"
6: "image/color"
7: "image/png"
8: "log"
9: "os"
10: )
11:
12: func main() {
13: const (
14: dx = 300
15: dy = 500
16: )
17:
18: // 需要保存的文件
19: imgcounter := 123
20: imgfile, _ := os.Create(fmt.Sprintf("%03d.png", imgcounter))
21: defer imgfile.Close()
22:
23: // 新建一个 指定大小的 RGBA位图
24: img := image.NewNRGBA(image.Rect(0, 0, dx, dy))
25:
26: for y := 0; y < dy; y++ {
27: for x := 0; x < dx; x++ {
28: // 设置某个点的颜色,依次是 RGBA
29: img.Set(x, y, color.RGBA{uint8(x % 256), uint8(y % 256), 0, 255})
30: }
31: }
32:
33: // 以PNG格式保存文件
34: err := png.Encode(imgfile, img)
35: if err != nil {
36: log.Fatal(err)
37: }
38:
39: }
我们再看一个代码,以http文件流的方式展示图片,效果如下:
1: package main
2:
3: import (
4: "image"
5: "image/color"
6: "image/png"
7: "net/http"
8: "time"
9: )
10:
11: func pic(w http.ResponseWriter, req *http.Request) {
12: const (
13: dx = 300
14: dy = 500
15: )
16:
17: // 新建一个 指定大小的 RGBA位图
18: img := image.NewNRGBA(image.Rect(0, 0, dx, dy))
19:
20: for y := 0; y < dy; y++ {
21: for x := 0; x < dx; x++ {
22: // 设置某个点的颜色,依次是 RGBA
23: img.Set(x, y, color.RGBA{uint8(x % 256), uint8(y % 256), 0, 255})
24: }
25: }
26:
27: // 图片流方式输出
28: w.Header().Set("Content-Type", "image/png")
29: png.Encode(w, img)
30: }
31:
32: func main() {
33: http.HandleFunc("/", pic)
34: s := &http.Server{
35: Addr: ":82",
36: ReadTimeout: 30 * time.Second,
37: WriteTimeout: 30 * time.Second,
38: MaxHeaderBytes: 1 << 20}
39: s.ListenAndServe()
40:
41: }
通过两种方式来展示图片,我们可以看到,上面两个代码最大的区别就是输出源不一样, 一个是到文件,一个是到http流. 而我们的代码也很清晰的展示了这两种方式只需要修改对应的实现即可.其他代码是没有变化的.
这里代码中的 image.NewNRGBA 返回的 image对象是一个内存中的图片。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示
2012-11-25 Android大图片内存清理
2011-11-25 PHP 和 Android MD5 加密出来结果是一样的代码
2010-11-25 win7 下安装 Microsoft Web Application Stress Tool