Python:SVG 到 PNG 转换问题

Python: SVG to PNG converting issue

更新: 我尝试在 chess.svg.board 中增加尺寸,它以某种方式清除了尺寸 = 900 的所有渲染问题1800

我尝试使用 svglib 和 reportlab 从 .svg 生成 .png 文件,代码如下所示:

import sys
import chess.svg
import chess
from svglib.svglib import svg2rlg
from reportlab.graphics import renderPM

board = chess.Board("rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR")

drawing = chess.svg.board(board, size=350)
f = open('file.svg', 'w')
f.write(drawing)

drawing = svg2rlg("file.svg")
renderPM.drawToFile(drawing, "file.png", fmt="png")

如果您尝试打开 file.png,图像会丢失很多部分,我猜这是渲染问题。你如何解决这个问题?

旁注:在不和谐的机器人上 运行 时也会收到很多 'x_order_2: colinear!' 消息,但我不确定这是否会影响任何东西。

格式参数必须大写

renderPM.drawToFile(drawing, "file.png", fmt="PNG")

这个!!我在使用相同的库时遇到了同样的错误...我没有找到解决方案,只是找到了一种解决方法,这可能对您的情况没有太大帮助,因为生成条带的形状在垂直方向上不是很稀疏。

我也会尝试使用文件尺寸,但到目前为止,这就是我得到的。请注意,我的 svg 由白色背景上的黑色形状组成(因此以下代码中的 255 - x

由于波段的出现非常随机,连续多次处理同一个文件会产生不同的结果,我决定利用随机性:我所做的是将同一个 svg 导出几次到不同的 png,将它们全部导入到列表中,然后只取所有导出图像中的白色像素,例如:

images_files = [my_convert_function(svgfile=file, index=i) for i in range(3)]
images = [255 - imageio.imread(x) for x in images_files]
result = reduce(lambda a,b: a & b, images)
imageio.imwrite(<your filename here>, result)
[os.remove(x) for x in images_files]

其中 my_convert_function 包含相同的 svg2rlgrenderPM.drawToFile,以及 returns 正在写入的 png 文件的名称。索引'i'是保存同一张png不同名称的几份

这是一些非常粗糙的代码,但我希望它能帮助其他遇到同样问题的人