You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
33 lines
909 B
33 lines
909 B
1 year ago
|
#!/bin/bash
|
||
|
set -e
|
||
|
dev=/dev/usb/lp0
|
||
|
|
||
|
image="$(magick "$1" -resize 256x -dither FloydSteinberg -remap pattern:gray50 pbm:- | base64)"
|
||
|
data_header="$(echo "$image" | base64 -d | sed -n '2p')"
|
||
|
data="$(echo "$image" | base64 -d | tail -n +3 | base64)"
|
||
|
|
||
|
hex_size() {
|
||
|
printf '%04x' "$1" | sed -e 's/\(..\)\(..\)/\\x\2\\x\1/g'
|
||
|
}
|
||
|
|
||
|
size="$(echo "$data" | base64 -d | wc -c)"
|
||
|
size="$(hex_size "$(("$size" + 10))")"
|
||
|
size_x="$(hex_size "$(echo "$data_header" | cut -d' ' -f 1)")"
|
||
|
size_y="$(hex_size "$(echo "$data_header" | cut -d' ' -f 2)")"
|
||
|
|
||
|
# Upload graphics data
|
||
|
printf '\x1D(L' > $dev
|
||
|
printf "$size" > $dev
|
||
|
printf '\x30\x70\x30' > $dev
|
||
|
printf '\x02\x02' > $dev # bx, by (1 or 2)
|
||
|
printf '\x31' > $dev # color
|
||
|
printf "$size_x" > $dev # size x
|
||
|
printf "$size_y" > $dev # size y
|
||
|
echo "$data" | base64 -d > $dev
|
||
|
|
||
|
# Print graphics data
|
||
|
printf '\x1D(L\x02\0\x30\x02' > $dev
|
||
|
|
||
|
# Cut paper
|
||
|
printf '\n\n\x1DVA\0' > $dev
|