Tricked.dev

Printing images with TSPL and rust

Ever had the desire to print an image with a label using Rust and TSPL? As with many tasks in the world of programming, there are several steps involved. Today, I’m sharing how I converted an image into a printable format suitable for TSC thermal printers.

Image Transformation

The first hurdle was preparing the image. TSC thermal printers require a particular format: monochrome bitmaps. Here’s a quick snippet that showcases how I converted a standard image into this format:

Terminal window
convert input.jpg -colorspace Gray -ordered-dither h4x4a -scale 590x295 mono.bmp
convert mono.bmp -monochrome monochrome.bmp

With these two commands, the image is first converted into grayscale and then further processed to a monochrome bitmap. The final result, monochrome.bmp, is now ready for the next stage.

Rust & TSPL Integration

Utilizing functions I previously created for Writing TSPL on linux, I devised the following code:

use std::fs::read;
let mut data: Vec<u8> = vec![];
data.extend(
b"SIZE 50.00 mm,25.00 mm
DENSITY 3
SPEED 2
SHIFT 0
OFFSET 0 mm
GAP 2.7 mm,0.00 mm
CODEPAGE UTF-8
CLS
DOWNLOAD \"frame.bmp\"\n",
);
data.extend(read("./monochrome.bmp")?);
data.extend(b"\nEOP\nPUTBMP 0,0,\"frame.bmp\"\nPRINT 1,1\n");
write_binary(&data)?;
Ok(())

Conclusion

Printing images with labels using TSPL and Rust may seem niche, but the process underscores the broader themes in programming: exploration, problem-solving, and innovation. Whether you’re diving into the nuances of TSPL or embarking on another coding journey, remember that every challenge presents an opportunity for growth and creativity. Happy coding!

View on Github