golang将图片转换为ASCII字符画插件库image2ascii的使用

Golang将图片转换为ASCII字符画插件库image2ascii的使用

介绍

Image2ASCII是一个将图片转换为ASCII字符画的库,同时提供了命令行工具方便使用。

安装

go install github.com/qeesung/image2ascii@latest

命令行工具使用

基本命令格式:

image2ascii [-s] -f <filename> -r <ratio> -w <width> -g <height>

选项说明:

  • -c: 在终端输出彩色ASCII字符画(默认为true)
  • -f: 要转换的图片文件名(默认为"docs/images/lufei.jpg")
  • -g: 期望的图片高度,-1表示使用图片原始高度(默认为-1)
  • -i: 反转ASCII字符
  • -r: 图片缩放比例,当使用-w或-g时会被忽略(默认为1)
  • -s: 适应终端屏幕大小,当使用-w、-g、-r时会被忽略(默认为true)
  • -t: 拉伸图片以适应屏幕
  • -w: 期望的图片宽度,-1表示使用图片原始宽度(默认为-1)

使用示例

  1. 将图片适应屏幕大小转换(默认):
image2ascii -f docs/images/pikaqiu2.jpg
  1. 指定宽度和高度转换:
# width: 100
# height: 30
image2ascii -f docs/images/baozou.jpg -w 100 -g 30
  1. 按比例缩放转换:
# ratio: 0.3
# width: imageWidth * 0.3
# height: imageHeight * 0.3
image2ascii -f docs/images/pikaqiu.jpg -r 0.3
  1. 拉伸图片以适应屏幕:
image2ascii -f docs/images/long.jpg -t
  1. 无彩色转换:
image2ascii -f docs/images/lufei.jpg -s -c=false
  1. 禁用适应屏幕:
image2ascii -f docs/images/lufei.jpg -s=false
  1. 反转ASCII字符:
image2ascii -f docs/images/lufei.jpg -i

库使用示例

package main

import (
	"fmt"
	"github.com/qeesung/image2ascii/convert"
	_ "image/jpeg"
	_ "image/png"
)

func main() {
	// 创建转换选项
	convertOptions := convert.DefaultOptions
	convertOptions.FixedWidth = 100
	convertOptions.FixedHeight = 40

	// 创建图片转换器
	converter := convert.NewImageConverter()
	fmt.Print(converter.ImageFile2ASCIIString(imageFilename, &convertOptions))
}

转换选项结构

type Options struct {
	Ratio           float64 // 转换比例
	FixedWidth      int     // 固定宽度
	FixedHeight     int     // 固定高度
	FitScreen       bool    // 仅终端有效,适应终端高度或宽度
	StretchedScreen bool    // 仅终端有效,拉伸宽高以适应终端屏幕
	Colored         bool    // 仅终端有效,输出彩色ASCII
	Reversed        bool    // 是否反转ASCII像素
}

支持的转换函数

type Converter interface {
	// 将图片对象转换为ASCII矩阵
	Image2ASCIIMatrix(image image.Image, imageConvertOptions *Options) []string
	// 将图片对象转换为ASCII字符串
	Image2ASCIIString(image image.Image, options *Options) string
	// 通过图片文件名转换为ASCII矩阵
	ImageFile2ASCIIMatrix(imageFilename string, option *Options) []string
	// 通过图片文件名转换为ASCII字符串
	ImageFile2ASCIIString(imageFilename string, option *Options) string
}

示例输出

原始图片 ASCII字符画
Lufei Lufei ASCII
Lufei Lufei Colored ASCII
Pikachu Pikachu ASCII
Pikachu Pikachu Colored ASCII
Baozou Baozou ASCII
Baozou Baozou Colored ASCII

许可证

本项目采用MIT许可证。


更多关于golang将图片转换为ASCII字符画插件库image2ascii的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html

1 回复

更多关于golang将图片转换为ASCII字符画插件库image2ascii的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


使用image2ascii库将图片转换为ASCII字符画

image2ascii是一个Go语言库,可以将图片转换为ASCII字符画。下面我将详细介绍如何使用这个库。

安装

首先安装image2ascii库:

go get github.com/qeesung/image2ascii/convert

基本使用示例

package main

import (
	"fmt"
	"github.com/qeesung/image2ascii/convert"
	"image"
	_ "image/jpeg"
	_ "image/png"
	"os"
)

