+sub img_egapal {
+ my ($palette) = @_;
+ return eval {
+ require Imager;
+ require MIME::Base64;
+
+ my @imgpal = map { Imager::Color->new(ref $_ ? @$_ : $_) } @{$palette};
+ state $img = Imager->new(file => "data/$imgfile")
+ or die Imager->errstr.$/;
+ @{[ $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);
+ } || $@;
+}
+