条形码渲染
条形码渲染
Aspose.BarCode 为 Python 提供的 FOSS 将编码与渲染分离。条形码被编码为 EncodedSymbol 后,Renderer 实现会将模块矩阵转换为可视化输出。该库包含 SvgRenderer 和 PngRenderer。
RenderOptions
RenderOptions 控制所有渲染器的可视化输出。将其传递给任意 Barcode 对象上的 to_svg() 或 to_png():
import aspose_barcode_foss as barcode
from aspose_barcode_foss import RenderOptions
bc = barcode.code128("Hello World")
svg = bc.to_svg(options=RenderOptions(
scale=2.0,
foreground_color="#003366",
quiet_zone=10.0,
show_text=True,
))| 属性 | 类型 | 描述 |
|---|---|---|
scale | float | 整个条码的统一缩放倍数 |
dpi | int | PNG 输出的分辨率(对 SVG 没有影响) |
module_width | float | 用户单位中一个条码模块的宽度 |
module_height | float | 用户单位中一个条码模块的高度 |
quiet_zone | float | 条码周围的空白填充 |
foreground_color | str | 用于条形和模块的十六进制颜色(例如,"#000000") |
background_color | str | 背景的十六进制颜色 |
transparent_background | bool | PNG 输出的透明背景 |
show_text | bool | 在条形码下方显示可读文本 |
font_family | str | 可读文本的字体 |
font_size | float | 人类可读文本的字体大小 |
ResolvedRenderOptions
ResolvedRenderOptions 是由 OptionsResolver.resolve() 生成的完整合并配置。它将用户提供的 RenderOptions 与 SymbologyProfile 默认值合并。所有属性都有具体数值(没有 None)。
Barcode.default_render_options 属性保存生成时传入的 RenderOptions(如果未提供则为 None)。
SVG 输出
SvgRenderer 生成 SVG 输出。在 Barcode 对象上调用 to_svg():
bc = barcode.ean13("590123412345")
svg_string = bc.to_svg()
# With custom options
svg_custom = bc.to_svg(options=RenderOptions(
scale=3.0,
foreground_color="#1a1a1a",
show_text=True,
font_family="Helvetica",
font_size=12.0,
))
with open("ean13.svg", "w") as f:
f.write(svg_custom)to_svg() 返回一个包含完整 SVG 文档的 str。
PNG 输出
PngRenderer 生成 PNG 输出。在 Barcode 对象上调用 to_png():
bc = barcode.qr("https://example.com")
png_bytes = bc.to_png()
# With custom options
png_custom = bc.to_png(options=RenderOptions(
scale=4.0,
dpi=300,
transparent_background=True,
))
with open("qr.png", "wb") as f:
f.write(png_custom)to_png() 返回 bytes,其中包含 PNG 图像数据。
渲染器抽象
Renderer 抽象基类定义了所有渲染器的接口:
class Renderer(ABC):
def render(self, symbol, layout, options) -> RenderedArtifact: ...SvgRenderer 和 PngRenderer 都实现了此接口。您可以调用 Barcode.render(renderer, options) 直接使用特定的渲染器:
from aspose_barcode_foss import SvgRenderer, RenderOptions
bc = barcode.code128("DATA")
artifact = bc.render(SvgRenderer(), RenderOptions(scale=2.0))
print(artifact.media_type) # "image/svg+xml"
print(type(artifact.data)) # <class 'str'>RenderedArtifact
由 Renderer.render() 返回的 RenderedArtifact 包含:
| 属性 | 类型 | 描述 |
|---|---|---|
data | `str | bytes` |
media_type | str | MIME 类型("image/svg+xml" 或 "image/png") |
backend | str | 渲染器标识符 |
文本布局
每种符号都有一个 TextLayoutPolicy,用于决定可读文本在条码下方的放置方式。create_layout(symbol, options) 方法返回一个 TextLayout,其中包含带有位置信息和文本数据的 TextSegment 对象。
QR Code 使用 QrTextLayoutPolicy,它提供了一个无操作布局(QR 代码不显示可读文本)。
提示与最佳实践
- 使用
scale实现统一尺寸,使用module_width/module_height实现精确尺寸控制——不要同时使用两者。 - 将
dpi=300设置为打印质量的 PNG 输出;默认是屏幕分辨率。 - 使用
transparent_background=True来生成将在彩色背景上叠加的 PNG 条码。 foreground_color和background_color接受标准十六进制颜色字符串("#RRGGBB")。- SVG 输出是分辨率无关的 — 建议在网页和 PDF 嵌入时优先使用 SVG。
常见问题
| 问题 | 原因 | 修复 |
|---|---|---|
| PNG 显示得太小 | 默认缩放比例为 1.0 | 增加 scale 或设置 dpi |
| 文本不可见 | show_text 默认值为 False | 设置 show_text=True |
| QR code 没有文本 | QR 符号系统不支持人类可读的文本 | 预期行为 — QR 使用无操作文本布局 |
| 颜色未应用 | 属性名称拼写错误 | 使用准确的属性名称:foreground_color,background_color |