-my %col = (
- html => [
- sprintf('<a title="%s" href="%s">html</a>',
- 'HTML keywords (inherited by CSSā„2.1 and SVG), mostly identical to X11',
- 'http://www.w3.org/TR/css3-color/#html4',
- ),
- qw/000000:black 800000:maroon 008000:green 808000:olive
- 000080:navy 800080:purple 008080:cyan C0C0C0:silver
- 808080:gray FF0000:red 00FF00:lime FFFF00:yellow
- 0000FF:blue FF00FF:fuchsia 00FFFF:aqua FFFFFF:white /,
- ],
- cga => [
- undef, # linux console, kde?
- qw/000000 AA0000 00AA00 AA5500 0000AA AA00AA 00AAAA AAAAAA
- 555555 FF5555 55FF55 FFFF55 5555FF FF55FF 55FFFF FFFFFF/,
-# qw/reset bold dim italic underline blink fastblink reverse hidden/,
- ],
- xterm => [
- undef, # rxvt except for blues
- qw/000000 CC0000 00CC00 CCCC00 4682B4 CC00CC 00CCCC E5E5E5
- 4C4C4C FF0000 00FF00 FFFF00 1E90FF FF00FF 00FFFF FFFFFF/,
- ],
- tango => [
- undef, # default Gnome theme
- qw/2E3436 CC0000 4E9A06 C4A000 3465A4 75507B 06989A D3D7CF
- 555753 EF2929 8AE234 FCE94F 729FCF AD7FA8 34E2E2 EEEEEC/,
- ],
- xkcd => [
- sprintf('<a title="%s" href="%s">xkcd</a>',
- 'human averages in xkcd survey results',
- 'http://blog.xkcd.com/2010/05/03/color-survey-results/',
- ),
- qw/000000:black 650021:maroon 15b01a:green 6e750e:olive
- 01153e:navy 7e1e9c:purple 029386:teal c5c9c7:silver
- 929591:grey e50000:red aaff32:lime ffff14:yellow
- 0343df:blue ed0dd9:fuchsia 00ffff:cyan ffffff:white /,
- ],
- android => [
- sprintf('<a href="%s" title="%s">android</a>',
- 'http://developer.android.com/guide/practices/ui_guidelines/icon_design.html',
- 'recommended colour palette for Android icons',
- ),
- qw/FFFFFF:white BFBFBF:light 808080:medium 404040:dark
- 000000:black 6699FF:blue1 3366CC:blue2 003399:blue3
- 99CC33:green1 00CC00:green2 669933:green3 FFCC00:orange1
- FF9900:orange2 FF6600:orange3 CC0000:red /,
- ],
- app => [
- 'Term.app',
- qw/000000 C23621 25BC24 ADAD27 492EE1 D338D3 33BBC8 CBCCCD
- 818383 FC391F 31E722 EAEC23 5833FF F935F8 14F0F0 E9EBEB /,
- ],
- putty => [
- 'PuTTY',
- qw/000000 BB0000 00BB00 BBBB00 0000BB BB00BB 00BBBB BBBBBB
- 555555 FF5555 55FF55 FFFF55 5555FF FF55FF 55FFFF FFFFFF /,
- ],
- slutty => [
- sprintf('<a href="%s" title="%s">SluTTY</a>',
- 'http://www.npjh.com/slutty.html',
- 'PuTTY fork with light colour scheme',
- ),
- qw/000000 9C1D1D 6C9446 AC9A47 335786 8F6496 486768 E0DCDC
- 2F2F2F CD5757 8FC35B D1C45E 5C81A9 BC95B7 76CBCB EEEEEC /,
- ],
- mac2 => [
- 'MacII',
- qw/FFFFFF FBF305 FF6403 DD0907 F20884 4700A5 0000D3 02ABEA
- 1FB714 006412 562C05 90713A C0C0C0 808080 404040 000000 /,
- ],
- risc => [
- 'RISC', # v2/3
- qw/FFFFFF DDDDDD BBBBBB 999999 777777 555555 333333 000000
- 004499 EEEE00 00CC00 DD0000 EEEEBB 558800 FFBB00 00BBFF /,
- ],
- c64 => [
- 'C=64', # commodore 64/128
- map { Shiar_Sheet::Colour->newyuv($_)->rgb48 }
- qw/008080 FF8080 4F4FF5 9FB00A 5FDADA 7F2525 3FFF80 BF0080
- 5F25DA 3F0AB0 7F4FF5 4F8080 778080 BF2525 77FF80 9F8080 /
- ],
- msx => [
- 'MSX',
- map { Shiar_Sheet::Colour->newyuv($_)->rgb48 }
- qw/008080 008080 873F1F AA4F37 66FF6F 87EE76 7757D6 BAB70E
- 874FEE AA4FEE BA1F98 CC3798 77462E 87B0BE CC8080 FF8080 /,
- ],
-);
+sub img_egapal {
+ my ($palette, $imgfile, $reindex) = @_;
+ return eval {
+ require Imager;
+ require MIME::Base64;
+
+ my @imgpal = map { Imager::Color->new(ref $_ ? @$_ : $_) } @{$palette};
+ state $imgcache = {};
+ my $img = $imgcache->{$imgfile}
+ //= Imager->new(file => "data/palimage/$imgfile")
+ or die Imager->errstr.$/;
+
+ do {
+ if ($reindex) {
+ $img->to_paletted({
+ make_colors => 'none',
+ colors => \@imgpal,
+ translate => 'closest',
+ });
+ }
+ else {
+ @{[ $img->getcolors ]} == @imgpal
+ or die "incompatible palette size\n";
+ $img->setcolors(colors => \@imgpal);
+ $img;
+ }
+ }->write(data => \my $imgdata, type => 'png');
+ return sprintf '<img src="data:image/png;base64,%s">',
+ MIME::Base64::encode_base64($imgdata);
+ } || $@;
+}