Since the entire sprite "colour" is filled with pink, a neat way to solve this issue is to make the sprites main colour transparent, and then overlay it onto a same-sized rectangle of the desired hue.
First make a fish with a transparent background (I used TheGIMP to edit it).

clear_fish.png
Then in your sprite class (or however you want to implement it), create a pygame.Surface
the same size, filling it with the desired colour. Then blit()
the clear-fish image on top of the coloured surface.
fish_image = pygame.image.load( 'clear_fish.png' ) # un-coloured fish
fish_rect = fish_image.get_rect()
# Apply some coloured scales to the fish
fish_scales= pygame.Surface( ( fish_rect.width, fish_rect.height ) )
fish_scales.fill( colour )
fish_scales.blit( fish_image, (0,0) )
fish_image = fish_scales # use the coloured fish

Ref: Full Example Code ~
import pygame
import random
# Window size
WINDOW_WIDTH = 600
WINDOW_HEIGHT = 600
WINDOW_SURFACE = pygame.HWSURFACE|pygame.DOUBLEBUF|pygame.RESIZABLE
DARK_BLUE = ( 3, 5, 54)
### initialisation
pygame.init()
pygame.mixer.init()
window = pygame.display.set_mode( ( WINDOW_WIDTH, WINDOW_HEIGHT ), WINDOW_SURFACE )
pygame.display.set_caption("1-Fish, 2-Fish, Pink Fish, Clear Fish")
class FishSprite( pygame.sprite.Sprite ):
def __init__( self, colour ):
pygame.sprite.Sprite.__init__( self )
self.image = pygame.image.load( 'clear_fish.png' )
self.rect = self.image.get_rect()
# Apply some coloured scales to the fish
fish_scales= pygame.Surface( ( self.rect.width, self.rect.height ) )
fish_scales.fill( colour )
fish_scales.blit( self.image, (0,0) )
self.image = fish_scales # use the coloured fish
# Start position is randomly across the screen
self.rect.center = ( random.randint(0, WINDOW_WIDTH), random.randint(0,WINDOW_HEIGHT) )
def update(self):
# Just move a bit
self.rect.x += random.randrange( -1, 2 )
self.rect.y += random.randrange( -1, 2 )
### Sprites
fish_sprites = pygame.sprite.Group()
fish_sprites.add( FishSprite( ( 255, 200, 20 ) ) ) # add some fish
fish_sprites.add( FishSprite( ( 255, 20, 200 ) ) )
fish_sprites.add( FishSprite( ( 55, 00, 200 ) ) )
fish_sprites.add( FishSprite( ( 20, 200, 20 ) ) )
### Main Loop
clock = pygame.time.Clock()
done = False
while not done:
# Handle user-input
for event in pygame.event.get():
if ( event.type == pygame.QUIT ):
done = True
elif ( event.type == pygame.MOUSEBUTTONUP ):
# On mouse-click add a fish
mouse_pos = pygame.mouse.get_pos()
random_red = random.randint( 50, 250 )
random_green = random.randint( 50, 250 )
random_blue = random.randint( 50, 250 )
random_colour = ( random_red, random_green, random_blue )
fish_sprites.add( FishSprite( random_colour ) )
# Update the window, but not more than 60fps
fish_sprites.update()
window.fill( DARK_BLUE )
fish_sprites.draw( window )
pygame.display.flip()
# Clamp FPS
clock.tick_busy_loop(60)
pygame.quit()