Probleme bei Thumbnails erstellen

chicoco38

Grünschnabel
Hallo, vielleicht kann mir jemand bei meinem Problem helfen. Ich nutze für den Bilder Upload SWF Upload. Die hochgeladenen Bilder sollen auf 650px verkleinert und Thumbs von 120px erstellt werden. Leider werden alle Bilder auf 120 px verkleinert, ich entdecke den Fehler einfach nicht.

ob_start();
imagejpeg($new_img);
$imagevariable = ob_get_contents();
ob_end_clean();
$file_id = md5($_FILES["Filedata"]["tmp_name"] + rand()*100000);
$_SESSION["file_info"][$file_id] = $imagevariable;
$_SESSION["full_image"][$file_id] = $fullimagevariable;
if($tid != ""){
if(!is_dir("../images/gal/".$tid)){
mkdir("../images/gal/".$tid);
chmod("../images/gal/".$tid, 0777);
}
if(!is_dir("../images/gal/".$tid."/thumbs")){
mkdir("../images/gal/".$tid."/thumbs");
chmod("../images/gal/".$tid."/thumbs", 0777);
}

$fp = fopen("../images/gal/".$tid."/thumbs/".$file_id.".jpg", "w+");
fwrite($fp, $_SESSION["file_info"][$file_id]);
fclose($fp);


if(checkwh("../images/gal/".$tid."/thumbs/".$file_id.".jpg")){
$tn = new thumbs(650,650, "../images/gal/".$tid."/thumbs/".$file_id.".jpg", "../images/gal/".$tid."/".$file_id.".jpg");
}else{
file_put_contents("../images/gal/".$tid."/".$file_id.".jpg", $_SESSION["full_image"][$file_id]);
}


mysql_query("INSERT INTO wol_gals SET pic='".$file_id.".jpg', evid='".$evid."', tid='".$tid."', user_id='".$user_id."',user_name='".$user_name."'");
//echo mysql_error();
}
echo "FILEID:" . $file_id; // Return the file id to the script

function checkwh($myimg){
global $file_id, $tid;
$img = @imagecreatefromjpeg($myimg);
$width = imageSX($img);
$height = imageSY($img);
if($width >= 650 || $height >= 650){
return TRUE;
}else{
return FALSE;
}
}
 
Bitte das nächste mal den Code in die entsprechenden Tags setzen.

Ich habe beim überfliegen jetzt noch folgende Ungereimtheit entdeckt:

PHP:
$_SESSION["full_image"][$file_id] = $fullimagevariable;

Der Inhalt von $fullimagevariable ist derzeit undefiniert, weil nirgends ein Inhalt zugewiesen wurde.

Ansonsten ist noch auffällig, dass das Original-Bild nicht als Binär-Daten abgelegt wird:

PHP:
$fp = fopen("../images/gal/".$tid."/thumbs/".$file_id.".jpg", "w+"); // << Hier sollte doch wohl eher wb stehen, und warum soll die Datei  zum lesen und schreiben geöffnet werden?

Außerdem stimmt der Pfad offensichtlich nicht. Denn das Thumnail wird von der Klasse "thumbs" erstellt, die du nicht gepostet hast. Folglich denke ich aber, dass das fopen so aussehen sollte:

PHP:
// Zeile 19:
$fp = fopen("../images/gal/".$tid."/".$file_id.".jpg", "wb");
 
Sorry, habe die eingebundene Klasse nicht gepostet, hole es hiermit nach:
PHP:
<?php

class thumbs{
	var $newHeight = 120;
	var $newWidth = 120;
	var $ratio = 0;
	var $src_file = "";
	var $dest_file = "";

	function thumbs($newWidth = 100, $newHeight = 100, $src_file = "", $dest_file = "", $ratio = 0){
		if($src_file == "" || $dest_file == ""){
			die("ERROR: No Source or Destinationfile specified");
		}
		$this->newHeight = $newHeight;
		$this->newWidth = $newWidth;
		$this->ratio = $ratio;
		$this->src_file = $src_file;
		$this->dest_file = $dest_file;
		return $this->create_thumb();
	}

