1.6 KiB
1.6 KiB
Image Background Removal & Cleanup
Quick workflow
- Install rembg (CPU only):
pip3 install "rembg[cpu]"
- Remove background:
from rembg import remove
from PIL import Image
import io
with open('input.jpg', 'rb') as f:
input_data = f.read()
output_data = remove(input_data)
with open('output.png', 'wb') as f:
f.write(output_data)
- Clean semi-transparent artifacts (removes ghost pixels not touching opaque edges):
pixels = np.array(Image.open('output.png').convert('RGBA'))
alpha = pixels[:,:,3]
opaque = alpha > 240
semi = (alpha > 5) & (alpha < 200)
keep = np.zeros_like(semi)
for y in range(1, h-1):
for x in range(1, w-1):
if semi[y,x] and opaque[y-1:y+2, x-1:x+2].any():
keep[y,x] = True
pixels[semi & ~keep, 3] = 0
- Upscale for smoother edges:
img = img.resize((w*3, h*3), Image.Resampling.LANCZOS).filter(ImageFilter.SMOOTH)
Common scenarios
| Problem | Pass | Approach |
|---|---|---|
| Near-white background | 1 | Threshold RGB > 245 all channels → alpha=0 |
| Solid red/color bg | 1 | Euclidean distance from known RGB → alpha=0 |
| Semi-transparent residuals | 2 | Clear semi alpha not bordering opaque |
| Jaggies on text | 3 | Upscale 3x LANCZOS + SMOOTH |
| Signature in corner | 2 | Mask dark pixels in bottom-right region → alpha=0 |
Capability note
This server has no wired image generation toolset. For new image creation, write an Imagen prompt. For editing (bg removal, resize, signature removal, color masking), the above workflow works.