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)
使用示例
- 将图片适应屏幕大小转换(默认):
image2ascii -f docs/images/pikaqiu2.jpg
- 指定宽度和高度转换:
# width: 100
# height: 30
image2ascii -f docs/images/baozou.jpg -w 100 -g 30
- 按比例缩放转换:
# ratio: 0.3
# width: imageWidth * 0.3
# height: imageHeight * 0.3
image2ascii -f docs/images/pikaqiu.jpg -r 0.3
- 拉伸图片以适应屏幕:
image2ascii -f docs/images/long.jpg -t
- 无彩色转换:
image2ascii -f docs/images/lufei.jpg -s -c=false
- 禁用适应屏幕:
image2ascii -f docs/images/lufei.jpg -s=false
- 反转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字符画 |
---|---|
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
许可证
本项目采用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)
}
注意事项
- 对于彩色输出,确保你的终端支持ANSI颜色代码
- 较大的图片转换可能需要更多时间
- 输出效果受终端字体影响,等宽字体效果最佳
- 可以调整字符集来获得不同的艺术效果
这个库简单易用,适合快速将图片转换为ASCII艺术,可以用于生成终端艺术、创建独特的文本图像等场景。