func main() {
	// 打开图片文件
	file, err := os.Open("example.jpg")
	if err != nil {
		fmt.Println("打开图片失败:", err)
		return
	}
	defer file.Close()

	// 解码图片
	img, _, err := image.Decode(file)
	if err != nil {
		fmt.Println("解码图片失败:", err)
		return
	}

	// 创建转换器
	converter := convert.NewImageConverter()
	
	// 设置转换选项
	options := convert.DefaultOptions
	options.FixedWidth = 100  // 设置输出宽度
	options.FixedHeight = 40  // 设置输出高度
	options.Colored = true    // 是否使用彩色输出
	options.Reversed = false  // 是否反转字符(黑白反转)

	// 转换为ASCII
	asciiArt := converter.Image2ASCIIString(img, &options)
	
	// 打印结果
	fmt.Println(asciiArt)
}

高级选项

image2ascii提供了多种配置选项来自定义输出:

options := convert.DefaultOptions
options.FixedWidth = 120      // 输出宽度(字符数)
options.FixedHeight = 60      // 输出高度(字符数)
options.Colored = true        // 彩色输出
options.Reversed = false      // 反转颜色
options.Ratio = 2.0           // 宽高比调整
options.FitScreen = false     // 是否适应终端大小
options.StretchedScreen = false // 是否拉伸适应

支持的字符集

你可以自定义使用的字符集:

options.CharSet = []string{"@", "#", "S", "%", "?", "*", "+", ";", ":", ",", "."}

从URL加载图片

func convertFromURL(url string) {
	resp, err := http.Get(url)
	if err != nil {
		fmt.Println("获取图片失败:", err)
		return
	}
	defer resp.Body.Close()

	img, _, err := image.Decode(resp.Body)
	if err != nil {
		fmt.Println("解码图片失败:", err)
		return
	}

	converter := convert.NewImageConverter()
	asciiArt := converter.Image2ASCIIString(img, &convert.DefaultOptions)
	fmt.Println(asciiArt)
}

保存到文件

func saveToFile(asciiArt string, filename string) {
	err := os.WriteFile(filename, []byte(asciiArt), 0644)
	if err != nil {
		fmt.Println("保存文件失败:", err)
		return
	}
	fmt.Println("ASCII艺术已保存到", filename)
}

完整示例

package main

import (
	"fmt"
	"github.com/qeesung/image2ascii/convert"
	"image"
	_ "image/jpeg"
	_ "image/png"
	"net/http"
	"os"
)

func main() {
	// 1. 从本地文件转换
	convertLocalImage("input.jpg", "output.txt")

	// 2. 从URL转换
	convertFromURL("https://example.com/image.jpg")
}

func convertLocalImage(inputPath, outputPath string) {
	file, err := os.Open(inputPath)
	if err != nil {
		fmt.Println("打开图片失败:", err)
		return
	}
	defer file.Close()

	img, _, err := image.Decode(file)
	if err != nil {
		fmt.Println("解码图片失败:", err)
		return
	}

	converter := convert.NewImageConverter()
	options := convert.DefaultOptions
	options.FixedWidth = 100
	options.FixedHeight = 50
	options.Colored = true

	asciiArt := converter.Image2ASCIIString(img, &options)
	
	// 打印到控制台
	fmt.Println(asciiArt)
	
	// 保存到文件
	saveToFile(asciiArt, outputPath)
}

func convertFromURL(url string) {
	resp, err := http.Get(url)
	if err != nil {
		fmt.Println("获取图片失败:", err)
		return
	}
	defer resp.Body.Close()

	img, _, err := image.Decode(resp.Body)
	if err != nil {
		fmt.Println("解码图片失败:", err)
		return
	}

	converter := convert.NewImageConverter()
	asciiArt := converter.Image2ASCIIString(img, &convert.DefaultOptions)
	fmt.Println(asciiArt)
}

func saveToFile(asciiArt string, filename string) {
	err := os.WriteFile(filename, []byte(asciiArt), 0644)
	if err != nil {
		fmt.Println("保存文件失败:", err)
		return
	}
	fmt.Println("ASCII艺术已保存到", filename)
}

注意事项

  1. 对于彩色输出,确保你的终端支持ANSI颜色代码
  2. 较大的图片转换可能需要更多时间
  3. 输出效果受终端字体影响,等宽字体效果最佳
  4. 可以调整字符集来获得不同的艺术效果

这个库简单易用,适合快速将图片转换为ASCII艺术,可以用于生成终端艺术、创建独特的文本图像等场景。

回到顶部