我正在try 在Python中将SVG转换为PNG,但我不想要任何压缩和抗锯齿. 我try 对子进程使用Inkscape,但我找不到参数来告诉Inkscape我不想要任何压缩和反色调.

inkscape_path = "D:/Programmes/bin/inkscape.exe"
dpi_value = 300

result = subprocess.run([inkscape_path, "cleaned.svg", "--export-id=layer1", "--export-ignore-filters", "--export-type=png", "--export-filename=" + "cleaned.png", "--export-dpi=" + str(dpi_value)], stdout=subprocess.PIPE, stderr=subprocess.PIPE)

if result.returncode != 0:
    print("Error: " + result.stderr.decode("utf-8"))
else:
    print("PNG file exported successfully.")

我也试过用魔杖,但仍然有抗锯齿,尽管如此.antialisaing=False:

# Load SVG file as an image object
with Image(filename='cleaned.svg') as img:
    # Disable antialiasing
    library.MagickSetOption(img.wand, b'antialias', b'0')
    img.antialias = False
    
    # Convert image format to PNG
    img.format = 'png'
    
    # Save without compression
    img.compression_quality = 100

    # Save to 300 dpi
    img.resolution = (300, 300)
    # Save output file
    img.save(filename='cleaned.png')

在导出过程中,我们可以在Inkscape的UI中指定这一点,您知道我们是否可以在Python中使用子进程或库来做同样的事情?

enter image description here

Wanted result : enter image description here

Unwanted result : enter image description here

推荐答案

可以将css属性设置为shape-rendering:crispEdges以取消消除锯齿.通常,这将包括更改源SVG文件.但对于您的情况,您可以避免这种情况.

Librsvg库vg

如果您能够使用Librsvg库vg或命令行版本rsvg-convert进行PNG转换.从v2.48开始,它能够从命令行加载外部样式表:

rsvg-convert -i layer1 -d 300 -p 300 -s crisp.css -o cleaned.png cleaned.svg

crisp.css可以这样定义:

:root {
  shape-rendering: crispEdges;
}

似乎还有针对Librsvg库的Python绑定,但我不能确认它们是否能与当前版本一起工作.

另一方面,RESVG

第二个可以try 的图书馆是另一方面,RESVG个.我对它的质量还没有太多的经验,但至少它吹嘘它的功能支持.无论如何,可以将形状呈现提示设置为命令行参数:

rendersvg --export-id=layer1 --dpi=300 --shape-rendering=crispEdges cleaned.svg cleaned.png

我使用的Debian包只有0.8.0版(最新版本是0.29),但对我来说,它还是可以用的.更多 Select 请参见pkgs.org;例如,Fedora的版本是0.19,而FreeBSD甚至是0.28.

Python相关问答推荐

将轨迹优化问题描述为NLP.如何用Gekko解决这个问题?当前面临异常:@错误:最大方程长度错误

如何通过多2多字段过滤查询集

运行回文查找器代码时发生错误:[类型错误:builtin_index_or_system对象不可订阅]

如何在msgraph.GraphServiceClient上进行身份验证?

max_of_three使用First_select、second_select、

在Python Attrs包中,如何在field_Transformer函数中添加字段?

为什么这个带有List输入的简单numba函数这么慢

用Python解密Java加密文件

迭代嵌套字典的值

根据列值添加时区

不允许访问非IPM文件夹

Flask Jinja2如果语句总是计算为false&

Python Pandas—时间序列—时间戳缺失时间精确在00:00

基于另一列的GROUP-BY聚合将列添加到Polars LazyFrame

使用SeleniumBase保存和加载Cookie时出现问题

Pandas 数据帧中的枚举,不能在枚举列上执行GROUP BY吗?

在Django中重命名我的表后,旧表中的项目不会被移动或删除

Pandas:计数器的滚动和,复位

设置索引值每隔17行左右更改的索引

如果服务器设置为不侦听创建,则QWebSocket客户端不连接到QWebSocketServer;如果服务器稍后开始侦听,则不连接