Jump to content

Labels

From base48
Revision as of 20:37, 22 March 2026 by imported>Thebys (syntax highlighting error fix?)

QR codes

Example of a real label used in Base48.

Thebys' Brother printer can print monochrome PNG files of height 128px.

Creating the PNG files

One way to do it is with this simple Perl script:<syntaxhighlight lang="perl" line="1" start="0">use GD::Barcode::QRcode; use GD;

use strict; use warnings;

my $large = '/usr/share/fonts/truetype/liberation/LiberationSans-Regular.ttf'; my $narrow = '/usr/share/fonts/truetype/liberation/LiberationSansNarrow-Regular.ttf';

my ($img, $w, $h);

sub text { my $font = shift; if ($img) { $img->stringFT(-1,$font,@_) or die "$font: $@: $!"; } else { my @bounds = GD::Image->stringFT(-1,$font,@_) or die "$font: $@: $!"; my $nw = $bounds[2] + 16; $w = $nw if $nw > $w; } }

sub render { my $t = shift; my $title = shift; my $text = shift; my $url = shift // $text; my $m = 3;

$img = undef; $h = $t; $w = $h;

# Sizing first if ($t == 76) { text($narrow,32,0,$h+8,0, $text); } else { text($large,48,0,$h+8,0, $title); text($narrow,24,0,$h+8,0, $text); }

# Actual rendering $img = GD::Image->new($w,$h); my $qr = GD::Barcode::QRcode->new($url)->plot(Height => $h); $img->copyResized($qr, 0, 0, $m, $m, $img->height, $img->height, $qr->width-2*$m, $qr->height-2*$m);

if ($t == 76) { text($narrow,32,0,$img->height+8, $img->height-24, $text); } else { text($large,48,0,$img->height+8, 64, $title); text($narrow,24,0,$img->height+8, $img->height-16, $text); }

return $img; }

sub do_one { my $title = shift; my $str = shift // $title;

open my $big, ">$str.png" or die "$str.png: $!"; print $big render (128, $title, "<a rel="nofollow" class="external free" href="https://wiki.base48.cz/wiki/$str">https://wiki.base48.cz/wiki/$str</a>")->png;

open my $small, ">small-$str.png" or die "$str.png: $!"; print $small render (76, $title, "/wiki/$str", "<a rel="nofollow" class="external free" href="https://wiki.base48.cz/wiki/$str">https://wiki.base48.cz/wiki/$str</a>")->png; }

do_one('Electro Lab', 'Electro_lab'); do_one('RGB LED Panel', 'Buse_RGB_LED_Panel'); do_one('3D Printers', '3D_printing_lab'); do_one('C64', 'C64'); do_one('Color Jet Printer', 'Color_Jet_Printer'); do_one('CNC', 'CNC'); do_one('Metal Workshop', 'Metal_workshop'); do_one('Woodworking', 'Woodworking'); do_one('Turtle Drawing Plotter', 'PlotBot'); do_one('Bike Repair Corner', 'Bike_corner'); do_one('Library', 'Library'); do_one('Output Buffer', 'OutputBuffer'); do_one('Making QR labels', 'Labels#QR_codes'); do_one('Bongs', 'Bongs#Bongo'); do_one('Bong Cleaning Tools', 'Bongs#Maintenance');</syntaxhighlight>

Printing them out:

Use this tool: https://git.familie-radermacher.ch/linux/ptouch-print.git<syntaxhighlight lang="perl" line="1">

  1. perl makeqr.pl
  2. ./ptouch-print --image=Library.png

</syntaxhighlight>Minimize waste by chaining multiple labels:<syntaxhighlight lang="shell">

  1. ./ptouch-print --image=CNC.png --chain
  2. ./ptouch-print --image=Library.png --precut --chain
  3. ./ptouch-print --image=OutputBuffer.png --precut

</syntaxhighlight>