Merge remote-tracking branch 'origin/master' into develop
This commit is contained in:
		
						commit
						5efdc28a86
					
				
					 1 changed files with 19 additions and 17 deletions
				
			
		| 
						 | 
				
			
			@ -158,32 +158,34 @@ def convert_requested_format(im, format):
 | 
			
		|||
    ncolors = format["num_colors"]
 | 
			
		||||
    image_format = format["image_format"]
 | 
			
		||||
 | 
			
		||||
    # -- Check if ncolors is valid
 | 
			
		||||
    # Formats accepting several options
 | 
			
		||||
    if image_format in ['IMAGE_FORMAT_GRAYSCALE', 'IMAGE_FORMAT_PALETTE']:
 | 
			
		||||
        valid = [2, 4, 8, 16, 256]
 | 
			
		||||
 | 
			
		||||
    # Formats expecting a particular number
 | 
			
		||||
    else:
 | 
			
		||||
        # Read number from specs dict, instead of hardcoding
 | 
			
		||||
        for _, fmt in valid_formats.items():
 | 
			
		||||
            if fmt["image_format"] == image_format:
 | 
			
		||||
                # has to be an iterable, to use `in`
 | 
			
		||||
                valid = [fmt["num_colors"]]
 | 
			
		||||
                break
 | 
			
		||||
 | 
			
		||||
    if ncolors not in valid:
 | 
			
		||||
        raise ValueError(f"Number of colors must be: {', '.join(valid)}.")
 | 
			
		||||
 | 
			
		||||
    # Work out where we're getting the bytes from
 | 
			
		||||
    if image_format == 'IMAGE_FORMAT_GRAYSCALE':
 | 
			
		||||
        # Ensure we have a valid number of colors for the palette
 | 
			
		||||
        if ncolors <= 0 or ncolors > 256 or (ncolors & (ncolors - 1) != 0):
 | 
			
		||||
            raise ValueError("Number of colors must be 2, 4, 16, or 256.")
 | 
			
		||||
        # If mono, convert input to grayscale, then to RGB, then grab the raw bytes corresponding to the intensity of the red channel
 | 
			
		||||
        im = ImageOps.grayscale(im)
 | 
			
		||||
        im = im.convert("RGB")
 | 
			
		||||
    elif image_format == 'IMAGE_FORMAT_PALETTE':
 | 
			
		||||
        # Ensure we have a valid number of colors for the palette
 | 
			
		||||
        if ncolors <= 0 or ncolors > 256 or (ncolors & (ncolors - 1) != 0):
 | 
			
		||||
            raise ValueError("Number of colors must be 2, 4, 16, or 256.")
 | 
			
		||||
        # If color, convert input to RGB, palettize based on the supplied number of colors, then get the raw palette bytes
 | 
			
		||||
        im = im.convert("RGB")
 | 
			
		||||
        im = im.convert("P", palette=Image.ADAPTIVE, colors=ncolors)
 | 
			
		||||
    elif image_format == 'IMAGE_FORMAT_RGB565':
 | 
			
		||||
        # Ensure we have a valid number of colors for the palette
 | 
			
		||||
        if ncolors != 65536:
 | 
			
		||||
            raise ValueError("Number of colors must be 65536.")
 | 
			
		||||
        # If color, convert input to RGB
 | 
			
		||||
        im = im.convert("RGB")
 | 
			
		||||
    elif image_format == 'IMAGE_FORMAT_RGB888':
 | 
			
		||||
        # Ensure we have a valid number of colors for the palette
 | 
			
		||||
        if ncolors != 1677216:
 | 
			
		||||
            raise ValueError("Number of colors must be 16777216.")
 | 
			
		||||
        # If color, convert input to RGB
 | 
			
		||||
    elif image_format in ['IMAGE_FORMAT_RGB565', 'IMAGE_FORMAT_RGB888']:
 | 
			
		||||
        # Convert input to RGB
 | 
			
		||||
        im = im.convert("RGB")
 | 
			
		||||
 | 
			
		||||
    return im
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue