You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何去除填色数字SVG文件中的颜色值?

解决SVG数字填色转涂色本样式的问题

几年前制作的数字填色(paint by number)SVG文件,原开源项目已丢失,找回后想要将其修改为仅保留白色背景、黑色线条和数字标签的涂色本样式。尝试用简单Python代码删除fill和stroke属性,但效果不佳,方法过于简单低效。

原尝试代码

import xml.etree.ElementTree as ET

svg_file = ET.parse('test1.svg')
root = svg_file.getroot()

for elem in root.iter():
    if 'fill' in elem.attrib:
        del elem.attrib['fill']
    if 'stroke' in elem.attrib:
        del elem.attrib['stroke']

svg_file.write('test1_1.svg')

改进后的Python处理方案

仅删除属性会让SVG使用渲染工具的默认样式,可能导致填充色残留、线条不可见等问题。我们需要主动指定样式,确保效果符合预期:

import xml.etree.ElementTree as ET
from xml.etree.ElementTree import Element

# 注册SVG命名空间,防止解析时标签异常
ET.register_namespace('', "http://www.w3.org/2000/svg")

def convert_to_coloring_book(input_svg, output_svg):
    tree = ET.parse(input_svg)
    root = tree.getroot()

    # 获取SVG画布尺寸,用于生成背景
    svg_width = root.attrib.get('width', '100%')
    svg_height = root.attrib.get('height', '100%')

    # 添加白色背景矩形,放在最底层
    bg_rect = Element('rect')
    bg_rect.attrib.update({
        'width': svg_width,
        'height': svg_height,
        'fill': 'white'
    })
    root.insert(0, bg_rect)

    # 遍历所有元素,分类型设置样式
    for elem in root.iter():
        # 处理命名空间,提取标签名
        tag_name = elem.tag.split('}')[-1]
        
        # 图形元素:黑色描边,无填充
        if tag_name in ['rect', 'circle', 'ellipse', 'polygon', 'polyline', 'path', 'line']:
            elem.attrib['stroke'] = 'black'
            # 保留原有线条宽度,默认设为1px
            elem.attrib['stroke-width'] = elem.attrib.get('stroke-width', '1')
            elem.attrib['fill'] = 'none'
        
        # 文本元素(数字标签):黑色填充,确保清晰可见
        elif tag_name == 'text':
            elem.attrib['fill'] = 'black'
            # 可选:若文本有描边,也设为黑色避免模糊
            if 'stroke' in elem.attrib:
                elem.attrib['stroke'] = 'black'
                elem.attrib['stroke-width'] = '0.3'

    # 写入文件,指定UTF-8编码避免乱码
    tree.write(output_svg, encoding='utf-8', xml_declaration=True)

# 调用示例
convert_to_coloring_book('test1.svg', 'test1_coloring_book.svg')

核心优化点

  • 命名空间兼容:SVG文件通常带命名空间,注册后避免解析时标签丢失或变形
  • 主动设置样式:不依赖默认值,明确给图形元素设fill="none"和stroke="black",确保线条和空白区域符合要求
  • 背景兜底:主动添加白色背景矩形,避免透明底色导致的显示问题
  • 文本单独处理:保留数字标签的黑色填充,防止被误清除

内容的提问来源于stack exchange,提问作者SunnyD

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 14:45:31