如何在pygame中剪切图像中的黑色内容?

时间:2013-12-01 12:22:21

标签: python image pygame

嘿我想剪掉图像中的黑色东西,以便只有没有黑色的图片然后程序应该保存新图像 但我不知道该怎么做:/ 我刚刚得到了如何显示图像:

import pygame
import os
pygame.init()
surface = pygame.display.set_mode((500,500))
asurf = pygame.image.load(os.path.join("shot.png"))
asurf = pygame.transform.scale(asurf, (500, 500))
surface.blit(asurf,(0,0))
pygame.display.flip()

2 个答案:

答案 0 :(得分:1)

编辑:对不起,我的初步答案只与PyGame中的透明度有关,而不是与保存图像有关。

要进行像素修改,您可能需要使用其他库,例如PIL(Python Imaging Library)。

如果您想给PIL一个镜头,请参阅此主题:PIL Best Way To Replace Color?

如果您想坚持使用PyGame,那么您应该查看pygame.surfarray:http://www.pygame.org/docs/tut/surfarray/SurfarrayIntro.html

EDIT2:这是一个快速摘录:

import pygame

# initialize pygame
pygame.init()
pygame.display.set_mode((500, 500))

# load image
image_surf = pygame.image.load('test.png',).convert_alpha()

# load pixel information from surface
image_pixels = pygame.surfarray.pixels3d(image_surf)

# create a copy for pixel manipulation
new_surf = image_surf.copy()

# loop through every pixel
i = 0
for x in range(len(image_pixels)):
    for y in range(len(image_pixels[0])):
        if image_pixels[x][y][0] == 0 and image_pixels[x][y][1] == 0 and image_pixels[x][y][2] == 0:
            # set transparency
            new_surf.set_at((x, y), pygame.Color(0, 0, 0, 0))

# save image
pygame.image.save(new_surf, "out.png")

OLD ANSWER:如何在PyGame中实现透明度

您需要查找set_colorkey():http://www.pygame.org/docs/ref/surface.html#pygame.Surface.set_colorkey

如果您的图片已经是透明的,那么您只需要使用.convert_alpha()加载图片:

asurf = pygame.image.load(os.path.join("shot.png")).convert_alpha()

即使您的图像没有透明度,也最好调用.convert():

asurf = pygame.image.load(os.path.join("shot.png")).convert()

请参阅:(由于仅限2个链接限制而删除了链接)

答案 1 :(得分:0)

我知道枕头模块具有检查像素颜色的功能。 我看到有人像文件一样加载图像,循环显示像素并检查它是否是特定的颜色。

不幸的是,我现在找不到它。我在这里链接image color module in the pillow doc,我希望它会帮助你。