繁体   English   中英

如何在Python中使用透明性将.EPS文件保存到PNG

[英]How to save an .EPS file to PNG with transparency in Python

我正在构建一个类似于Paint的应用程序。由于我希望以后可以自由定位和修改形状属性,因此我使用Tkinter在Canvas上绘制形状,而不是PIL Draw或其他任何东西。 从其他答案中,我发现了如何通过首先创建一个后记文件,然后使用PIL将其转换为PNG来将画布另存为PNG。

现在的问题是EPS文件具有透明空间,但是PNG文件用白色背景色填充了这些空隙。 我不确定我要去哪里。

以下是我使用的功能。

def saveImg(event):
    global canvas
    canvas.postscript(file="my_drawing.eps", colormode='color')
    imgNew = Image.open("my_drawing.eps")
    imgNew.convert("RGBA")
    imgNew.thumbnail((2000,2000), Image.ANTIALIAS)
    imgNew.save('testImg.png', quality=90)

好像不支持透明度。 文档

EPS驱动程序可以在L,LAB,RGB和CMYK模式下读取EPS图像,但是Ghostscript可以将图像转换为RGB模式,而不是将它们保留在原始色彩空间中。

当您加载RGB(而不是RGB A )时,将丢弃alpha通道信息,以后再将其转换为RGBA将无法恢复。

最好的选择是将其移植到cairo或QT等最新工具包中,或者按照PM2Ring的建议直接使用GhostScript转换文件。

对于GS方法,为了设置输出文件的宽度和高度,您必须使用-rN开关,其中N是以PPI(像素/英寸)为单位的分辨率。 您必须进行数学运算才能从EPS边界框中获得目标分辨率和所需的输出大小。

或者,您可以先渲染为固定分辨率,例如100 PPI,查看获得的宽度并进行数学运算以获得正确的分辨率。 例如,如果使用-r100渲染为您提供了一个500像素宽的文件,但您希望它为1024:

desired_resolution = initial_resolution * desired_width // initial_width

为了获得一个1024像素宽的文件:

>>> 100 * 1024 // 500
204

因此,您必须使用-r204再次渲染EPS。

编辑1:

我从这个问题中得到了解决方案。我们可以使用-gNNNNxMMMM设置自定义宽度和高度,但是dpi值仅-gNNNNxMMMM很小的区域。 我尝试使用通常的72dpi,并得到了不错的输出(我不确定它是否完美)。 现在,我需要查找每次运行程序并提供自定义图像尺寸值时如何执行此命令。 :\\

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM