aboutsummaryrefslogtreecommitdiff
path: root/IkiWiki/Plugin/img.pm
diff options
context:
space:
mode:
authorchrysn <chrysn@fsfe.org>2014-07-15 11:57:57 +0200
committerchrysn <chrysn@fsfe.org>2014-07-15 13:47:37 +0200
commitfa2a4d0db472f7fc85ef3d6c6e6ba2786793f637 (patch)
tree27508627d0212cfc4b7682677c9d434fa40cee47 /IkiWiki/Plugin/img.pm
parenta308b212ad697fb204fa8543d00c39a24f58de5f (diff)
downloadikiwiki-fa2a4d0db472f7fc85ef3d6c6e6ba2786793f637.tar
ikiwiki-fa2a4d0db472f7fc85ef3d6c6e6ba2786793f637.tar.gz
show resized img in preview using data: urls
in analogy to sparklines, this renders scaled imgs to data:img/...;base64,... urls in preview mode. if the image is already present on the server (eg because it was not just inserted), the already rendered image is referenced instead.
Diffstat (limited to 'IkiWiki/Plugin/img.pm')
-rw-r--r--IkiWiki/Plugin/img.pm20
1 files changed, 9 insertions, 11 deletions
diff --git a/IkiWiki/Plugin/img.pm b/IkiWiki/Plugin/img.pm
index 1ab753352..54c13d069 100644
--- a/IkiWiki/Plugin/img.pm
+++ b/IkiWiki/Plugin/img.pm
@@ -75,6 +75,7 @@ sub preprocess (@) {
error gettext("Image::Magick is not installed") if $@;
my $im = Image::Magick->new();
my $imglink;
+ my $imgdatalink;
my $r = $im->Read("$srcfile\[$pagenumber]");
error sprintf(gettext("failed to read %s: %s"), $file, $r) if $r;
@@ -123,15 +124,17 @@ sub preprocess (@) {
$r = $im->Resize(geometry => "${dwidth}x${dheight}");
error sprintf(gettext("failed to resize: %s"), $r) if $r;
+ $im->set(($issvg || $ispdf) ? (magick => 'png') : ());
+ my @blob = $im->ImageToBlob();
# don't actually write resized file in preview mode;
# rely on width and height settings
if (! $params{preview}) {
- $im->set(($issvg || $ispdf) ? (magick => 'png') : ());
- my @blob = $im->ImageToBlob();
writefile($imglink, $config{destdir}, $blob[0], 1);
}
else {
- $imglink = $file;
+ eval q{use MIME::Base64};
+ error($@) if $@;
+ $imgdatalink = "data:image/".$im->Get("magick").";base64,".encode_base64($blob[0]);
}
}
@@ -148,14 +151,9 @@ sub preprocess (@) {
}
my ($fileurl, $imgurl);
- if (! $params{preview}) {
- $fileurl=urlto($file, $params{destpage});
- $imgurl=urlto($imglink, $params{destpage});
- }
- else {
- $fileurl=urlto($file);
- $imgurl=urlto($imglink);
- }
+ my $urltobase = $params{preview} ? undef : $params{destpage};
+ $fileurl=urlto($file, $urltobase);
+ $imgurl=$imgdatalink ? $imgdatalink : urlto($imglink, $urltobase);
if (! exists $params{class}) {
$params{class}="img";