Артефакты, которые вы можете видеть на изображении, вызваны тем, что формат JPG является сжатым форматом.
Сжатие не без потерь.Это означает, что цвета вокруг оружия не совсем белые (255, 255, 255).Цвет кажется белым для человеческого глаза, но на самом деле цветовые каналы имеют значение меньше 255, но около 255.
Вы можете попытаться исправить это вручную.Убедитесь, что формат изображения имеет альфа-канал на pygame.Surface.convert_alpha()
.Определите все пиксели, которые имеют красно-зеленый и синий цветовой канал выше определенного порога (например, 230).Измените цветовые каналы и альфа-канал этих пикселей на (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 .
В этих форматах пиксель можно сохранить без потерь,Вы можете попробовать "фото магазин" изображения.Вручную измените пиксель вокруг оружия и сохраните изображение в другом формате.