37. 图片(image)生成器

作者: 厚土火焱 | 来源:发表于2017-08-26 23:51 被阅读164次

图片的操控有点复杂。Image类型有一些必要的方法必须实现。而 Image 本身也要构建一个最简单的结构体,包含图片的宽和高。
我们实现一个给定了大小的图片,然后把这个图片输出。
图片基本的结构和方法

type Image struct{
    width  int
    height int
}

func (img Image) ColorModel() color.Model {
    return color.RGBAModel
}

func (img Image) Bounds() image.Rectangle {
    return image.Rect(0, 0, img.width, img.height)
}

func (img Image) At(x, y int) color.Color {
    return color.RGBA{uint8(x), uint8(y), uint8(255), uint8(255)}
}

图片输出的方法

func Show(f func(int, int) [][]uint8) {
    const (
        dx = 256
        dy = 256
    )
    data := f(dx, dy)
    m := image.NewNRGBA(image.Rect(0, 0, dx, dy))
    for y := 0; y < dy; y++ {
        for x := 0; x < dx; x++ {
            v := data[y][x]
            i := y*m.Stride + x*4
            m.Pix[i] = v
            m.Pix[i+1] = v
            m.Pix[i+2] = 255
            m.Pix[i+3] = 255
        }
    }
    ShowImage(m)
}

func ShowImage(m image.Image) {
    var buf bytes.Buffer
    err := png.Encode(&buf, m)
    if err != nil {
        panic(err)
    }
    enc := base64.StdEncoding.EncodeToString(buf.Bytes())
    fmt.Println("IMAGE:" + enc)
}

在 22篇我们实现过一个图片程序,本篇的完整代码如下。你可以两篇对比着看有何区别。

package main

import (
    "bytes"
    "encoding/base64"
    "fmt"
    "image"
    "image/png"
    "image/color"
)

func Show(f func(int, int) [][]uint8) {
    const (
        dx = 256
        dy = 256
    )
    data := f(dx, dy)
    m := image.NewNRGBA(image.Rect(0, 0, dx, dy))
    for y := 0; y < dy; y++ {
        for x := 0; x < dx; x++ {
            v := data[y][x]
            i := y*m.Stride + x*4
            m.Pix[i] = v
            m.Pix[i+1] = v
            m.Pix[i+2] = 255
            m.Pix[i+3] = 255
        }
    }
    ShowImage(m)
}

func ShowImage(m image.Image) {
    var buf bytes.Buffer
    err := png.Encode(&buf, m)
    if err != nil {
        panic(err)
    }
    enc := base64.StdEncoding.EncodeToString(buf.Bytes())
    fmt.Println("IMAGE:" + enc)
}

type Image struct{
    width  int
    height int
}

func (img Image) ColorModel() color.Model {
    return color.RGBAModel
}

func (img Image) Bounds() image.Rectangle {
    return image.Rect(0, 0, img.width, img.height)
}

func (img Image) At(x, y int) color.Color {
    return color.RGBA{uint8(x), uint8(y), uint8(255), uint8(255)}
}

func main() {
    m := Image{500,500}
    ShowImage(m)
}

输出的结果

图片宽高都是500 图片宽高都是255

相关文章

  • 37. 图片(image)生成器

    图片的操控有点复杂。Image类型有一些必要的方法必须实现。而 Image 本身也要构建一个最简单的结构体,包含图...

  • 答题卡格子作文图片生成器

    答题卡格子作文图片生成器(article-image-generator) 简介 如标题所见,这个项目可以将电子稿...

  • 【A Tour of Go 练习】:图像

    还记得之前编写的图片生成器吗?我们再来编写另外一个,不过这次它将会返回一个 image.Image 的实现而非一个...

  • Widget-Image

    Image Image.asset:加载资源图片 Image.network:网络资源图片 Image.fi...

  • 3. Image组件

    Image Image.network(): 加载远程图片Image.asset(): 加载本地图片 显示网络图片...

  • composer

    [图片上传失败...(image-836231-1535956121516)] [图片上传失败...(image-...

  • Flask 上传图片

    #上传图片 if image: image_name=pothos.save(image) image_url =...

  • 2019-04-01

    [图片上传失败...(image-383a45-1554105875851)] [图片上传失败...(image-...

  • 初学者系列:halcon(一) 图像输入imread,摄像头

    1、读取单张图片读取图像,read_image函数 读取单张图片'''read_image(Image,'E:/d...

  • 比绘本更好的是AR绘本

    [图片上传中...(image-4840fc-1510399774056-12)] [图片上传中...(image...

网友评论

    本文标题:37. 图片(image)生成器

    本文链接:https://www.haomeiwen.com/subject/nravdxtx.html