• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Problem mit Bildfunktionen

supertobs

Mitglied
Hi,

Ich habe ein script, welches ein Bild hochlädt, und dieses dann abspeichert.
Vorher wird das Bild noch verkleinert. Dies mache ich mit den PHP Image Funktionen.
Dabei sieht mein Code folgendermaßen aus:
PHP:
 $imgPath=ABSOLUTE_SYSTEM_PATH."user/user".$id."/files/profile/profileImage.png";
    move_uploaded_file($_FILES['datei']['tmp_name'], $imgPath);
    $img = getimagesize($imgPath);
    $imgX = $img[0];
    $imgY = $img[1];
    $type=image_type_to_mime_type($img[2]);
    


      if($type=='image/jpeg'){
    //Erstelle Bild von JPG

    $src_img = imagecreatefromjpeg($imgPath);
    } elseif($type=='image/png'){
    //Erstelle Bild von PNG

    $src_img = imagecreatefrompng($imgPath);
    }  elseif($type=='image/gif'){
    //Erstelle Bild von Gif

    $src_img = imagecreatefromgif($imgPath);
    } else {
    //Bild typ ist ungueltig!
    $content.='<box class="error"> Der Bildtyp "'.$type.'" wird nicht unterstützt! Bitte nur PNG,JPG und GIF Bilder hochladen!</box>';
    exit;
    }
    //}
          
    $new_width=$imgX;
    
   
    $temp_width = $imgX / 200;
    $new_height = $imgY / $temp_width;
   
    
    $dst_img = imagecreatetruecolor(200,$new_height);

    imagecopyresized($dst_img, $src_img, 0, 0, 0, 0, 200, $new_height, $imgX, $imgY);
    imagepng($dst_img, $imgPath);
    imagedestroy($src_img);

Mein Problem ist hierbei die Transparenz von Bildern. und zwar bekommenTransparente PNG und Gif Bilder einen Schwarzen hintergrund. Wie kann ich dies verhinden, damit die Transparentz erhalten bleibt?

LG
Tobi
 
Werbung:
Ich hatte das Problem ebenfalls weiss aber nicht mehr wie ich das genau gelöst hatte.
Ich vermute eine der folgenden Zeilen war die Lösung.

PHP:
$src_img = imagecreatefrompng($file);
//resize img
$dst_img = imagecreatetruecolor($dest_width,$dest_height); 
    imagecopyresampled($dst_img, $src_img, 0, 0, 0, 0, $dest_width, $dest_height, $src_width, $src_height);

Rest in meinem Script ist resize, move_uploaded_file und DB Eintragung.

Evtl: PHP: imagesavealpha - Manual
 
Werbung:
Also ich bekomm bei imagecolortransparent eine Fehlermeldung:
Warning: imagepng() expects parameter 1 to be resource, integer given in /Applications/XAMPP/xamppfiles/htdocs/friendsweb2.0/site/modules/settings/pages/upload.php on line 45

Warning: imagedestroy() expects parameter 1 to be resource, integer given in /Applications/XAMPP/xamppfiles/htdocs/friendsweb2.0/site/modules/settings/pages/upload.php on line 47

Das Bild ist jetz zwar transparent, aber auch nur, weil das unveränderte Bild gespeichert wurde.

Der Neue Code sieht so aus:
PHP:
      //if (preg_match("/jpg/", $dateityp) OR preg_match("/jpeg/", $dateityp)){
      if($type=='image/jpeg'){
    $src_img = imagecreatefromjpeg($imgPath);
    } elseif($type=='image/png'){
    $src_img = imagecreatefrompng($imgPath);
    }  elseif($type=='image/gif'){
    $src_img = imagecreatefromgif($imgPath);
    } else {
    $content.='<box class="error"> Der Bildtyp "'.$type.'" wird nicht unterstützt! Bitte nur PNG,JPG und GIF Bilder hochladen!</box>';
    exit;
    }
    //}
          
    $new_width=$imgX;
    
    //$content .= $new_width.'x'.$new_height.'</br>';
    $temp_width = $imgX / 200;
    $new_height = $imgY / $temp_width;
    //$content .= $new_width.'x'.$new_height;
    
    $dst_img = imagecreatetruecolor(200,$new_height);
  $dst_img=imagecolortransparent($dst_img);
    imagecopyresampled($dst_img, $src_img, 0, 0, 0, 0, 200, $new_height, $imgX, $imgY);
    imagepng($dst_img, $imgPath);
    imagedestroy($src_img);
    imagedestroy($dst_img);
 
