Как преобразовать серые элементы в черные в SVG, сгенерированные из DXF, сгенерированного USIGN EZDXFCSS

Разбираемся в CSS
Ответить Пред. темаСлед. тема
Anonymous
 Как преобразовать серые элементы в черные в SVG, сгенерированные из DXF, сгенерированного USIGN EZDXF

Сообщение Anonymous »

Код: Выделить всё

import logging
import re
import xml.etree.ElementTree as ET
from ezdxf.addons.drawing import Frontend, RenderContext, svg, layout, config
import ezdxf

class ImageGenerator:
def __init__(self, doc) -> None:
self.doc = doc
self.logger = logging.getLogger(self.__class__.__name__)
self.phase_regex_pattern = r"~PHASE_\d+/\d+"

for block in doc.blocks:
for entity in block:
if entity.dxftype() == "MTEXT" and not re.match(self.phase_regex_pattern, entity.dxf.text):

plain_text = entity.plain_text(fast=False).strip()

# Check for EPACK in cleaned text (case-insensitive)
# if "EPACK" in plain_text.upper():
# print(f"Found EPACK text: {plain_text}")
# Add any additional processing here

# Example: Add a border to EPACK text (optional)
# entity.dxf.frame = 1  # Uncomment to add border

entity.dxf.text = entity.dxf.text.replace('\n', '\\P')  # Use DXF paragraph marker
entity.dxf.char_height *= 1  # Adjust as needed

def generate_image_of_block(self, block_name, width, height, lineweight):
filter_value = "grayscale(100%) contrast(100%) invert(100%) saturate(200%) "
# filter_value =  "grayscale(100%) brightness(70%) contrast(50) invert(1)"
# filter_value = "invert(1) brightness(-50%) contrast(300%)"

block = self.doc.blocks.get(block_name)
if block.name.startswith("mark_"):
context = RenderContext(doc=self.doc)
backend = svg.SVGBackend()
cfg = config.Configuration(
lineweight_scaling=lineweight,
background_policy=config.BackgroundPolicy.WHITE,
color_policy=config.ColorPolicy.COLOR,
lineweight_policy=config.LineweightPolicy.ABSOLUTE,
)
frontend = Frontend(context, backend, config=cfg)
frontend.draw_entities(block)

page = layout.Page(
width, height, layout.Units.px, margins=layout.Margins.all(20)
)
svg_string = backend.get_string(page)
svg_string = apply_css_filter(svg_string, filter_value)
self.logger.info("Image string successfully generated")
return svg_string

def apply_css_filter(svg_str, filter_value):

try:
root = ET.fromstring(svg_str)
except Exception as e:
print("Error parsing SVG:", e)
return svg_str

#remove a previous filter if present.
style = root.attrib.get("style", "")
style = re.sub(r"filter\s*:\s*[^;]+;", "", style)
style += f"filter: {filter_value};"
root.attrib["style"] = style
return ET.tostring(root, encoding="unicode")

if __name__ == "__main__":

# Uncomment the next line to enable dark mode:
isDarkMode = True

# isDarkMode = False

filter_value = "grayscale(100%) contrast(100%) invert(100%) saturate(200%)" if isDarkMode else "none"
# filter_value = "grayscale(100%) invert(1) brightness(0) contrast(200%)" if isDarkMode else "none"

doc = ezdxf.readfile("epack_test_files/RMC1.dxf")
ig = ImageGenerator(doc)
for block in doc.blocks:
if block.name.startswith("mark_"):
svg_str = ig.generate_image_of_block(block.name, 1920, 1080, 2)
# svg_str = apply_css_filter(svg_str, filter_value)
# svg_str = add_text_padding(svg_str, padding=20)  # Add this line
with open(f"{block.name}.svg", "w", encoding="utf-8") as f:
f.write(svg_str)
print(f"Image of {block.name} generated successfully")
< /code>
Я работаю над сценарием Python, чтобы генерировать изображения SVG из файлов DXF с использованием библиотеки EZDXF.  Я намерен убедиться, что все элементы, в том числе серые, выглядят черными в результирующем изображении SVG.grayscale(100%) contrast(100%) invert(100%) saturate(200%)

Код: Выделить всё

invert(1) brightness(-50%) contrast(300%)

Код: Выделить всё

grayscale(100%) invert(1) brightness(0) contrast(200%)

Несмотря на то, что они пробовали разные фильтры, серые элементы до сих пор не преобразуются в черный в сгенерированном svg.
Приложения:

. /> < /li>
< /ul>

Подробнее здесь: https://stackoverflow.com/questions/795 ... ated-usign
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «CSS»