Python将代码生成图片

类似工具

https://carbon.now.sh/ 这个是我之前经常用的,现在想要通过 API 去使用,看到 API 要收费,而且功能还没出,所以打算自己整一个。

用到的库(Python3.8)

pillow==9.4.0
Pygments==2.14.0

生成高亮代码

from pygments import highlight
from pygments.formatters.img import ImageFormatter
from pygments.lexers import get_lexer_by_name

# 生成高亮代码
language = "python"
code = """print('Hello World!')"""
formatter = ImageFormatter(font_name="Microsoft YaHei Microsoft YaHei Ul", font_size=14, line_numbers=True)
lexer = get_lexer_by_name(language)
highlight_code = highlight(code, lexer, formatter=formatter)

这里有两个地方要注意:

1、我看过相关文章好像可以把 language 赋为 None,那样会自动识别出来什么语言,但是我尝试的时候是报错的,所以这边还是指定语言比较好。

2、font_name 这边是要指定字体的名称,这里的名称我看库的源码的查询流程来看,指的应该是注册表里的名称,可以通过在命令行(cmd)输入

reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts"

注册表里的字体名称 就可以看到如上的图,名称是红框区域。

把生成的代码转成图片

import io

from PIL import Image
from pygments import highlight
from pygments.formatters.img import ImageFormatter
from pygments.lexers import get_lexer_by_name

# 生成高亮代码
language = "python"
code = """print('Hello World!')"""
formatter = ImageFormatter(font_name="Microsoft YaHei Microsoft YaHei Ul", font_size=14, line_numbers=True)
lexer = get_lexer_by_name(language)
highlight_code = highlight(code, lexer, formatter=formatter)

# 将代码转化为图片
image_data = io.BytesIO(highlight_code)
image = Image.open(image_data)
image.save("output.png")
image.close()

最终效果

通过代码生成的图片