当前位置: 首页 > 知识库问答 >
问题:

导出具有透明背景的matplotlib

慕容成文
2023-03-14

我正在尝试导出一个带有透明背景的matplotlib绘图,因为它是一个圆,我需要粘贴到另一个画布上(没有角)。

我遵循了这里的示例:如何使用透明背景从matplotlib导出绘图?

示例代码:

import matplotlib.pyplot as plt
from PIL import Image, ImageFont, ImageDraw

path = '...'

SomeCanvas1 = Image.new('RGB', (750, 750), '#36454F')

fig, ax = plt.subplots(figsize=(6, 6))
wedgeprops = {'width':0.3, 'edgecolor':'white', 'linewidth':2}
ax.pie([1-0.33,0.33], wedgeprops=wedgeprops, startangle=90, colors=['#BABABA', '#0087AE'])
plt.text(0, 0, '33%', ha='center', va='center', fontsize=42)
fig.savefig(path+'donut1.png', transparent=True)

imgDonut = Image.open(path+'donut1.png')
w,h = imgDonut.size

SomeCanvas1.paste(imgDonut, (int(0.5*(750-w)),int(0.5*(750-h))))
SomeCanvas1.save(path+'test1.png')

这里给出的示例是:如何使用Matplotlib设置图形背景颜色的不透明度

示例代码:

SomeCanvas2 = Image.new('RGB', (750, 750), '#36454F')

fig, ax = plt.subplots(figsize=(6, 6))
fig.patch.set_facecolor('None')
fig.patch.set_alpha(0)
wedgeprops = {'width':0.3, 'edgecolor':'white', 'linewidth':2}
ax.pie([1-0.33,0.33], wedgeprops=wedgeprops, startangle=90, colors=['#BABABA', '#0087AE'])
plt.text(0, 0, '33%', ha='center', va='center', fontsize=42)
fig.savefig(path+'donut2.png', facecolor=fig.get_facecolor(), edgecolor='none')

imgDonut = Image.open(path+'donut2.png')
w,h = imgDonut.size

SomeCanvas2.paste(imgDonut, (int(0.5*(750-w)),int(0.5*(750-h))))
SomeCanvas2.save(path+'test2.png')

以及这里的例子:导出图在. png与透明背景

但这对我不起作用。当我粘贴到画布上时,我最终得到:

我需要它紧紧地围绕着油炸圈饼,没有方形的角落。

我的代码出了什么问题?

编辑:我在Windows 10和使用原子IDE。我不确定这是否会有所不同...

共有1个答案

姜玮
2023-03-14

这对我很有用:

import matplotlib.pyplot as plt
from PIL import Image, ImageFont, ImageDraw

path = '...'

SomeCanvas1 = Image.new('RGB', (750, 750), '#36454F')

fig, ax = plt.subplots(figsize=(6, 6))
wedgeprops = {'width':0.3, 'edgecolor':'white', 'linewidth':2}
ax.pie([1-0.33,0.33], wedgeprops=wedgeprops, startangle=90, colors=['#BABABA', '#0087AE'])
plt.text(0, 0, '33%', ha='center', va='center', fontsize=42)
fig.savefig(path+'donut1.png', transparent=True)

imgDonut = Image.open(path+'donut1.png')
w,h = imgDonut.size

SomeCanvas1.paste(imgDonut, (int(0.5*(750-w)),int(0.5*(750-h))))
SomeCanvas1.save(path+'test1.png')
fig.patch.set_alpha(0)

输出是(我有黑色背景-

----edit---

设法让它透明!

import matplotlib.pyplot as plt
from PIL import Image, ImageFont, ImageDraw

path = '...'

SomeCanvas1 = Image.new('RGB', (750, 750), '#36454F')

fig, ax = plt.subplots(figsize=(6, 6))
wedgeprops = {'width':0.3, 'edgecolor':'white', 'linewidth':2}
ax.pie([1-0.33,0.33], wedgeprops=wedgeprops, startangle=90, colors=['#BABABA', '#0087AE'])
plt.text(0, 0, '33%', ha='center', va='center', fontsize=42)
fig.savefig(path+'donut1.png', transparent=True)
fig.patch.set_alpha(0)

SomeCanvas1.save(path+'test1.png')

foreground = path+'donut1.png'
imgfore = Image.open(foreground, 'r')
background = path+'test1.png'
imgback = Image.open(background, 'r')

merged = Image.new('RGBA', (w,h), (0, 0, 0, 0))
merged.paste(imgback, (0,0))
merged.paste(imgfore, (0,0), mask=imgfore)
merged.save((path+"merged.png"), format="png")

在这种情况下,您将产生3个图像文件。这是合并文件:

 类似资料:
  • 我正在使用matplotlib制作一些图形,不幸的是,我不能在没有白色背景的情况下导出它们。 换句话说,当我导出这样的绘图并将其放置在另一个图像的顶部时,白色背景会隐藏其背后的内容,而不是让它显示出来。如何导出具有透明背景的绘图?

  • 通过使用启用透明背景功能,可以使用自定义图片作为背景。 controller.setTransparentBackground( true );

  • 问题内容: 我想以 编程方式 删除ImageButton中的灰色背景。我尝试了多种删除方法,例如- 但是在实现它们时,我在触摸时不会在ImageButton上产生涟漪效果。(触摸时不突出显示)。 有什么方法可以消除背景但保留波纹效果或高光。 问题答案: 如果这个方法比我认为的有效,那么应该可以解决您的问题: http://codingdict.com/questions/141119

  • 问题内容: 我将签名图像另存为.jpg图片。我使用graphic2d在图像上绘制签名的每个像素(使用签名板获得),它可以正常工作,但我总是得到白色背景。如果我想将签名放在PDF文档上,jpg图像的白色正方形的边框会覆盖PDF的某些单词。 我想要得到的是保存带有透明背景的jpg图像,因此当我将其放置在PDF上时,没有单词被白色图像背景覆盖,只有签名行。 这是保存缓冲图像的代码。它具有白色背景。 我试

  • 问题内容: 我正在使用以下代码在Windows和Linux中设置任务栏图标。它在Windows中效果很好,在Linux中效果很好。在Linux(Ubuntu)中,我将面板设置为(某种程度上)透明,并且当我添加GIF(具有透明背景)时,图标的背景显示为灰色和丑陋的所有颜色(参见图像,绿色菱形“!”)。 …有关如何制作GIF图片的任何想法,我要“保留”其透明背景? 替代文字http://unarm.o

  • out.mov的ffprompt-show_stream-show_format的输出如下: 我有一个“示例”片段,它显示了我想要的行为,带有以下流和信息: 我根本无法看出其中的差别。 输入、输出和工作模板可以在这里找到。 (点击链接时,您可能会看到的安全问题来自服务器证书是自签名的。您可以接受临时异常。顺便说一句:输出文件荒谬的文件大小将是下一个需要解决的问题。可能是与压缩有关的问题。)