pygame.display.set_icon() 没有很好地处理透明度
pygame.display.set_icon() not handling transparency too well
是的,我知道还有另一个 post 问这个问题,但我尝试了其中的答案,但没有用,只会让情况变得更糟。以下是我尝试过的所有 posts:
PyGame: Applying transparency to an image with alpha?
Pygame.display.set_icon unable to show transparecy
How do I set a transparent icon?
我尝试使用透明度的结果与他们大不相同。这是我的代码:
import pygame
pygame.init()
screen = pygame.display.set_mode((800,600))
pygame.display.set_caption("Undertale")
pygame.display.set_icon(pygame.image.load("icon.png").convert_alpha())
结果如下:
这是原图:
有什么帮助吗?
编辑:我做了@user2588654 说的:
Given the above, my suggestion would be to try remaking the heart at 32x32 pixels with a white background without transparency and apply the colorkey. Let me know if this helps!
这是我的代码:
import pygame
pygame.init()
screen = pygame.display.set_mode((800,600))
pygame.display.set_caption("Undertale")
icon = pygame.image.load("icon.png")
icon.set_colorkey((0,255,0))
pygame.display.set_icon(icon)
这是新的 icon.png:
结果如下:
虽然不多,但还是有点烦。如果无法修复,那很好,如果是,那么我想知道。
你的代码没问题。当我 运行 它与您的测试心脏图像一起使用时,我在命令提示符中收到以下测试警告:libpng warning: iCCP: known incorrect sRGB profile
。按照建议 here,我使用 image magick 对其进行了转换并消除了错误,但它看起来仍然像您的屏幕截图,所以这可能不太重要。
根据 pygame 关于 here for pygame.display.set_icon()
的文档,看起来大多数系统都需要 32x32 像素左右的较小图像.将图像调整到该大小可以消除图像上的大部分伪影,但这并不理想,因为您的心是 20x20 像素左右的像素艺术。此外,pygame中的图标似乎不支持完整的t运行sparency,而是仅支持colorkey。也就是说,您基本上通过调用 surf.set_colorkey((255, 255, 255))
选择一种颜色设置为完全 t运行sparent,其中 surf
指的是 pygame.image.load("icon.png").convert_alpha()
之后的图标图像表面。在我的示例中,元组 (255, 255, 255)
指的是白色。
鉴于以上情况,我的建议是尝试重新制作 32x32 像素的心脏,白色背景,不使用 t运行sparency 并应用色键。如果这有帮助,请告诉我!
我在 Windows 上遇到了类似的问题:我试图使用一个 80x80 的透明 PNG 图像作为我的图标。
我尝试了 CodeSurgeon 的回答中的建议,发现 colorkey transparency 实际上并没有使任务栏中的图标背景透明 Windows 10.
经过一些试验,我发现我需要做的就是让它工作:
icon = pygame.image.load(ICON_FILENAME)
icon = pygame.transform.smoothscale(icon, (96, 96))
pygame.display.set_icon(icon)
也就是说,我只需要 将图像调整为允许的 windows 图标大小 。我不需要将我的图像转换为具有 colorkey 背景。
是的,我知道还有另一个 post 问这个问题,但我尝试了其中的答案,但没有用,只会让情况变得更糟。以下是我尝试过的所有 posts:
PyGame: Applying transparency to an image with alpha?
Pygame.display.set_icon unable to show transparecy
How do I set a transparent icon?
我尝试使用透明度的结果与他们大不相同。这是我的代码:
import pygame
pygame.init()
screen = pygame.display.set_mode((800,600))
pygame.display.set_caption("Undertale")
pygame.display.set_icon(pygame.image.load("icon.png").convert_alpha())
结果如下:
这是原图:
有什么帮助吗?
编辑:我做了@user2588654 说的:
Given the above, my suggestion would be to try remaking the heart at 32x32 pixels with a white background without transparency and apply the colorkey. Let me know if this helps!
这是我的代码:
import pygame
pygame.init()
screen = pygame.display.set_mode((800,600))
pygame.display.set_caption("Undertale")
icon = pygame.image.load("icon.png")
icon.set_colorkey((0,255,0))
pygame.display.set_icon(icon)
这是新的 icon.png:
结果如下:
虽然不多,但还是有点烦。如果无法修复,那很好,如果是,那么我想知道。
你的代码没问题。当我 运行 它与您的测试心脏图像一起使用时,我在命令提示符中收到以下测试警告:libpng warning: iCCP: known incorrect sRGB profile
。按照建议 here,我使用 image magick 对其进行了转换并消除了错误,但它看起来仍然像您的屏幕截图,所以这可能不太重要。
根据 pygame 关于 here for pygame.display.set_icon()
的文档,看起来大多数系统都需要 32x32 像素左右的较小图像.将图像调整到该大小可以消除图像上的大部分伪影,但这并不理想,因为您的心是 20x20 像素左右的像素艺术。此外,pygame中的图标似乎不支持完整的t运行sparency,而是仅支持colorkey。也就是说,您基本上通过调用 surf.set_colorkey((255, 255, 255))
选择一种颜色设置为完全 t运行sparent,其中 surf
指的是 pygame.image.load("icon.png").convert_alpha()
之后的图标图像表面。在我的示例中,元组 (255, 255, 255)
指的是白色。
鉴于以上情况,我的建议是尝试重新制作 32x32 像素的心脏,白色背景,不使用 t运行sparency 并应用色键。如果这有帮助,请告诉我!
我在 Windows 上遇到了类似的问题:我试图使用一个 80x80 的透明 PNG 图像作为我的图标。
我尝试了 CodeSurgeon 的回答中的建议,发现 colorkey transparency 实际上并没有使任务栏中的图标背景透明 Windows 10.
经过一些试验,我发现我需要做的就是让它工作:
icon = pygame.image.load(ICON_FILENAME)
icon = pygame.transform.smoothscale(icon, (96, 96))
pygame.display.set_icon(icon)
也就是说,我只需要 将图像调整为允许的 windows 图标大小 。我不需要将我的图像转换为具有 colorkey 背景。