Skip to content

Commit aede666

Browse files
authored
Merge pull request #32 from EmbroidePy/tatarize-png
fixed linewidth, added linewidth/background to png
2 parents 332201f + 210ace8 commit aede666

File tree

4 files changed

+29
-7
lines changed

4 files changed

+29
-7
lines changed

pyembroidery/EmbThread.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ def color_hex(hex_string):
3737
if size == 6 or size == 8:
3838
return int(h[:6], 16)
3939
elif size == 4 or size == 3:
40-
return int(h[2] + h[2] + h[1] + h[1] + h[0] + h[0], 16)
40+
return int(h[0] + h[0] + h[1] + h[1] + h[2] + h[2], 16)
4141

4242

4343
def color_distance_red_mean(

pyembroidery/PngWriter.py

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
import zlib
33

44
from .EmbConstant import *
5+
from .EmbThread import EmbThread
56

67
SEQUIN_CONTINGENCY = CONTINGENCY_SEQUIN_STITCH
78
FULL_JUMP = True
@@ -32,6 +33,14 @@ def __init__(self, width, height):
3233
self.green = 0
3334
self.blue = 0
3435
self.alpha = 0
36+
self.line_width = 3
37+
38+
def background(self, red, green, blue, alpha):
39+
for i in range(0, len(self.buf), 4):
40+
self.buf[i] = red
41+
self.buf[i + 1] = green
42+
self.buf[i + 2] = blue
43+
self.buf[i + 3] = alpha
3544

3645
def plot(self, x, y):
3746
try:
@@ -86,14 +95,14 @@ def draw_line(self, x0, y0, x1, y1):
8695
self.line_for_point(x0, y0, True)
8796

8897
def line_for_point(self, x, y, dy):
89-
w = 3
98+
w = self.line_width
9099
left = w >> 1
91100
right = w - left
92101
if dy:
93-
for pos in range(left, right):
102+
for pos in range(-left, right):
94103
self.plot(x + pos, y)
95104
else:
96-
for pos in range(left, right):
105+
for pos in range(-left, right):
97106
self.plot(x, y + pos)
98107

99108

@@ -103,6 +112,15 @@ def write(pattern, f, settings=None):
103112
width = int(extends[2] - extends[0])
104113
height = int(extends[3] - extends[1])
105114
draw_buff = PngBuffer(width, height)
115+
if settings is not None:
116+
background = settings.get("background", None)
117+
linewidth = settings.get("linewidth", None)
118+
if background is not None:
119+
b = EmbThread()
120+
b.set(background)
121+
draw_buff.background(b.get_red(), b.get_green(), b.get_blue(), 0xFF)
122+
if linewidth is not None and isinstance(linewidth, int):
123+
draw_buff.line_width = linewidth
106124

107125
for stitchblock in pattern.get_as_stitchblock():
108126
block = stitchblock[0]

pyembroidery/PyEmbroidery.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -376,11 +376,15 @@ def supported_formats():
376376
"writer": PmvWriter
377377
})
378378
yield ({
379-
"description": "PNG image file",
379+
"description": "PNG Format, Portable Network Graphics",
380380
"extension": "png",
381381
"mimetype": "image/png",
382382
"category": "image",
383-
"writer": PngWriter
383+
"writer": PngWriter,
384+
"options": {
385+
"background": (0x000000, 0xFFFFFF),
386+
"linewidth": (1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
387+
},
384388
})
385389

386390

test/test_writes.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ def position_equals(self, stitches, j, k):
1313

1414
def test_write_png(self):
1515
file1 = "file.png"
16-
write_png(get_shift_pattern(), file1)
16+
write_png(get_shift_pattern(), file1, {"background": "#F00", "linewidth": 5})
1717
self.addCleanup(os.remove, file1)
1818

1919
def test_write_dst_read_dst(self):

0 commit comments

Comments
 (0)