golang生成占位图片的小型工具插件库goplaceholder的使用

golang生成占位图片的小型工具插件库goplaceholder的使用

goplaceholder是一个用于生成占位图片的小型Golang库。

安装

$ go get github.com/michiwend/goplaceholder

使用示例

下面是一个简单的使用示例,生成一个带有文本的占位图片:

package main

import (
    "github.com/michiwend/goplaceholder"
    "image/color"
    "os"
)

func main() {
    // 生成占位图片
    // 参数说明:
    // 1. 要显示的文本
    // 2. 字体文件路径
    // 3. 文本颜色 (RGBA)
    // 4. 背景颜色 (RGBA)
    // 5. 图片宽度
    // 6. 图片高度
    placeholder, err := goplaceholder.Placeholder(
        "Lorem ipsum!",
        "/usr/share/fonts/TTF/DejaVuSans-Bold.ttf",
        color.RGBA{150, 150, 150, 255},
        color.RGBA{204, 204, 204, 255},
        400, 200)
    
    if err != nil {
        panic(err)
    }
    
    // 将图片保存到文件
    file, err := os.Create("placeholder.png")
    if err != nil {
        panic(err)
    }
    defer file.Close()
    
    err = png.Encode(file, placeholder)
    if err != nil {
        panic(err)
    }
}

执行上述代码将生成一个400x200像素的灰色背景图片,上面显示"Lorem ipsum!"文本。

Web服务

goplaceholder也可以作为Web服务使用,支持以下请求格式:

  • /800x600.png
  • /800x600.png?text=foo
  • /500.png
  • /500.png?text=foo

你可以通过访问placeholder.michiwend.com来试用这个Web服务。


更多关于golang生成占位图片的小型工具插件库goplaceholder的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html

1 回复

更多关于golang生成占位图片的小型工具插件库goplaceholder的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


使用goplaceholder生成占位图片的Golang工具库

goplaceholder是一个轻量级的Golang库,用于快速生成各种尺寸和样式的占位图片。下面我将介绍如何使用这个库以及提供一些示例代码。

安装

首先安装goplaceholder库:

go get github.com/icza/goplaceholder

基本用法

1. 生成简单占位图

package main

import (
	"os"
	"github.com/icza/goplaceholder"
)

func main() {
	// 生成300x200的占位图
	img := goplaceholder.Generate(300, 200)
	
	// 保存为PNG文件
	f, _ := os.Create("placeholder.png")
	defer f.Close()
	img.Encode(f, "png")
}

2. 自定义颜色和文字

package main

import (
	"os"
	"image/color"
	"github.com/icza/goplaceholder"
)

func main() {
	// 自定义配置
	cfg := goplaceholder.Config{
		Width:      400,
		Height:     300,
		BgColor:    color.RGBA{220, 220, 220, 255}, // 浅灰色背景
		TextColor:  color.RGBA{100, 100, 100, 255}, // 深灰色文字
		Text:       "400x300",                      // 自定义文字
		TextSize:   24,                             // 文字大小
	}
	
	img := goplaceholder.GenerateWithConfig(cfg)
	
	f, _ := os.Create("custom_placeholder.png")
	defer f.Close()
	img.Encode(f, "png")
}

高级功能

1. 生成Base64编码的图片

package main

import (
	"encoding/base64"
	"strings"
	"github.com/icza/goplaceholder"
)

func getBase64Placeholder(width, height int) string {
	img := goplaceholder.Generate(width, height)
	
	var sb strings.Builder
	w := base64.NewEncoder(base64.StdEncoding, &sb)
	img.Encode(w, "png")
	w.Close()
	
	return "data:image/png;base64," + sb.String()
}

func main() {
	base64Img := getBase64Placeholder(250, 150)
	println(base64Img) // 可以直接用在HTML中
}

2. HTTP服务提供占位图

package main

import (
	"fmt"
	"net/http"
	"strconv"
	"github.com/icza/goplaceholder"
)

func placeholderHandler(w http.ResponseWriter, r *http.Request) {
	// 从URL参数获取宽高
	width, _ := strconv.Atoi(r.URL.Query().Get("w"))
	height, _ := strconv.Atoi(r.URL.Query().Get("h"))
	
	if width <= 0 {
		width = 300
	}
	if height <= 0 {
		height = 200
	}
	
	// 生成图片
	img := goplaceholder.Generate(width, height)
	
	// 设置响应头
	w.Header().Set("Content-Type", "image/png")
	
	// 输出图片
	img.Encode(w, "png")
}

func main() {
	http.HandleFunc("/placeholder", placeholderHandler)
	fmt.Println("Server running on :8080")
	http.ListenAndServe(":8080", nil)
}

访问方式:http://localhost:8080/placeholder?w=400&h=300

自定义选项

goplaceholder.Config结构体支持以下自定义选项:

type Config struct {
	Width      int          // 图片宽度
	Height     int          // 图片高度
	BgColor    color.Color  // 背景颜色
	TextColor  color.Color  // 文字颜色
	Text       string       // 显示的文字
	TextSize   int          // 文字大小(像素)
	TextX      int          // 文字X位置(默认居中)
	TextY      int          // 文字Y位置(默认居中)
}

性能考虑

goplaceholder是一个轻量级库,生成图片非常快速。如果需要频繁生成大量占位图,可以考虑:

  1. 缓存已生成的图片
  2. 预生成常用尺寸的图片
  3. 使用并发生成(goroutine)
package main

import (
	"sync"
	"github.com/icza/goplaceholder"
)

func generatePlaceholders(sizes []struct{ w, h int }) []*image.Image {
	var wg sync.WaitGroup
	images := make([]*image.Image, len(sizes))
	
	for i, size := range sizes {
		wg.Add(1)
		go func(idx int, width, height int) {
			defer wg.Done()
			img := goplaceholder.Generate(width, height)
			images[idx] = &img
		}(i, size.w, size.h)
	}
	
	wg.Wait()
	return images
}

func main() {
	sizes := []struct{ w, h int }{
		{100, 100},
		{200, 100},
		{300, 150},
		{400, 200},
	}
	
	images := generatePlaceholders(sizes)
	// 使用images...
}

goplaceholder是一个简单但功能完善的占位图生成工具,适合在开发阶段快速生成测试用的图片占位符。

回到顶部