source: subversion/applications/rendering/mapnik/mkshield.pl @ 4889

Last change on this file since 4889 was 4889, checked in by tomhughes, 13 years ago

Add support for single character road numbers.

  • Property svn:executable set to *
File size: 3.0 KB
Line 
1#!/usr/bin/perl
2
3use strict;
4use warnings;
5
6use GD;
7
8mkshield("motorway_shield1", 17, 17, 128, 155, 192);
9mkshield("motorway_shield2", 24, 17, 128, 155, 192);
10mkshield("motorway_shield3", 31, 17, 128, 155, 192);
11mkshield("motorway_shield4", 38, 17, 128, 155, 192);
12
13mkshield("trunk_shield1", 17, 17, 127, 201, 127);
14mkshield("trunk_shield2", 24, 17, 127, 201, 127);
15mkshield("trunk_shield3", 31, 17, 127, 201, 127);
16mkshield("trunk_shield4", 38, 17, 127, 201, 127);
17mkshield("trunk_shield5", 45, 17, 127, 201, 127);
18
19mkshield("primary_shield1", 17, 17, 228, 109, 113);
20mkshield("primary_shield2", 24, 17, 228, 109, 113);
21mkshield("primary_shield3", 31, 17, 228, 109, 113);
22mkshield("primary_shield4", 38, 17, 228, 109, 113);
23mkshield("primary_shield5", 45, 17, 228, 109, 113);
24
25mkshield("secondary_shield1", 17, 17, 253, 191, 111);
26mkshield("secondary_shield2", 24, 17, 253, 191, 111);
27mkshield("secondary_shield3", 31, 17, 253, 191, 111);
28mkshield("secondary_shield4", 38, 17, 253, 191, 111);
29mkshield("secondary_shield5", 45, 17, 253, 191, 111);
30
31exit 0;
32
33sub mkshield
34{
35    my $name = shift;
36    my $width = shift;
37    my $height = shift;
38    my $r = shift;
39    my $g = shift;
40    my $b = shift;
41
42    my $shield = GD::Image->new($width, $height, 1);
43
44    $shield->alphaBlending(0);
45    $shield->saveAlpha(1);
46
47    my $white = $shield->colorAllocate(255, 255, 255);
48    my $border1 = $shield->colorAllocate($r, $g, $b);
49    my $border2 = $shield->colorAllocateAlpha(round($r * 1.2578), round($g * 1.1677), round($b * 1.0833), 8);
50    my $border3 = $shield->colorAllocateAlpha(round($r * 1.2031), round($g * 1.1290), round($b * 1.0677), 21);
51    my $border4 = $shield->colorAllocateAlpha($r, $g, $b, 43);
52    my $border5 = $shield->colorAllocateAlpha(round($r * 1.0391), round($g * 1.0258), round($b * 1.0104), 8);
53
54    $shield->filledRectangle(2, 2, $width - 3, $height - 3, $white);
55
56    $shield->line(0, 1, 0, $height - 2, $border1);
57    $shield->line($width - 1, 1, $width - 1, $height - 2, $border1);
58    $shield->line(1, 0, $width - 2, 0, $border1);
59    $shield->line(1, $height - 1, $width - 2, $height - 1, $border1);
60
61    $shield->line(1, 2, 1, $height - 3, $border2);
62    $shield->line($width - 2, 2, $width - 2, $height - 3, $border2);
63
64    $shield->line(2, 1, $width - 3, 1, $border3);
65    $shield->line(2, $height - 2, $width - 3, $height - 2, $border3);
66
67    $shield->setPixel(0, 0, $border4);
68    $shield->setPixel(0, $height - 1, $border4);
69    $shield->setPixel($width - 1, $height - 1, $border4);
70    $shield->setPixel($width - 1, 0, $border4);
71
72    $shield->setPixel(1, 1, $border5);
73    $shield->setPixel(1, $height - 2, $border5);
74    $shield->setPixel($width - 2, $height - 2, $border5);
75    $shield->setPixel($width - 2, 1, $border5);
76
77    open(SHIELD, "> ${name}.png") || die "Can't open ${name}.png: $!";
78    binmode(SHIELD);
79    print SHIELD $shield->png;
80    close(SHIELD);
81
82    return;
83}
84
85sub round
86{
87    my $n = shift;
88    my $r = sprintf("%.0f", $n);
89
90    $r = 255 if $r > 255;
91
92    return $r;
93}
Note: See TracBrowser for help on using the repository browser.