Bilder verkleinern
Verkleinerte Bilder werden im Browser etwas unscharf dargestellt.
Ich habe verschiedenes ausprobiert, aber bis jetzt noch keine Möglichkeit der Verbesserung gefunden.
Die einzige vernünftige Lösung ist folgende: (Auch wenn noch nicht optimal)
In der Datei \conf\userstyle.css folgendes hinzufügen:
Sollte es Probleme bei der Anzeige geben, dann die Filter Befehle weg lassen!
.dokuwiki img.media { /* Bild schärfen */ image-rendering: -moz-crisp-edges; /* Firefox */ image-rendering: -o-crisp-edges; /* Opera */ image-rendering: -webkit-optimize-contrast;/* Webkit (non-standard naming) */ image-rendering: crisp-edges; -ms-interpolation-mode: nearest-neighbor; /* IE (non-standard property) */ /* helligkeit und Konrast verbessern */ -webkit-filter: brightness(1.1) contrast(1.3); filter: brightness(1.1) contrast(1.3); }
Unter http://packen123.de/img_convert/ findet man ein kleines Testprogramm für ImageMagick
Hier im DokuWiki kann man in der Konfiguration den ImageMagick Path eintragen um ImageMagick zu nutzen.
im_convert: „/usr/bin/convert“
Wenn man die Funktion umprogrammieren will schaut man in die Datei: inc\media.php ab Zeile 2276 function media_resize_imageIM
Drei Lösungsansätze:
1. mit ImageMagick
- download
// check if convert is configured if(!$conf['im_convert']) return false; // prepare command $cmd = $conf['im_convert']; $cmd .= ' -filter Lanczos -resize -quality 10 '.$to_w.'x'.$to_h.'!'; if ($ext == 'jpg' || $ext == 'jpeg') { $cmd .= ' -quality '.$conf['jpg_quality']; } $cmd .= " $from $to"; @exec($cmd,$out,$retval); if ($retval == 0) return true; return false;
2. mit PHP
- download
$newWidth = $to_w; $targetFile = $to; $originalFile = $from; $info = getimagesize($originalFile); $mime = $info['mime']; switch ($mime) { case 'image/jpeg': $image_create_func = 'imagecreatefromjpeg'; $image_save_func = 'imagejpeg'; $new_image_ext = 'jpg'; break; case 'image/png': $image_create_func = 'imagecreatefrompng'; $image_save_func = 'imagepng'; $new_image_ext = 'png'; break; case 'image/gif': $image_create_func = 'imagecreatefromgif'; $image_save_func = 'imagegif'; $new_image_ext = 'gif'; break; default: throw new Exception('Unknown image type.'); } $img = $image_create_func($originalFile); list($width, $height) = getimagesize($originalFile); $newHeight = ($height / $width) * $newWidth; $tmp = imagecreatetruecolor($newWidth, $newHeight); imagecopyresampled($tmp, $img, 0, 0, 0, 0, $newWidth, $newHeight, $width, $height); if (file_exists($targetFile)) { unlink($targetFile); } $image_save_func($tmp, "$targetFile.$new_image_ext",0); //if ($retval == 0) return true; return false;
der dritte Lösungsansatz ist noch nicht ganz fertig gedacht von mir:
Ich würde die Funktion für die Verkleinerung durch eine Verkleinerung in das WEBP Format durchführen: Z.B.:
Beispiel Syntax:
exec("cwebp original.png -o ausgabe.webp -lossless -m 6 -q 100 ");
Code Beispiel zum Einbinden in Dokuwiki
$cmd = "cwebp"; $cmd .= " -lossless -m 6 -q 100"; $cmd .= " $from -o $to"; @exec($cmd,$out,$retval); return true;