Merge pull request 'rgb_to_hex python snippet.' (#1) from rgb_to_hex into main
				
					
				
			Reviewed-on: #1
This commit is contained in:
		
							
								
								
									
										50
									
								
								python/rgb_to_hex.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										50
									
								
								python/rgb_to_hex.py
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,50 @@
 | 
				
			|||||||
 | 
					def rgb_to_hex(r, g, b, a=None, bg=255, prefix="#"):
 | 
				
			||||||
 | 
					    """
 | 
				
			||||||
 | 
					    Convert given RGB color decimals or floats to Hex string.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    Parameters
 | 
				
			||||||
 | 
					    ---
 | 
				
			||||||
 | 
					    r, g, b: float | int
 | 
				
			||||||
 | 
					        Corresponding channel value. Support decimal or float.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    a: float | None, Default: None
 | 
				
			||||||
 | 
					        Alpha value for generate simulated transparent color.
 | 
				
			||||||
 | 
					        If specified, the returned hex color should looks like
 | 
				
			||||||
 | 
					        rendered as `a` alpha value, on the given background `bg`.
 | 
				
			||||||
 | 
					        Default to None, which means disable simuating transparent.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    bg: int, Default: 255
 | 
				
			||||||
 | 
					        If `a` is specified, `bg` will be used as the background
 | 
				
			||||||
 | 
					        for render transparent color.
 | 
				
			||||||
 | 
					        Default to 255, which means 'white' background.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    Examples
 | 
				
			||||||
 | 
					    ---
 | 
				
			||||||
 | 
					    >>> rgb_to_hex(255, 0, 255)
 | 
				
			||||||
 | 
					    '#FF00FF'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    >>> rgb_to_hex(255, 255, 0, a=0.0625, bg=0)
 | 
				
			||||||
 | 
					    '#0F0F00'
 | 
				
			||||||
 | 
					    """
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def to_decimal(v, base=255) -> int:
 | 
				
			||||||
 | 
					        if isinstance(v, float) and v <= 1:
 | 
				
			||||||
 | 
					            v *= base
 | 
				
			||||||
 | 
					        return int(v)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def patch_alpha(v, alpha, bg=255):
 | 
				
			||||||
 | 
					        return int(v * alpha + bg * (1 - alpha))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    r = to_decimal(r)
 | 
				
			||||||
 | 
					    g = to_decimal(g)
 | 
				
			||||||
 | 
					    b = to_decimal(b)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if a is not None:
 | 
				
			||||||
 | 
					        r = patch_alpha(r, a, bg)
 | 
				
			||||||
 | 
					        g = patch_alpha(g, a, bg)
 | 
				
			||||||
 | 
					        b = patch_alpha(b, a, bg)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if prefix is None:
 | 
				
			||||||
 | 
					        prefix = ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return f"{prefix}{r:02X}{g:02X}{b:02X}"
 | 
				
			||||||
		Reference in New Issue
	
	Block a user