	function create_thumb(){
	 // find the image size
	 $imginfo = @getimagesize($this->src_file);
	 if ($imginfo == NULL)
	  return false;
	 // height/width
	 $srcWidth = $imginfo[0];
	 $srcHeight = $imginfo[1];
	 if($this->ratio == 0){
	    if($srcHeight > $srcWidth){
			$destWidth = $this->newHeight*$srcWidth/$srcHeight;
			$destHeight = $this->newHeight;
		}elseif($srcHeight < $srcWidth){
			$destHeight = $this->newWidth*$srcHeight/$srcWidth;
			$destWidth = $this->newWidth;
		}elseif($srcHeight == $srcWidth){
			$destHeight = $this->newHeight;
			$destWidth = $this->newWidth;
		}
	 }else{
//	 echo $destWidth." - ".$destHeight."<br>";
		 $ratioWidth = $srcWidth/$this->newWidth;
		 $ratioHeight = 0;
		 $destWidth = $this->newWidth;
		 $destHeight = $srcHeight / $ratioWidth;
	 }
		$src_img = imagecreatefromjpeg($this->src_file);
         //gd1
         //$dst_img = imagecreate($destWidth,$destHeight);

         //gd2
         $dst_img = imagecreatetruecolor($destWidth,$destHeight);
         imagecopyresized($dst_img, $src_img, 0, 0, 0, 0, $destWidth,(int)$destHeight, $srcWidth, $srcHeight);
         imagejpeg($dst_img, $this->dest_file, 100); // Quality = 100
         imagedestroy($src_img);
         imagedestroy($dst_img);
         return true;
	}

	function addWatermark($src){
        $watermark = imagecreatefrompng('../layout/watermark.png');
        $watermark_width = imagesx($watermark);
        $watermark_height = imagesy($watermark);
        $image = imagecreatetruecolor($watermark_width, $watermark_height);
        $image = imagecreatefromjpeg($src);
        $size = getimagesize($src);
        $dest_x = $size[0] - $watermark_width - 20;
        $dest_y = $size[1] - $watermark_height - 20;
        $black = ImageColorAllocate ($watermark, 183, 176, 183);
        ImageColorTransparent($watermark , $black);
        imagecopymerge($image, $watermark, $dest_x, $dest_y, 0, 0, $watermark_width, $watermark_height, 50);
        //unlink($src);
        imagejpeg($image, $src, 100);
        imagedestroy($image);
        imagedestroy($watermark);
		return true;
	}
}



?>
 
Sorry, ich lag noch nicht richtig. Das Problem ist, dass das Bild in den Thumb-Ordner kopiert und anschließend resized in den Ordner darüber kopiert wird. Das bedeutet, du musst auch den Pfad von new thumb() und die Größenprüfung umdrehen:

PHP:
	if(checkwh("../images/gal/".$tid."/".$file_id.".jpg")){
		$tn = new thumbs(650,650, "../images/gal/".$tid."/".$file_id.".jpg", "../images/gal/".$tid."/thumbs/".$file_id.".jpg");
	}else{
		file_put_contents("../images/gal/".$tid."/thumbs/".$file_id.".jpg", $_SESSION["full_image"][$file_id]);
	}
 
Vielen Dank für Deine Hilfe. Habs umgesetzt, und jetzt ist das große Bild noch kleiner, will sagen: thumb verkleinert korrekt auf 120, das "große" Bild ist jetzt 100 anstatt 650. aber zumindest haben wir das Problem jetzt weiter eingegrenzt. Trotzdem kann ich den Fehler nicht entdecken.
 
Ist das Bild wirklich nur 100Pixel groß, wenn ja in der Breite oder Länge?

Oder ist das Bild evtl doch 650 groß und es wird nur dich die Gallerie auf 100Px verkleinert (HTML Image-Attribute width/height)?
 
das bild ist wirklich 100 px. ich rede immer von der größeren Seite. die kleine ist dann proportional dazu, in diesem Fall 100x75 px. verwundert mich aber weil ich nicht weiß wieso auf 100px verkleinert wirde
 
Was mich etwas wundert ist, warum bei Pflicht-Parametern ein Default-Wert vergeben wird. Bitte bau doch mal test-halber den Constructor der thumbs-Klasse um:

PHP:
   function thumbs($newWidth, $newHeight, $src_file, $dest_file, $ratio){
   ....

Das dürfte nicht das Problem verursachen, weil ja Werte übergeben werden. Nur noch so zum prüfen:

PHP:
// Folgende Zeilen an den Anfang des Scripts
error_reporting(E_ALL|E_STRICT);
ini_set('display_errors', 1);

Verwendest du eigentlich PHP4 oder 5?

Ich hab noch nicht wirklich eine Idee, was das verursachen könnte.

Hast du mal deinen Browser-Cache geleert?
 
Zurück