Bildgröße ermitteln (PHP+GD)



  • Hallo,
    ich bin gerade dabei eine Fotogallerie zu erstellen.
    Die Bilder werden alle mit einem Wasserzeichen versehen:

    <?php
    header('Content-type: images/jpeg');
    
    $dir="templates/images/fotos/";
    
    $imgsrc = imagecreatefromjpeg($dir.$_REQUEST['dir']."/".$_REQUEST['img']);
    
    $imgzeichen = imagecreatefrompng('templates/images/wasserzeichen.png');
    
    // Breite und Höhe des Bilds ermitteln
    $width = imagesx($imgsrc);
    $height = imagesy($imgsrc);
    if($width >= 350)
    {
    	$newwidth=350;
      $newheight=intval($height*$newwidth/$width);
      // Neues Bild erstellen
    	$img = imagecreatetruecolor($newwidth, $newheight);
    
    	// Bild in das Neuerstellte einfügen
    	imagecopyresized($img, $imgsrc, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
    
    	// Wasserzeichen einfügen
    	imagecopy($img,$imgzeichen,$newwidth-299,$newheight-35,0,0,299,35);
    	imagejpeg($img); // JPEG erstellen
    	imagedestroy($img); // JPEG löschen
    }
    else
    {
    	// Neues Bild erstellen
    	$img = imagecreatetruecolor($width, $height);
    
    	// Bild in das Neuerstellte einfügen
    	imagecopy($img, $imgsrc, 0, 0, 0, 0, $width, $height);
    
    	// Wasserzeichen einfügen
    	imagecopy($img,$imgzeichen,$width-299,$height-35,0,0,299,35);
    	imagejpeg($img); // JPEG erstellen
    	imagedestroy($img); // JPEG löschen
    }
    ?>
    

    Die Bilder zeige ich folgendermaßen an:

    echo "<img class=\"hr\" width=\"\" height=\"\" src=\"watermark.php?dir=Urlaub&img=1.jpg\" />";
    

    Das Funktioniert auch ganz gut, aber wie bekomme ich den nun die Größe des Bildes heraus?
    Folgender Code funktioniert nicht:

    $imgsrc = imagecreatefromjpeg("watermark.php?dir=Urlaub&img=1.jpg");
    $width = imagesx($imgsrc);
    $height = imagesy($imgsrc);
    

    Vielen Dank für eure Hilfe



  • Nimm besser ASP.NET, da hat man nicht so frickelcode und man hat eine strickte Trennung von Code und Design.



  • Danke für diesen Informativen Beitrag.



  • Hi,

    $imgsrc = imagecreatefromjpeg("http://www.whatever.com/watermark.php?dir=Urlaub&img=1.jpg"); /* Hier muss die volle URL stehen,
    weil du das generierte Bild wieder an PHP per HTTP sendest */
    $width = imagesx($imgsrc);
    $height = imagesy($imgsrc);
    

    Aber wieso speicherst du die fertig generierten Bilder nicht mit dem Wasserzeichen auf dem Server? Das würde die Sache viel einfacher machen.

    Gruß Borschtsch





  • Danke für die Antworten aber es funktioniert leider nicht:
    @Borschtsch
    Ich erhalte folgende Fehlermeldung:

    Warning: imagecreatefromjpeg() [function.imagecreatefromjpeg]: gd-jpeg: JPEG library reports unrecoverable error: in C:\xampp\htdocs\HANDBALL\fotos.php on line 22
    
    Warning: imagecreatefromjpeg() [function.imagecreatefromjpeg]: 'http://localhost/handball/watermark.php?dir=Urlaub&img=1.jpg' is not a valid JPEG file in C:\xampp\htdocs\HANDBALL\fotos.php on line 22
    
    $imgsrc = imagecreatefromjpeg("http://localhost/handball/watermark.php?dir=Urlaub&img=1.jpg");
    

    @árn[y]ék
    Funktioniert auch nicht, keine Fehlermeldung aber auch keine Ausgabe.

    cu mtaesler



  • mtaesler schrieb:

    Funktioniert auch nicht, keine Fehlermeldung aber auch keine Ausgabe.

    Was heißt "keine Ausgabe"?

    $info = getimagesize($fileName);
    print_r($info);
    

    Wirklick keine Ausgabe?

    Ansonsten würde ich aus deinen Fehlermeldungen schließen, dass die Datei keine gültige JPEG ist. Wird vlt. keine JPEG an das Skript gesandt, sondern eine Errorpage oder irgendetwas in der Art?



  • also
    das funktioniert:

    $size = getimagesize("templates/images/fotos/Urlaub/1.jpg");
    print_r($size);
    

    Aber mit watermark.php Funktioniert es nicht:

    $size = getimagesize("http://localhost/handball/watermark.php?dir=Urlaub&img=1.jpg");
    print_r($size);
    

    keine ausgabe/keine Fehlermeldung/Warnung!
    Aber in der watermark.php steht ja am Anfang:

    header('Content-type: images/jpeg');
    

    Funktionieren tut es auch:

    echo "<img class=\"hr\"  src=\"watermark.php?dir=".$_REQUEST['dir']."&img=".$file."\" />";
    

    Vielen Dank



  • Eigentlich heißt es nur image/jpeg (ohne s):

    header('Content-type: image/jpeg');
    

    Gruß Borschtsch



  • Vermutlich hast du den fopen-Wrapper für URIs deaktiviert (oder dein ISP, je nachdem). Lad die Datei mal lokal runter und führe dann die Funktion auf die lokale Kopie aus.



  • Also die Option allow_url_fopen ist Aktiviert.
    Auch wenn ich im PHP-Script ini_set('allow_url_fopen','1'); schreibe funktioniert es Leider nicht.
    PHP-Version(5.x.x) also höher als 4.3.0 ->
    http://no.php.net/manual/de/ref.filesystem.php#ini.allow-url-fopen

    Was meinst du mit

    Lad die Datei mal lokal runter und führe dann die Funktion auf die lokale Kopie aus.

    ?

    Vielen Dank


Anmelden zum Antworten