gpt4 book ai didi

python - 如何在 Python 中将 .EPS 文件保存为透明的 PNG

转载 作者:行者123 更新时间:2023-12-01 02:31:11 25 4
gpt4 key购买 nike

我正在构建一个类似 Paint 的应用程序,因为我希望稍后能够自由地重新定位和修改形状属性,所以我使用 Tkinter 在 Canvas 上绘制形状,而不是 PIL Draw 或其他任何东西。从其他答案中,我发现如何通过首先创建一个 postscript 文件,然后使用 PIL 将其转换为 PNG 来将 Canvas 另存为 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)

最佳答案

看起来不支持透明度。来自 the docs :

The EPS driver can read EPS images in L, LAB, RGB and CMYK mode, but Ghostscript may convert the images to RGB mode rather than leaving them in the original color space.

当您加载 RGB(而不是 RGBA)时,Alpha channel 信息将被丢弃,稍后将其转换为 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:

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

关于python - 如何在 Python 中将 .EPS 文件保存为透明的 PNG,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46810693/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com