Python | 使用Pygments生成漂亮的代码段截图

news2024/11/14 6:00:41

在创建技术文档或教程时,包含代码段的图像以说明特定的示例或概念可能会有所帮助。但是,对代码文件进行屏幕截图可能看起来不专业,并且难以阅读。本文将探索如何使用库pygments将编程代码转换为Python中美丽的图像片段。

Pygments库

Pygments是一个用Python编写的语法高亮引擎,它能够支持大量的语言和标记格式,并将源代码或其他标记格式化为包含高亮语法的处理后的版本。这些输出可以是HTML、ANSI序列(用于控制台输出)、LaTeX、RTF等多种格式。

Pygments包含四个主要模块:lexer、filter、formatter和style。lexer模块将代码解析成token流,每个token都包含类型和值两个属性。filter模块可以对lexer解析出来的token流进行过滤,根据条件修改某些token的属性或值。formatter模块定义了token流的最终输出格式,而style模块则定义了输出的风格,例如不同颜色的显示和是否粗体等。

在Pygments中,每种支持的语言或标记格式都有一个对应的lexer。Pygments还支持根据文件扩展名或内容自动猜测语言类型,并使用合适的lexer进行解析。此外,Pygments还提供了许多选项来控制lexer和formatter的行为,例如是否去除前导和尾随空格、是否输出行号等。

总的来说,Pygments是一个非常强大和灵活的语法高亮引擎,它可以用于许多不同的场景,如网页代码高亮显示、文档生成、代码编辑器等。

该库提供了各种自定义选项,例如从各种配色方案中进行选择和调整字体大小。它还支持多种文件格式用于输出最终图像,包括PNG,JPEG和SVG。

要在Python发行版中安装库,请在操作系统的命令处理器中运行以下命令:

pip install pygment

操作步骤

  1. 在Python脚本中使用以下语句导入库:from pygments import highlight
  2. 使用字符串变量定义要转换为图像的代码段。
  3. 使用highlight函数的lexer参数定义代码段的语言。
  4. 使用highlight函数的format参数定义输出图像的格式。选项包括png,jpg,svg和其他。
  5. 使用highlight函数的style参数定义输出图像的样式。您可以从预定义样式列表中进行选择或创建自定义样式。
  6. 调用highlight函数并传入代码片段、词法分析器、格式化程序和样式参数。该函数将返回代码段的图像数据。
  7. 使用Python中适当的文件处理函数将图像数据保存到文件中。

案例

使用“friendly”样式创建Python代码段的PNG图像

from pygments import highlight 
from pygments.lexers import PythonLexer 
from pygments.formatters import ImageFormatter 
  
code = """ 
def add(a, b): 
    return a + b 
"""
  
img = highlight(code, PythonLexer(),  
                ImageFormatter(style='friendly'),  
                outfile="code.png") 

输出

在这里插入图片描述
首先导入相关模块。要转换为片段的代码在字符串变量(多行)中定义。然后,定义代码语言的函数(在本例中为PythonLexer),格式样式(在本例中为friendly)和输出文件名作为参数传递给highlight函数。highlight函数生成指定语言的输出图像。

使用“xcode”样式创建JavaScript代码段的JPEG图像

from pygments import highlight 
from pygments.lexers import JavascriptLexer 
from pygments.formatters import ImageFormatter 

code = """ 
function add(a, b) { 
	return a + b; 
} 
"""

img = highlight(code, JavascriptLexer(), 
				ImageFormatter(style='xcode'), 
				outfile="code.jpeg") 

输出

在这里插入图片描述
上面的代码与前面的例子相同。这一次的代码为JavaScript语言,因此使用了Javascript Lexer函数,格式样式为xcode,输出文件名为code.jpg,作为参数传递给highlight函数。

使用“monokai”样式创建C++代码片段的SVG图像

from pygments import highlight 
from pygments.lexers import CppLexer 
from pygments.formatters import ImageFormatter 

code = """ 
int add(int a, int b) { 
	return a + b; 
} 
"""

img = highlight(code, CppLexer(), 
				ImageFormatter(style='monokai'), 
				outfile="code.svg") 

输出

在这里插入图片描述
代码与第一个示例中使用的代码相同。这次有一个C++代码、CppLexer函数、monokai格式化样式和输出文件名code.svg作为参数传递给highlight函数。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2105139.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于Java+SpringBoot+Vue+MySQL的失物招领管理系统

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 基于SpringBootVue的失物招领管理系统【附源码文档】、前后…

Java 入门指南:Java 并发编程 —— 并发容器 LinkedBlockingQueue

BlockingQueue BlockingQueue 是Java并发包(java.util.concurrent)中提供的一个阻塞队列接口,它继承自 Queue 接口。 BlockingQueue 中的元素采用 FIFO 的原则,支持多线程环境并发访问,提供了阻塞读取和写入的操作&a…

JavaEE---Spring MVC(4)

MVC学习小案例1 在这里我们要实现一个计算器的功能 在这之前,先解决一个bug! 写好代码之后开始运行,运行发现不对,sum计算不出来,然后我百思不得其解, 1.对着后端代码一顿输出,还是没觉得有问题. 2.对着前端代码一顿输出,也没看出任何问题 3.是不是我前后端交互出错了呢?查找…

Python案例 | 四阶龙格库塔法简介

1.引言 在数值分析中,龙格-库塔法(Runge-Kutta methods)是用于非线性常微分方程的解的重要的一类隐式或显式迭代法。这些技术由数学家卡尔龙格和马丁威尔海姆库塔于1900年左右发明。 龙格-库塔(Runge-Kutta)方法是一种在工程上应用广泛的高…