PHP:
 $dst_img=imagecolortransparent($dst_img);

Du hast als Parameter $dst_img genommen, du hättest aber $src_img nehmen sollen.
 
Ich weiß jetz, wie es funktioniert!

Man muss vom alten Bild die Transparenz ermitteln. Dies geht mit $bg = imagecolorallocatealpha ( $src_img , 0 , 0 , 0 , 127 ); .

Mit dieser Farbe die in fer Variable
$bg gespeichert ist, ersetzt man später die "Ersatztransparentz" also z.B. der schwarze Hintergrund. Das funktioniert mit
ImageColorTransparent($dst_img,$bg);

Damit ist das Bild transparent.
 
Werbung:
Hi, Statt nem neuen Thread poste ich mal hier rein.
Ich habe ein resize Script von dem ich der Meinung war das es letztes Jahr noch funktioniert hat.
Jetzt werden die Bilder in der Ursprungsgröße gespeichert.

Da ich mittlerweile fast Wahnsinnig werde und ich mich an diesen Thread erinnert habe, habe ich mal den geposteten Code probiert da er ja anscheinen funktioniert.
Leicht Modifiziert aber: Das Bild wird in Originalgröße >600px width gespeichert.

PHP:
if(isset($_POST['upload']))
  {
   $file = $_FILES['thefile']['tmp_name'];
   $imgname = $_FILES['thefile']['name'];
   if(isset($file))
   {
    $imgPath = "pics/upload/";
    $max_width = 600;
    
    move_uploaded_file($file, $imgPath.$imgname);
    $img = getimagesize($imgPath.$imgname);
    $imgX = $img[0];
    $imgY = $img[1];
    $type=image_type_to_mime_type($img[2]);
    
    if($type=='image/jpeg')
    {
     //Erstelle Bild von JPG
     $src_img = imagecreatefromjpeg($imgPath.$imgname);
    }
    elseif($type=='image/png')
    {
     //Erstelle Bild von PNG
     $src_img = imagecreatefrompng($imgPath.$imgname);
    }
    elseif($type=='image/gif')
    {
     //Erstelle Bild von Gif
     $src_img = imagecreatefromgif($imgPath.$imgname);
    }
    else
    {
     //Bild typ ist ungueltig!
     $content.='<box class="error"> Der Bildtyp "'.$type.'" wird nicht unterstützt! Bitte nur PNG,JPG und GIF Bilder hochladen!</box>';
     exit;
    }
    if($imgX <= $max_width)
    {
     $new_width  = $imgX;
     $new_height = $imgY;
     echo "!!!$new_width!!!!!!!!!$new_height!!!!!"; //Wird korrekt berechnet...
    }
    else //Bild breiter 600px
    {   
     $convert = ($max_width/$imgX); 
     $new_width = $max_width; 
     $new_height = ceil($imgY*$convert);
     echo "???$new_width???????$new_height??";  //Wird korrekt berechnet...

    }    
    //$dst_img = imagecreatetruecolor($new_width,$new_height);
    $dst_img = imagecreatetruecolor($new_width,$new_height);
    imagecopyresized($dst_img, $src_img, 0, 0, 0, 0, $new_width, $new_height, $imgX, $imgY);
    //imageCopyResampled($dst_img,$src_img,0,0,0,0,$new_width,$new_height,$imgX,$imgY);
    imagepng($dst_img, $imgPath.$imgname);
    echo "<img src=\"$imgPath$imgname\"><br>";
    imagedestroy($src_img);
   }
  }
 
Zurück
Oben