So konvertieren Sie graue Elemente in Schwarz in SVG, die aus DXF erzeugt wurden, generierte Gebrauchszeiten EZDXFCSS

CSS verstehen
Anonymous
 So konvertieren Sie graue Elemente in Schwarz in SVG, die aus DXF erzeugt wurden, generierte Gebrauchszeiten EZDXF

Post by Anonymous »

Code: Select all

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>
Ich arbeite an einem Python -Skript, um SVG -Bilder aus DXF -Dateien mithilfe der EZDXF -Bibliothek zu generieren.  Meine Absicht ist es, sicherzustellen, dass alle Elemente, einschließlich grauer, im resultierenden SVG -Bild als schwarz erscheinen.grayscale(100%) contrast(100%) invert(100%) saturate(200%)

Code: Select all

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

Code: Select all

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

Trotzdem werden die grauen Elemente in den generierten SVG immer noch nicht in Schwarz konvertiert. /> < /li>
< /ul>

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post