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;