blob: a435914e0f2955d03f9e34d43bb273e076b4b17b (
plain)
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
|
#!/usr/bin/perl
use warnings;
use File::Temp qw(tempfile);
use List::Util qw(max min);
$font = 'FreeMono';
# Approximate dimensions used to determine approximate size. Only the
# value that produces the higher resolution (for the given input) is used.
$desired_width = 1296;
$desired_height = 1296;
# Font size in points (72 points per inch). This does not determine the size of
# the image, because the image density is defined in terms of it.
# Probably this should be changed so density is fixed and font size varies.
$font_size = 72;
$margin = $font_size;
$width_chars = 0;
$height_lines = 0;
###
($tempFH, $tempFN) = tempfile();
for (<STDIN>) {
$width_chars = max((length $_), $width_chars);
++$height_lines;
print $tempFH $_;
}
$PPI = 72; # points per inch
sub choose_density()
{
my $width_density = $PPI * $desired_width / $width_chars / $font_size;
my $height_density = $PPI * $desired_height / $height_lines / $font_size;
return max($width_density, $height_density);
}
$density = choose_density;
$character_size = $font_size * $density / $PPI;
$initial_image_size = sprintf "%ix%i",
1.25 * $character_size * $width_chars,
1.25 * $character_size * $height_lines;
$offset = sprintf '+%i+%i', ($character_size) x 2;
$output = 'png:-';
system <<END;
convert \\
-size $initial_image_size \\
xc:white \\
-font "$font" \\
-density $density \\
-pointsize $font_size \\
-annotate $offset \\
"\@$tempFN" \\
-trim \\
-bordercolor '#FFFFFF' \\
-border $margin \\
+repage \\
$output
END
|