Labels: Difference between revisions
Appearance
Created page with "== QR codes == 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: 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) {..." |
No edit summary |
||
| Line 30: | Line 30: | ||
sub render | sub render | ||
{ | { | ||
my $t = shift; | |||
my $title = shift; | my $title = shift; | ||
my $url = shift; | my $text = shift; | ||
my $url = shift // $text; | |||
my $m = 3; | |||
$img = undef; | $img = undef; | ||
$h = | $h = $t; | ||
$w = $h; | $w = $h; | ||
# Sizing first | # Sizing first | ||
text($large,48,0,$h,0, $title); | 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 | # Actual rendering | ||
$img = GD::Image->new($w,$h); | $img = GD::Image->new($w,$h); | ||
my $qr = GD::Barcode::QRcode->new($url)->plot(Height => $h); | my $qr = GD::Barcode::QRcode->new($url)->plot(Height => $h); | ||
$img->copyResized($qr, 0, 0, | $img->copyResized($qr, 0, 0, $m, $m, $img->height, $img->height, $qr->width-2*$m, $qr->height-2*$m); | ||
text($large,48,0,$img->height, 64, $title); | |||
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; | return $img; | ||
| Line 55: | Line 67: | ||
my $title = shift; | my $title = shift; | ||
my $str = shift // $title; | my $str = shift // $title; | ||
open my $ | open my $big, ">$str.png" or die "$str.png: $!"; | ||
print $ | print $big render (128, $title, "https://wiki.base48.cz/wiki/$str")->png; | ||
open my $small, ">small-$str.png" or die "$str.png: $!"; | |||
print $small render (76, $title, "/wiki/$str", "https://wiki.base48.cz/wiki/$str")->png; | |||
} | } | ||
| Line 73: | Line 87: | ||
do_one('Library', 'Library'); | do_one('Library', 'Library'); | ||
do_one('Output Buffer', 'OutputBuffer'); | 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'); | |||
=== Printing them out: === | === Printing them out: === | ||
| Line 80: | Line 97: | ||
# ./ptouch-print --image=Library.png | # ./ptouch-print --image=Library.png | ||
Minimize waste by chaining multiple labels: | |||
# ./ptouch-print --image=Library.png --precut | # ./ptouch-print --image=CNC.png --chain | ||
# ./ptouch-print --image=Library.png --precut -chain | |||
# ./ptouch-print --image=OutputBuffer.png --precut | # ./ptouch-print --image=OutputBuffer.png --precut | ||
Revision as of 10:54, 20 March 2026
QR codes
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:
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, "https://wiki.base48.cz/wiki/$str")->png;
open my $small, ">small-$str.png" or die "$str.png: $!";
print $small render (76, $title, "/wiki/$str", "https://wiki.base48.cz/wiki/$str")->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');
Printing them out:
Use this tool: https://git.familie-radermacher.ch/linux/ptouch-print.git
# perl makeqr.pl # ./ptouch-print --image=Library.png
Minimize waste by chaining multiple labels:
# ./ptouch-print --image=CNC.png --chain # ./ptouch-print --image=Library.png --precut -chain # ./ptouch-print --image=OutputBuffer.png --precut