add pagenumber parameter

this allows picking a page from a pdf. also, this enhances performance
greatly when rendering pdfs, as only the first page is rasterized.
(otherwise, imagemagick would treat the pdf as a list of images, work
with all of them, until finally only the first page gets saved). the
default parameter of 0 will select the single image contained in typical
image files anyway, so no specialcasing between single- and multifile
containers is needed.
master
chrysn 2014-04-07 11:32:25 +02:00
parent 6cc43773e7
commit bcc209eb5a
2 changed files with 8 additions and 1 deletions

View File

@ -66,12 +66,16 @@ sub preprocess (@) {
my $base = IkiWiki::basename($file);
my $issvg = $base=~s/\.svg$/.png/i;
my $ispdf = $base=~s/\.pdf$/.png/i;
my $pagenumber = exists($params{pagenumber}) ? int($params{pagenumber}) : 0;
if ($pagenumber != 0) {
$base = "p$pagenumber-$base";
}
eval q{use Image::Magick};
error gettext("Image::Magick is not installed") if $@;
my $im = Image::Magick->new();
my $imglink;
my $r = $im->Read($srcfile);
my $r = $im->Read("$srcfile\[$pagenumber]");
error sprintf(gettext("failed to read %s: %s"), $file, $r) if $r;
my ($dwidth, $dheight);

View File

@ -28,6 +28,9 @@ to the full size version. By default it does; set "link=somepage" to link
to another page instead, or "link=no" to disable the link, or
"link=http://url" to link to a given url.
The `pagenumber` parameter selects which of multiple images should be rendered;
this is relevant mainly for GIF and PDF source images.
You can also set default values that will be applied to all later images on
the page, unless overridden. Useful when including many images on a page.