]> git.vanrenterghem.biz Git - git.ikiwiki.info.git/blobdiff - IkiWiki/Plugin/img.pm
Request review and possible merge of tincho-osm.
[git.ikiwiki.info.git] / IkiWiki / Plugin / img.pm
index 494fe2335fc6de1d3723c97efc2d73ecc17b0a20..b85824345ed6e1634cf6f43b08ac3887a56117d4 100644 (file)
@@ -39,7 +39,7 @@ sub allowed {
        $allowed = ['jpeg', 'png', 'gif', 'svg'] unless defined $allowed && @$allowed;
 
        foreach my $a (@$allowed) {
-               return 1 if $a eq $format || $a eq 'everything';
+               return 1 if lc($a) eq $format || lc($a) eq 'everything';
        }
 
        return 0;
@@ -89,7 +89,7 @@ sub preprocess (@) {
        my $extension;
        my $format;
 
-       if ($base =~ m/\.([a-z0-9]+)$/) {
+       if ($base =~ m/\.([a-z0-9]+)$/is) {
                $extension = $1;
        }
        else {
@@ -125,7 +125,14 @@ sub preprocess (@) {
        }
        else {
                # allow ImageMagick to auto-detect (potentially dangerous)
-               $format = '';
+               my $im = Image::Magick->new();
+               my $r = $im->Ping(file => $in);
+               if ($r) {
+                       $format = lc $r;
+               }
+               else {
+                       error sprintf(gettext("failed to determine format of %s"), $file);
+               }
        }
 
        error sprintf(gettext("%s image processing disabled in img_allowed_formats configuration"), $format ? $format : "\"$extension\"") unless allowed($format ? $format : "everything");
@@ -174,6 +181,12 @@ sub preprocess (@) {
                my $r = $im->Read("$format:$srcfile\[$pagenumber]");
                error sprintf(gettext("failed to read %s: %s"), $file, $r) if $r;
 
+               if ($config{deterministic}) {
+                       $im->Set('date:create' => 0);
+                       $im->Set('date:modify' => 0);
+                       $im->Set('option'      => 'png:exclude-chunk=time');
+               }
+
                if (! defined $im->Get("width") || ! defined $im->Get("height")) {
                        error sprintf(gettext("failed to get dimensions of %s"), $file);
                }