small fix for primitive

This commit is contained in:
Mario Voigt 2023-08-19 17:46:09 +02:00
parent 85f3281a53
commit 49de97160c

View File

@ -14,7 +14,7 @@ from inkex import Color
Extension for InkScape 1.X
Features
- Primitive - Reproducing images with geometric primitives written in Go.
Author: Mario Voigt / FabLab Chemnitz
Mail: mario.voigt@stadtfabrikanten.org
Date: 21.08.2020
@ -30,7 +30,7 @@ class Primitive (inkex.EffectExtension):
longcolor = int(pickerColor)
if longcolor < 0:
longcolor = longcolor & 0xFFFFFFFF
return '#' + format(longcolor >> 8, '06X')
return format(longcolor >> 8, '06X')
def checkImagePath(self, node):
xlink = node.get('xlink:href')
@ -54,7 +54,7 @@ class Primitive (inkex.EffectExtension):
if (os.path.isfile(path)):
return path
def add_arguments(self, pars):
pars.add_argument("--tab")
pars.add_argument("--keeporiginal", type=inkex.Boolean, default=False, help="Keep original image on canvas")
@ -63,14 +63,14 @@ class Primitive (inkex.EffectExtension):
pars.add_argument("--m", default=1, help="Mode")
pars.add_argument("--rep", type=int, default=0,help="Extra shapes/iteration")
pars.add_argument("--r", type=int, default=256, help="Resize to size before processing (px)")
pars.add_argument("--s", type=int, default=1024, help="Output image size (px)")
pars.add_argument("--s", type=int, default=1024, help="Output image size (px)")
pars.add_argument("--a", type=int, default=128, help="Color alpha")
pars.add_argument("--bg_enabled", type=inkex.Boolean, default=True, help="Use average starting background color")
pars.add_argument("--bg", type=Color, default=255, help="Starting background color")
pars.add_argument("--j", type=int, default=0, help="Number of parallel workers")
pars.add_argument("--j", type=int, default=0, help="Number of parallel workers")
def effect(self):
if (self.options.ids):
for node in self.svg.selected.values():
if node.tag == inkex.addNS('image', 'svg'):
@ -86,11 +86,11 @@ class Primitive (inkex.EffectExtension):
image = Image.open(BytesIO(base64.b64decode(image_string[i + 1:len(image_string)])))
else:
image = Image.open(self.path)
if node.get('width')[-1].isdigit() is False or node.get('height')[-1].isdigit() is False:
inkex.utils.debug("Image seems to have some weird dimensions in XML structure. Please remove units from width and height attributes at <svg:image>")
return
parent = node.getparent()
if parent is not None and parent != self.document.getroot():
tpc = parent.composed_transform()
@ -98,18 +98,18 @@ class Primitive (inkex.EffectExtension):
y_offset = tpc.f
else:
x_offset = 0.0
y_offset = 0.0
y_offset = 0.0
# Write the embedded or linked image to temporary directory
if os.name == "nt":
exportfile = "Primitive.png"
else:
exportfile = "/tmp/Primitive.png"
if image.mode != 'RGB':
image = image.convert('RGB')
image.save(exportfile, "png")
## Build up Primitive command according to your settings from extension GUI
if os.name == "nt":
command = "primitive"
@ -118,17 +118,17 @@ class Primitive (inkex.EffectExtension):
command += " -m " + str(self.options.m)
command += " -rep " + str(self.options.rep)
command += " -r " + str(self.options.r)
command += " -s " + str(self.options.s)
command += " -a " + str(self.options.a)
if not self.options.bg_enabled:
command += " -bg " + self.rgbToHex(self.options.bg)
command += " -j " + str(self.options.j)
command += " -s " + str(self.options.s)
command += " -a " + str(self.options.a)
if self.options.bg_enabled:
command += " -bg " + self.rgbToHex(self.options.bg)
command += " -j " + str(self.options.j)
command += " -i " + exportfile
command += " -o " + exportfile + ".svg"
command += " -n " + str(self.options.n)
#inkex.utils.debug(command)
# Create the vector new SVG file
with os.popen(command, "r") as proc:
result = proc.read()
@ -140,7 +140,7 @@ class Primitive (inkex.EffectExtension):
# Delete the temporary png file again because we do not need it anymore
if os.path.exists(exportfile):
os.remove(exportfile)
# new parse the SVG file and insert it as new group into the current document tree
doc = etree.parse(exportfile + ".svg").getroot()
x = node.get('x')
@ -149,15 +149,15 @@ class Primitive (inkex.EffectExtension):
y = node.get('y')
if y is None:
y = "0"
newGroup = self.document.getroot().add(inkex.Group())
newGroup = self.document.getroot().add(inkex.Group())
newGroup.attrib['transform'] = "matrix({:0.6f}, 0, 0, {:0.6f}, {:0.6f}, {:0.6f})".format(
float(node.get('width')) / float(doc.get('width')),
float(node.get('height')) / float(doc.get('height')),
float(x) + x_offset,
float(y) + y_offset
)
for children in doc:
newGroup.append(children)
@ -167,11 +167,11 @@ class Primitive (inkex.EffectExtension):
os.remove(exportfile + ".svg")
except:
pass
else:
inkex.utils.debug("Error while creating output file! :-( The \"primitive\" executable seems to be missing, has no exec permissions or platform is imcompatible.")
exit(1)
#remove the old image or not
#remove the old image or not
if self.options.keeporiginal is not True:
node.delete()
@ -185,9 +185,9 @@ class Primitive (inkex.EffectExtension):
clipPath = etree.SubElement(defs, 'clipPath', clipPathData)
#inkex.utils.debug(image.width)
clipBox = {
'x':str(0),
'x':str(0),
'y':str(0),
'width':str(doc.get('width')),
'width':str(doc.get('width')),
'height':str(doc.get('height')),
'style':'fill:#000000; stroke:none; fill-opacity:1;'
}
@ -195,7 +195,7 @@ class Primitive (inkex.EffectExtension):
#etree.SubElement(newGroup, 'g', {inkex.addNS('label','inkscape'):'imagetracerjs', 'clip-path':"url(#imagetracerClipPath)"})
newGroup.set('clip-path','url(#imagetracerClipPath)')
else:
inkex.utils.debug("No image found for tracing. Please select an image first.")
inkex.utils.debug("No image found for tracing. Please select an image first.")
if __name__ == '__main__':
Primitive().run()