工厂验收(FAT)和现场验收(SAT)的含义

工厂验收(Factory Acceptance Test,FAT)和现场验收(Site Acceptance Test,SAT)是在工程领域中常见的术语,用于确保设备在制造商及用户之间达成一致的验收标准,保证设备能够正常、安全…

【图灵完备 Turing Complete】游戏经验攻略分享 Part.2 算术运算

算术运算部分算是开始有难度了。 前几关按照自己思路来,二进制速算应该没问题。 画真值表,卡诺图,推表达式。 下面几关,几个输出信号分开来看,有三个输出就画三个卡诺图,有几个画几个,分而治之。…

Shadow Dom 是什么

概念 官方:https://developer.mozilla.org/zh-CN/docs/Web/API/Web_components/Using_shadow_DOM 核心:影子 DOM(Shadow DOM)允许你将一个 DOM 树附加到一个元素上,并且使该树的内部对于在页面中运行的 JavaScript 和…

Java笔试面试题AI答之正则表达式(3)

文章目录 13. 简述Java String支持哪几种使用正则表达式的方法?14. 请列举常见校验数字的表达式 ?15. 请列举常见校验字符的表达式 ?1. 汉字2. 英文和数字3. 特定长度的字符串4. 由26个英文字母组成的字符串5. 由数字和26个英文字母组成的字符…

JVM面试(五)垃圾回收机制和算法

概述 了解Java虚拟机的垃圾回收机制(Garbage Collection,简称GC),我们也要像其作者John McCarthy一样,思考一下三个问题: 哪些内存需要回收?什么时候回收?如何回收? 虽…

pytorch+深度学习实现图像的神经风格迁移

本文的完整代码和部署教程已上传至本人的GitHub仓库,欢迎各位朋友批评指正! 1.各代码文件详解 1.1 train.py train.py 文件负责训练神经风格迁移模型。 加载内容和风格图片:使用 utils.load_image 函数加载并预处理内容和风格图片。初始化…

网络攻击全解析:主动、被动与钓鱼式攻击的深度剖析

在当今这个互联网高度普及与深度融合的时代,网络攻击,这一赛博空间的隐形威胁,正以前所未有的频率和复杂度挑战着网络安全乃至国家安全的底线。为了更好地理解并防范这些威胁,本文将深入剖析网络攻击的主要类型——主动攻击、被动…

程序设计基础

一、程序 1.什么是程序? 程序可以看作是对一系列动作的执行过程的描述。 计算机程序是指为了得到某种结果而由计算机等具有信息处理能力的装置执行的代码化指令序列。 程序的几个性质: ● 目的性 ● 分步性 ● 有限性 ● 可操作性 ● 有序性 2…

Splasthop 安全远程访问帮助企业对抗 Cobalt Strike 载荷网络攻击

一、背景 根据 FreeBuf(标题为:潜藏系统2个月未被发现,新型网络攻击瞄准中国高价值目标)和 The Hacker News(标题为:New Cyberattack Targets Chinese-Speaking Businesses with Cobalt Strike Payloads&a…

农产品自主供销系统小程序的设计

管理员账户功能包括:系统首页,个人中心,农产品管理,资讯信息管理,订单管理,资讯回复管理 微信端账号功能包括:系统首页,农产品,购物车,我的 开发系统&#…

接口自动化测试学习 —— Mock服务实现

1.Mock实现原理和实现机制 在某些时候,后端在开发接口的时候,处理逻辑非常复杂,在测试的时候,后端在未完成接口的情况下该如何去测试呢? 我们需要测试,但是有些请求又需要修改一下参数,或者改变…

说明书keithley2420吉时利2410数字源表

说明书keithley2420吉时利2410数字源表 产品概述 Keithley 2420 高压源表是一款 60W 仪器,设计用于提供和测量 5V(源)和 1V(测量)至 60V 的电压和 100pA 至 3A 的电流。2420 型的生产测试应用包括必须在更高电流水平下…

微信和苹果叫板的资本

这两天,关于苹果用户还能不能使用微信这么一个新闻炒得沸沸扬扬的。其实,在很多年前我就说过,腾讯和苹果必有一战。那么这一战到了今天终于到来了。 原因其实也很简单。这个事件的背后,并不是简单的腾讯和苹果彼此之间抽成争夺的问…

pr瘦脸怎么操作?

相信大家平时在拍摄自己的日常生活的时候,通常为了保证视频的清晰度往往都会选择原相机进行拍摄,原相机拍摄自然就会清清楚楚的将我们的真实展现出来,特别是脸部肥大~那么,这么大的一张脸这么可以瘦下去呢?其实使用PR软…

glsl着色器学习(五)

接下来是创建buffer,设置顶点位置,法线,顶点索引等。 const cubeVertexPositions new Float32Array([1, 1, -1,1, 1, 1, 1, -1, 1, 1, -1, -1,-1, 1, 1, -1, 1, -1,-1, -1, -1,-1, -1, 1,-1, 1, 1,1, 1, 1,1, 1, -1,-1, 1, -1,-1, -1, -1,1…

2024.9.3C++

自行实现Mystring类 #include <iostream> #include <cstring> using namespace std;class mystring { public:mystring(){len 0;str nullptr;}mystring(const char* s){len strlen(s);str new char[len 1];strcpy(str, s);}mystring(const mystring& othe…