Created split_png_by_brightness.py to split rasterized logos into separate SVG files by color for Underground Magnetics logo conversion. Key features: - OpenCV contour hierarchy detection for proper hole handling - Letters with enclosed shapes (d, o, g, etc.) now render correctly - Tight brightness thresholds to avoid antialiasing artifacts - Automatic bounding box cropping for optimal file sizes - Black text: brightness < 40 (236k pixels, 21 shape groups) - Grey icon: brightness 108-118 (119k pixels, 2 shape groups) Results: - um_black.svg: 6.1KB, 3070x233px (was 139KB, 3613x391px) - um_grey.svg: 728B, 413x390px (was 253KB, 3613x391px) Files: - split_png_by_brightness.py: Main color separation tool - IMPROVEMENTS.md: Detailed changelog and comparison - README_underground_magnetics.md: Usage documentation - underground-magnetics.eps: Source logo file - um_black.svg: Separated black text (cropped) - um_grey.svg: Separated grey icon (cropped) - requirements.txt: Added opencv-python dependency 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
67 lines
2.3 KiB
Markdown
67 lines
2.3 KiB
Markdown
# Underground Magnetics Logo - Color Separation
|
|
|
|
Successfully split the Underground Magnetics EPS logo into separate SVG files by color for multi-color 3D printing.
|
|
|
|
## Process
|
|
|
|
1. **EPS to PNG Conversion**: Used ImageMagick to convert `underground-magnetics.eps` to PNG format
|
|
- Output: `underground-magnetics-0.png` and `underground-magnetics-1.png`
|
|
|
|
2. **Color Separation**: Used `split_png_by_brightness.py` to extract separate colors
|
|
- Analyzed brightness values to distinguish grey icon from black text
|
|
- Created separate SVG files for each color region
|
|
|
|
## Output Files
|
|
|
|
- **underground-magnetics_grey.svg** - Grey "UM" icon (126,801 pixels, 1609 paths)
|
|
- **underground-magnetics_black.svg** - Black "Underground Magnetics" text (237,130 pixels, 27 paths)
|
|
|
|
## Usage
|
|
|
|
To convert these SVG files to 3D models for multi-color printing:
|
|
|
|
```bash
|
|
# Convert grey icon to STL
|
|
python svg_logo_to_stl.py underground-magnetics_grey.svg um_grey --width-mm 100 --base-thickness 1.5 --feature-height 2.5
|
|
|
|
# Convert black text to STL
|
|
python svg_logo_to_stl.py underground-magnetics_black.svg um_black --width-mm 100 --base-thickness 1.5 --feature-height 2.5
|
|
```
|
|
|
|
## Tools Created
|
|
|
|
### split_png_by_brightness.py
|
|
Splits PNG images into separate SVG files based on brightness/color clusters.
|
|
|
|
**Usage:**
|
|
```bash
|
|
python split_png_by_brightness.py <input.png> [options]
|
|
|
|
Options:
|
|
--output-dir, -o Output directory (default: same as input)
|
|
--prefix, -p Prefix for output files (default: input filename)
|
|
--dark-threshold INT Brightness threshold for dark/black (default: 50)
|
|
--mid-threshold INT Brightness threshold for mid/grey (default: 150)
|
|
```
|
|
|
|
**Example:**
|
|
```bash
|
|
python split_png_by_brightness.py underground-magnetics-0.png --prefix underground-magnetics
|
|
```
|
|
|
|
This creates separate SVG files for each color region detected in the PNG.
|
|
|
|
## Color Detection
|
|
|
|
The script analyzes pixel brightness to separate colors:
|
|
- **Dark pixels** (brightness < 50): Black text → `_black.svg`
|
|
- **Mid-range pixels** (50 ≤ brightness < 150): Grey icon → `_grey.svg`
|
|
- **Light pixels** (brightness ≥ 150): White background (ignored)
|
|
|
|
## Next Steps
|
|
|
|
1. Import the separate SVG files into the 3D conversion tool
|
|
2. Generate STL files for each color
|
|
3. Create 3MF assembly with multiple selectable parts
|
|
4. Import into BambuStudio for multi-color printing
|