Guest User

mmaker_color_enhance_core.py

a guest
Aug 29th, 2025
15
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.68 KB | Software | 0 0
  1. import numpy as np
  2. import skimage.color
  3. from PIL import Image
  4. import imageio.core.util
  5.  
  6. imageio.core.util._precision_warn = lambda *args, **kwargs: None
  7.  
  8. def color_enhance(arr, strength: float = 1) -> Image.Image:
  9.     # Handle different input types (PIL Image or numpy array)
  10.     if isinstance(arr, Image.Image):
  11.         arr = np.array(arr)
  12.    
  13.     # Handle RGBA images by converting to RGB
  14.     if len(arr.shape) == 3 and arr.shape[2] == 4:  # RGBA
  15.         # Convert RGBA to RGB by blending with white background
  16.         alpha = arr[:, :, 3:4].astype(np.float64) / 255.0
  17.         rgb = arr[:, :, :3].astype(np.float64)
  18.         # Blend with white background
  19.         rgb = rgb * alpha + 255 * (1 - alpha)
  20.         arr = rgb.astype(np.uint8)
  21.     elif len(arr.shape) == 3 and arr.shape[2] != 3:
  22.         # Convert other formats to RGB if needed
  23.         arr = np.array(Image.fromarray(arr).convert('RGB'))
  24.    
  25.     # Original algorithm from mmaker
  26.     lch = skimage.color.lab2lch(lab=skimage.color.rgb2lab(rgb=np.array(arr, dtype=np.uint8)))
  27.     lch[:, :, 1] *= 100/(lerp(100, lch[:, :, 1].max(), strength))  # Normalize chroma component
  28.     return Image.fromarray(np.array(skimage.color.lab2rgb(lab=skimage.color.lch2lab(lch=lch)) * 255, dtype=np.uint8))
  29.  
  30.  
  31. def color_blend(arr1, arr2) -> Image.Image:
  32.     hsv1 = skimage.color.rgb2hsv(rgb=np.array(arr1, dtype=np.uint8))
  33.     hsv2 = skimage.color.rgb2hsv(rgb=np.array(arr2, dtype=np.uint8))
  34.  
  35.     hsv1[..., 0] = hsv2[..., 0]
  36.     hsv1[..., 1] = hsv2[..., 1]
  37.  
  38.     out = skimage.color.hsv2rgb(hsv1)
  39.     return Image.fromarray(np.array(out * 255, dtype=np.uint8))
  40.  
  41. def lerp(a: float, b: float, t: float) -> float:
  42.     return (1 - t) * a + t * b
  43.  
Advertisement
Add Comment
Please, Sign In to add comment