python - 如何让屏幕忽略某些图像的背景颜色?

标签 python python-2.7 pygame pygame-surface

我正在使用 python 2.7,目前我正在 pyagme 中为我的学校作业开发一个基本游戏。我从谷歌下载了一张图片,它有背景颜色,我知道它是 RGB 的。我记得有一种方法可以让屏幕忽略图片的RGB(图片将显示为没有背景色),但我不记得了。

import pygame

WINDOW_WIDTH = 1200
WINDOW_LENGTH = 675
IMAGE = r'C:\Users\omero\Downloads\BattleField.jpg'
PISTOL_IMAGE = r'C:\Users\omero\Downloads\will.jpg'
RED = (255,0,0)
BLACK = (0,0,0)
WHITE = (255,255,255)


pygame.init()
size = (WINDOW_WIDTH, WINDOW_LENGTH)
screen = pygame.display.set_mode(size)
pygame.display.set_caption("Game")
clock = pygame.time.Clock()




img = pygame.image.load(IMAGE)
screen.blit(img, (0,0))
pygame.display.flip()



pistol_img = pygame.image.load(PISTOL_IMAGE)
colorkey = pistol_img.get_at((0,0))
screen.blit(pistol_img,(50,50))
pygame.display.flip()

finish = False

while not finish:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
        finish = True

pygame.quit()

当我运行上面的代码时,我得到了 pistol_img 的背景颜色,如何让屏幕忽略它而不编辑图像?

最佳答案

您在图片中看到的白色伪影是由于 JPG 造成的。 format 是一种压缩格式。
压缩不是无损的。这意味着武器周围的颜色并不完全是白色(255、255、255)。对于人眼来说,颜色看起来是白色,但实际上颜色 channel 的值小于 255,但接近 255。

您可以尝试手动更正此问题。确保图像格式具有 Alpha channel pygame.Surface.convert_alpha() 。识别所有具有高于特定阈值(例如 230)的红绿和蓝色 channel 的像素。将这些像素的颜色 channel 和 Alpha channel 更改为 (0, 0, 0, 0):

img = pygame.image.load(IMAGE).convert_alpha()

threshold = 230
for x in range(img.get_width()):
    for y in range(img.get_height()):
        color = img.get_at((x, y))
        if color.r > threshold and color.g > threshold and color.b > threshold:
            img.set_at((x, y), (0, 0, 0, 0)) 

当然,您可能会面临更改不想更改的像素的危险。如果武器有一些非常“明亮”的区域,那么这些区域也会变得透明。

请注意,可以通过使用不同的图像格式(如 BMP)来避免此类问题。或PNG .
使用这种格式,可以无损地存储像素。 您可以尝试对图像进行“photoshop”处理。手动更改武器周围的像素并以不同的格式存储图像。

关于python - 如何让屏幕忽略某些图像的背景颜色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55648488/

相关文章:

python - 为什么我的 python 包没有发现用于单元测试的类?

python - 是否可以在 python 中向导入的类添加属性?

python - 如何在 Python 中一次运行多个 while 循环

python - 删除/修改 graphviz 中的边

python - Twitter api 在推文中搜索主题标签

python - colorsys 中的 RGB 到 HSV 错误?

python - 这段代码会发生什么?

python - 如何摆脱 Pycharm 控制台中的省略号并使用 Quandl 显示信息?

shell - cra shell 错误

python - 由于 InvalidAccessKey 无法获取 s3 存储桶 403,但可以从 CLI 获取