ZBLOG

golang 实现github hash头像生成

Github hash头像生成是一种将字符串转换为独特的图像表示形式的方法。在Go中,可以使用以下步骤实现此功能:

  1. 导入必要的包
import (
    "crypto/md5"
    "encoding/hex"
    "github.com/nfnt/resize"
    "image"
    "image/color"
    "image/draw"
    "image/png"
    "math"
)
  1. 定义生成头像的函数
func GenerateAvatar(username string, size uint) ([]byte, error) {
    // 计算哈希值
    hash := md5.New()
    _, err := hash.Write([]byte(username))
    if err != nil {
        return nil, err
    }
    hashBytes := hash.Sum(nil)
    hashStr := hex.EncodeToString(hashBytes)

    // 创建画布
    canvas := image.NewRGBA(image.Rect(0, 0, int(size), int(size)))
    background := color.RGBA{R: 245, G: 245, B: 245, A: 255}
    draw.Draw(canvas, canvas.Bounds(), &image.Uniform{background}, image.Point{}, draw.Src)

    // 计算色块数量和大小
    blockCount := len(hashStr) / 2
    blockSize := int(math.Ceil(float64(size) / float64(blockCount)))

    // 绘制色块
    for i := 0; i < blockCount; i++ {
        blockColor := color.RGBA{
            R: uint8(hashBytes[i*2]),
            G: uint8(hashBytes[i*2+1]),
            B: 128,
            A: 255,
        }
        startX := i * blockSize
        startY := 0
        endX := (i + 1) * blockSize
        endY := int(size)
        block := image.NewRGBA(image.Rect(0, 0, blockSize, blockSize))
        draw.Draw(block, block.Bounds(), &image.Uniform{blockColor}, image.Point{}, draw.Src)
        draw.Draw(canvas, image.Rect(startX, startY, endX, endY), block, image.Point{}, draw.Src)
    }

    // 缩放图片
    avatar := resize.Resize(size, size, canvas, resize.Lanczos3)

    // 将图像编码为PNG格式
    buffer := new(bytes.Buffer)
    err = png.Encode(buffer, avatar)
    if err != nil {
        return nil, err
    }

    return buffer.Bytes(), nil
}
  1. 调用函数生成头像
avatar, err := GenerateAvatar("github", 256)
if err != nil {
    fmt.Println(err)
}

以上代码将生成一个以字符串”github”的哈希值为基础的256x256像素的头像。可以根据需要修改参数来调整头像的大小和基础字符串。

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=2317

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?