img: Don't generate new verison of image if it is scaled to be larger in either dimension.

Although imagemagick handles even really large sizes sanely, using a page
file, doing so would just waste time and disk space, since the browser
can be told to resize it larger.
master
Joey Hess 2009-08-28 23:23:06 -04:00
parent 94727e7fcf
commit 03449610d6
2 changed files with 38 additions and 3 deletions

View File

@ -65,6 +65,8 @@ sub preprocess (@) {
my $imglink;
my $r;
my ($dwidth, $dheight);
if ($params{size} ne 'full') {
add_depends($params{page}, $image);
@ -86,7 +88,15 @@ sub preprocess (@) {
$r = $im->Read($srcfile);
error sprintf(gettext("failed to read %s: %s"), $file, $r) if $r;
$r = $im->Resize(geometry => "${w}x${h}");
# don't resize any larger
my ($rw, $rh) = ($w, $h);
if ((length $rw && $rw > $im->Get("width")) ||
(length $rh && $rh > $im->Get("height"))) {
$rw=$im->Get("width");
$rh=$im->Get("height");
}
$r = $im->Resize(geometry => "${rw}x${rh}");
error sprintf(gettext("failed to resize: %s"), $r) if $r;
# don't actually write file in preview mode
@ -98,11 +108,34 @@ sub preprocess (@) {
$imglink = $file;
}
}
# since we don't really resize larger, set the display
# size, so the browser can scale the image up if necessary
if (length $w && length $h) {
($dwidth, $dheight)=($w, $h);
}
# avoid division by zero on 0x0 image
elsif ($im->Get("width") == 0 || $im->Get("height") == 0) {
($dwidth, $dheight)=(0, 0);
}
# calculate unspecified size from the other one, preserving
# aspect ratio
elsif (length $w) {
$dwidth=$w;
$dheight=$w / $im->Get("width") * $im->Get("height");
}
elsif (length $h) {
$dheight=$h;
$dwidth=$h / $im->Get("height") * $im->Get("width");
}
}
else {
$r = $im->Read($srcfile);
error sprintf(gettext("failed to read %s: %s"), $file, $r) if $r;
$imglink = $file;
$dwidth = $im->Get("width");
$dheight = $im->Get("height");
}
my ($fileurl, $imgurl);
@ -120,8 +153,8 @@ sub preprocess (@) {
}
my $imgtag='<img src="'.$imgurl.
'" width="'.$im->Get("width").
'" height="'.$im->Get("height").'"'.
'" width="'.$dwidth.
'" height="'.$dheight.'"'.
(exists $params{alt} ? ' alt="'.$params{alt}.'"' : '').
(exists $params{title} ? ' title="'.$params{title}.'"' : '').
(exists $params{align} ? ' align="'.$params{align}.'"' : '').

2
debian/changelog vendored
View File

@ -37,6 +37,8 @@ ikiwiki (3.1415926) UNRELEASED; urgency=low
* po: fix interdiction to create pages of type po (intrigeri)
* po: po: favor the type of linking page's masterpage on page creation
(intrigeri)
* img: Don't generate new verison of image if it is scaled to be
larger in either dimension.
-- Joey Hess <joeyh@debian.org> Wed, 12 Aug 2009 12:25:30 -0400