-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathqrcode-knitting-pattern.sh
executable file
·162 lines (152 loc) · 11.5 KB
/
qrcode-knitting-pattern.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
#!/bin/bash
# Hannu Vuolasaho 2012 [email protected]
#
# This script generates QR knitting grid from input text
# This requires libpng, netbmtools and qrencode
# Example ./generate "Text shirt sucks"
# Non ASCII character's propably don't work. Output tested only with zbarimg
# Ver 1.0
# LISENCE
# GPL V2 or later.
# TODO
# Clean up input.
# Make directory and move images there.
# Generate png images from lowest error correction to highest.
qrencode -s 10 -l L -o low.png "$@"
qrencode -s 10 -l M -o med.png "$@"
qrencode -s 10 -l Q -o q.png "$@"
qrencode -s 10 -l H -o hi.png "$@"
# Transcode to pnm
png2pnm low.png >low.pnm
png2pnm med.png >med.pnm
png2pnm q.png >q.pnm
png2pnm hi.png >hi.pnm
# Generate the grid.
cat >grid100.pbm<<EOF
P1
100 100
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0111111111011111111101111111110111111111011111111101111111110111111111011111111101111111110111111111
0111001111011111111101111111110111111111011111111101111111110111111111011111111101111111110111111111
0110000111011111111101111111110111111111011111111101111111110111111111011111111101111111110111111111
0110110111011111111101111111110111111111011111111101111111110111111111011111111101111111110111111111
0110110111011111111101111111110111111111011111111101111111110111111111011111111101111111110111111111
0110110111011111111101111111110111111111011111111101111111110111111111011111111101111111110111111111
0110010111011111111101111111110111111111011111111101111111110111111111011111111101111111110111111111
0111001111011111111101111111110111111111011111111101111111110111111111011111111101111111110111111111
0111111111011111111101111111110111111111011111111101111111110111111111011111111101111111110111111111
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0111111111011111111101111111110111111111011111111101111111110111111111011111111101111111110111111111
0111001111011111111101111111110111111111011111111101111111110111111111011111111101111111110111111111
0110110111011111111101111111110111111111011111111101111111110111111111011111111101111111110111111111
0110110111011111111101111111110111111111011111111101111111110111111111011111111101111111110111111111
0111000111011111111101111111110111111111011111111101111111110111111111011111111101111111110111111111
0111110111011111111101111111110111111111011111111101111111110111111111011111111101111111110111111111
0111100111011111111101111111110111111111011111111101111111110111111111011111111101111111110111111111
0110001111011111111101111111110111111111011111111101111111110111111111011111111101111111110111111111
0111111111011111111101111111110111111111011111111101111111110111111111011111111101111111110111111111
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0111111111011111111101111111110111111111011111111101111111110111111111011111111101111111110111111111
0110001111011111111101111111110111111111011111111101111111110111111111011111111101111111110111111111
0110110111011111111101111111110111111111011111111101111111110111111111011111111101111111110111111111
0110110111011111111101111111110111111111011111111101111111110111111111011111111101111111110111111111
0111001111011111111101111111110111111111011111111101111111110111111111011111111101111111110111111111
0110110111011111111101111111110111111111011111111101111111110111111111011111111101111111110111111111
0110110111011111111101111111110111111111011111111101111111110111111111011111111101111111110111111111
0110000111011111111101111111110111111111011111111101111111110111111111011111111101111111110111111111
0111111111011111111101111111110111111111011111111101111111110111111111011111111101111111110111111111
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0111111111011111111101111111110111111111011111111101111111110111111111011111111101111111110111111111
0110000111011111111101111111110111111111011111111101111111110111111111011111111101111111110111111111
0111100111011111111101111111110111111111011111111101111111110111111111011111111101111111110111111111
0111101111011111111101111111110111111111011111111101111111110111111111011111111101111111110111111111
0111101111011111111101111111110111111111011111111101111111110111111111011111111101111111110111111111
0111101111011111111101111111110111111111011111111101111111110111111111011111111101111111110111111111
0111011111011111111101111111110111111111011111111101111111110111111111011111111101111111110111111111
0111011111011111111101111111110111111111011111111101111111110111111111011111111101111111110111111111
0111111111011111111101111111110111111111011111111101111111110111111111011111111101111111110111111111
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0111111111011111111101111111110111111111011111111101111111110111111111011111111101111111110111111111
0111000111011111111101111111110111111111011111111101111111110111111111011111111101111111110111111111
0110011111011111111101111111110111111111011111111101111111110111111111011111111101111111110111111111
0110111111011111111101111111110111111111011111111101111111110111111111011111111101111111110111111111
0110000111011111111101111111110111111111011111111101111111110111111111011111111101111111110111111111
0110110111011111111101111111110111111111011111111101111111110111111111011111111101111111110111111111
0110110111011111111101111111110111111111011111111101111111110111111111011111111101111111110111111111
0110000111011111111101111111110111111111011111111101111111110111111111011111111101111111110111111111
0111111111011111111101111111110111111111011111111101111111110111111111011111111101111111110111111111
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0111111111011111111101111111110111111111011111111101111111110111111111011111111101111111110111111111
0110000111011111111101111111110111111111011111111101111111110111111111011111111101111111110111111111
0110111111011111111101111111110111111111011111111101111111110111111111011111111101111111110111111111
0110111111011111111101111111110111111111011111111101111111110111111111011111111101111111110111111111
0110001111011111111101111111110111111111011111111101111111110111111111011111111101111111110111111111
0111110111011111111101111111110111111111011111111101111111110111111111011111111101111111110111111111
0111100111011111111101111111110111111111011111111101111111110111111111011111111101111111110111111111
0110001111011111111101111111110111111111011111111101111111110111111111011111111101111111110111111111
0111111111011111111101111111110111111111011111111101111111110111111111011111111101111111110111111111
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0111111111011111111101111111110111111111011111111101111111110111111111011111111101111111110111111111
0111100111011111111101111111110111111111011111111101111111110111111111011111111101111111110111111111
0111100111011111111101111111110111111111011111111101111111110111111111011111111101111111110111111111
0111010111011111111101111111110111111111011111111101111111110111111111011111111101111111110111111111
0111010111011111111101111111110111111111011111111101111111110111111111011111111101111111110111111111
0110010111011111111101111111110111111111011111111101111111110111111111011111111101111111110111111111
0110000011011111111101111111110111111111011111111101111111110111111111011111111101111111110111111111
0111110111011111111101111111110111111111011111111101111111110111111111011111111101111111110111111111
0111111111011111111101111111110111111111011111111101111111110111111111011111111101111111110111111111
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0111111111011111111101111111110111111111011111111101111111110111111111011111111101111111110111111111
0110001111011111111101111111110111111111011111111101111111110111111111011111111101111111110111111111
0110110111011111111101111111110111111111011111111101111111110111111111011111111101111111110111111111
0111110111011111111101111111110111111111011111111101111111110111111111011111111101111111110111111111
0111001111011111111101111111110111111111011111111101111111110111111111011111111101111111110111111111
0111100111011111111101111111110111111111011111111101111111110111111111011111111101111111110111111111
0110110111011111111101111111110111111111011111111101111111110111111111011111111101111111110111111111
0110001111011111111101111111110111111111011111111101111111110111111111011111111101111111110111111111
0111111111011111111101111111110111111111011111111101111111110111111111011111111101111111110111111111
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0111111111011111111101111111110111111111011111111101111111110111111111011111111101111111110111111111
0111001111011111111101111111110111111111011111111101111111110111111111011111111101111111110111111111
0110110111011111111101111111110111111111011111111101111111110111111111011111111101111111110111111111
0111110111011111111101111111110111111111011111111101111111110111111111011111111101111111110111111111
0111101111011111111101111111110111111111011111111101111111110111111111011111111101111111110111111111
0111011111011111111101111111110111111111011111111101111111110111111111011111111101111111110111111111
0110111111011111111101111111110111111111011111111101111111110111111111011111111101111111110111111111
0110000111011111111101111111110111111111011111111101111111110111111111011111111101111111110111111111
0111111111011111111101111111110111111111011111111101111111110111111111011111111101111111110111111111
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0111111111011111111101111111110111111111011111111101111111110111111111011111111101111111110111111111
0111001111011100111101100011110111100111011000011101110001110110000111011000111101110011110111001111
0111101111011011011101101101110111100111011011111101100111110111100111011011011101101101110110000111
0111101111011111011101111101110111010111011011111101101111110111101111011011011101101101110110110111
0111101111011110111101110011110111010111011000111101100001110111101111011100111101110001110110110111
0111101111011101111101111001110110010111011111011101101101110111101111011011011101111101110110110111
0111101111011011111101101101110110000011011110011101101101110111011111011011011101111001110110010111
0111000111011000011101100011110111110111011000111101100001110111011111011000011101100011110111001111
0111111111011111111101111111110111111111011111111101111111110111111111011111111101111111110111111111
EOF
# Generate red pixel
echo -e "P3\n1 1 255\n255 0 0\n">>red_pixel.ppm
pnmscale 450 red_pixel.ppm >red_block.ppm
for result in "low" "med" "q" "hi"
do
# Count the size of the grid
picture_size=`head -n 2 $result.pnm|tail -n 1|awk '{print $1}'`
grid_size=`expr $picture_size \/ 100`
grid_size=`expr $grid_size + 1`
grid_size=`expr $grid_size \* 100`
# Copy the grid in full blocks bigger than the picture
pnmtile $grid_size $grid_size grid100.pbm > grid.pbm
# Cut excess grid off from top and right
pnmcut -top=`expr $picture_size \* -1` \
-right=`expr $picture_size - 1` grid.pbm >tmp.pbm
mv tmp.pbm grid.pbm
pnmscale $picture_size red_pixel.ppm >red_block.ppm
pnmcomp -alpha=grid.pbm red_block.ppm $result.pnm|pnm2png \
> pattern-error-correction-$result.png
rm -f $result.pnm
done
rm -f hi.pnm lo.pnm med.pnm q.pnm grid100.pbm grid.pbm
rm -f red_pixel.ppm red_block.ppm
exit 0