如何使屏幕忽略某些图像的背景色?

时间:2019-04-12 09:25:41

标签: python python-2.7 pygame

我正在使用python 2.7,目前我正在为我的学校作业使用pyagme开发一款基本游戏。我从Google下载了一张图片,它的背景色是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的背景颜色,如何在不编辑图像的情况下使屏幕忽略它?

2 个答案:

答案 0 :(得分:1)

items

您可以设置colorkey。背景变为透明。 colorkey = pistol_img.get_at((0,0)) pistol_img.set_colorkey(colorkey, RLEACCEL) 可以在图像上获得(0,0)点。 (0,0)点通常是背景的颜色。 如果不是这样,则可以找出背景色的点。

您上传的图片类型,图片非常大且非常鲜艳。 因此,您无法一次指定所有的色键。即使设置了色键,色键也会对图片的其他部分产生很大的影响。

get_at(0,0)上,开发人员要删除的背景颜色通常表示colorkey(图像上选择的透明颜色)。详细地讲,我在评论中告诉了您。

get_at((0,0))的意思是“获得坐标中(0,0)处的图片颜色”。 在您的图片上,它似乎已在其他部分被删除。 (在枪口周围,图片上有许多白点。)

对不起,如果您想做其他事情,对不起。

答案 1 :(得分:1)

由于JPG格式是压缩格式,因此造成了您在图像中看到的白色假象。
压缩并非无损。这意味着武器周围的颜色并非完全是白色(255、255、255)。对于人眼来说,颜色看起来是白色的,但实际上,颜色通道的值小于255,但接近255。

您可以尝试手动更正此问题。通过pygame.Surface.convert_alpha()确保图像格式具有Alpha通道。标识所有具有高于特定阈值(例如230)的红色绿色和蓝色通道的像素。将这些像素的颜色通道和Alpha通道更改为(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)) 

当然,您有危险更改不想更改的像素。如果武器将有一些非常“明亮”的区域,那么我也可以将该区域变成透明的。

请注意,可以通过使用其他图像格式(例如BMPPNG)来避免此类问题。
使用这种格式,可以无损存储像素。 您可以尝试“摄影店”图像。手动更改武器周围的像素,并以其他格式存储图像。