cdash: Warum funktioniert imageconvolution nicht

Hallo,

ich habe mir folgendes php Script zusammenkopiert:

  
    $src = "burgtor.jpg";  
    $quellbild = imagecreatefromjpeg($src);  
	  
	// Abmessungen Quellbild  
	$weite = imagesx($quellbild);  
	$hoehe = imagesy($quellbild);  
	  
	// Abmessungen Zielbild Standard  
	$weitet = 720;  
	$hoehet = 405;  
	  
	// Abmessungen Zielbild Preview  
	$weitep = 294;  
	$hoehep = 165;  
	  
	// Einstellungen für Scharfzeichnung mit imageconvolution  
	$sharpenMatrix = array(-1,-1,-1,-1,1,-1,-1,-1,-1);  
	$divisor = 8;  
	$offset = 0;  
  
  
    // Standard  
  
    $standard = imagecreatetruecolor($weitet,$hoehet);  
    imagecopyresampled($standard, $quellbild, 0, 0, 0, 0, $weitet, $hoehet, $weite, $hoehe);  
	imageconvolution($standard, $sharpenMatrix, $divisor, $offset);  
	header('Content-Type: image/jpeg');  
    imagejpeg($standard, "standard/burgtor.jpg", 100);  
    imagedestroy($standard);  
	  
	// Standard  
    $preview = imagecreatetruecolor($weitep,$hoehep);  
    imagecopyresampled($preview, $quellbild, 0, 0, 0, 0, $weitep, $hoehep, $weite, $hoehe);  
	imageconvolution($preview, $sharpenMatrix, $divisor, $offset);  
	header('Content-Type: image/jpeg');  
    imagejpeg($preview, "preview/burgtor.jpg", 100);  
    imagedestroy($preview);  

Das berechnen der Bildgrößen funktioniert auch problemlos - aber imageconvolution bzw. meine Versuche das Bild zu schärfen funktionieren überhaupt nicht. Gibt aber auch keinen Fehler und bricht nicht ab. Das Bild ist nur absolut identisch. GD Version ist 2.0.34

Wenn jemand einen Hinweis hat wäre ich dankbar.

Andreas

  1. Das Handbuch sagt zum zweiten Parameter:

    matrix
    A 3x3 matrix: an array of three arrays of three floats.

    1. Danke, dass war`s. So funktioniert es:

        
          $src = "burgtor.jpg";  
          $quellbild = imagecreatefromjpeg($src);  
      	  
      	// Abmessungen Quellbild  
      	$weite = imagesx($quellbild);  
      	$hoehe = imagesy($quellbild);  
      	  
      	// Abmessungen Zielbild Standard  
      	$weitet = 720;  
      	$hoehet = 405;  
      	  
      	// Abmessungen Zielbild Preview  
      	$weitep = 294;  
      	$hoehep = 165;  
      	  
      	// Einstellungen für Scharfzeichnung mit imageconvolution  
      	$sharpenMatrix = array(  
      		array(0.0, -1.0, 0.0),  
      		array(-1.0, 10.0, -1.0),  
      		array(0.0, -1.0, 0.0)  
      	);  
      	  
      	$divisor = array_sum(array_map('array_sum', $sharpenMatrix));  
      	$offset = 0;  
        
        
          // Standard  
        
          $standard = imagecreatetruecolor($weitet,$hoehet);  
          imagecopyresampled($standard, $quellbild, 0, 0, 0, 0, $weitet, $hoehet, $weite, $hoehe);  
      	imageconvolution($standard, $sharpenMatrix, $divisor, $offset);  
      	header('Content-Type: image/jpeg');  
          imagejpeg($standard, "standard/burgtor.jpg", 100);  
          imagedestroy($standard);  
      	  
      	// Standard  
          $preview = imagecreatetruecolor($weitep,$hoehep);  
          imagecopyresampled($preview, $quellbild, 0, 0, 0, 0, $weitep, $hoehep, $weite, $hoehe);  
      	imageconvolution($preview, $sharpenMatrix, $divisor, $offset);  
      	header('Content-Type: image/jpeg');  
          imagejpeg($preview, "preview/burgtor.jpg", 100);  
          imagedestroy($preview);  
      
      

      Andreas

      1. Hi,

        Danke, dass war`s. So funktioniert es:

        // Standard
            $standard = imagecreatetruecolor($weitet,$hoehet);
            imagecopyresampled($standard, $quellbild, 0, 0, 0, 0, $weitet, $hoehet, $weite, $hoehe);
        imageconvolution($standard, $sharpenMatrix, $divisor, $offset);
        header('Content-Type: image/jpeg');
            imagejpeg($standard, "standard/burgtor.jpg", 100);
            imagedestroy($standard);

        // Standard
            $preview = imagecreatetruecolor($weitep,$hoehep);
            imagecopyresampled($preview, $quellbild, 0, 0, 0, 0, $weitep, $hoehep, $weite, $hoehe);
        imageconvolution($preview, $sharpenMatrix, $divisor, $offset);
        header('Content-Type: image/jpeg');
            imagejpeg($preview, "preview/burgtor.jpg", 100);
            imagedestroy($preview);

        nö, der Client kriegt immer noch angekündigt, dass er ein JPEG-Bild bekommt, und dann kommt nichts mehr.

        Ciao,
         Martin

        --
        Ich wollt', ich wär ein Teppich.
        Dann könnte ich morgens liegenbleiben.
        Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
  2. Hi,

    $sharpenMatrix = array(-1,-1,-1,-1,1,-1,-1,-1,-1);

    dass du den Parameter matrix falsch ansetzt, wurde ja schon gesagt.
    Aber was noch dazukommt ...

    // Standard
        $standard = imagecreatetruecolor($weitet,$hoehet);
        imagecopyresampled($standard, $quellbild, 0, 0, 0, 0, $weitet, $hoehet, $weite, $hoehe);
    imageconvolution($standard, $sharpenMatrix, $divisor, $offset);
    header('Content-Type: image/jpeg');
        imagejpeg($standard, "standard/burgtor.jpg", 100);
        imagedestroy($standard);

    // Standard
        $preview = imagecreatetruecolor($weitep,$hoehep);
        imagecopyresampled($preview, $quellbild, 0, 0, 0, 0, $weitep, $hoehep, $weite, $hoehe);
    imageconvolution($preview, $sharpenMatrix, $divisor, $offset);
    header('Content-Type: image/jpeg');
        imagejpeg($preview, "preview/burgtor.jpg", 100);
        imagedestroy($preview);

    Hier sendest du zweimal den Content-Type-Header an den Client, aber keine Daten. Das passt nicht so richtig zusammen. Erwartest du eine direkte Anzeige im Browser, oder die gespeicherte Bilddatei auf dem Server? Letztere müsstest du bekommen (wenn die Matrix denn stimmen würde), erstere nicht. Wenn es dir nur um das Speichern der Bilder geht, ist das Senden eines HTTP-Headers aber auch Unfug - oder wenn schon, dann eventuell einen Status "204 No Content".

    So long,
     Martin

    --
    F: Was macht ein Offizier, der in der Nase bohrt?
    A: Er holt das Letzte aus sich heraus.
    Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(