PHP: Gif->JPEG->verkleinern gibt schwarzes Bild

  1. Jakob

    Jakob Thread Starter MacUser Mitglied

    Mitglied seit:
    05.01.2004
    Beiträge:
    1.067
    Zustimmungen:
    21
    Hallo, habe hier eine funktionierende Funktion, die aus einem Gif ein JPEG macht:
    PHP:
    private function gif2jpeg($p_fl$p_new_fl=''$bgcolor=false)
        {
            list(
    $wd$ht$tp$at) = getimagesize($p_fl);
            
    $img_src imagecreatefromgif($p_fl);
            
    $img_dst imagecreatetruecolor($wd,$ht);
            
    $clr['red']=255;
            
    $clr['green']=0;
            
    $clr['blue']=0;
            if(
    is_array($bgcolor))
            {
                
    $clr=$bgcolor;
            }
            
    $kek imagecolorallocate($img_dst,$clr['red'],$clr['green'],$clr['blue']);
            
    imagefill($img_dst,0,0,$kek);
            
    imagecopyresampled($img_dst$img_src00,00$wd$ht$wd$ht);
            
    $draw true;
            if(
    strlen($p_new_fl)>0)
            {
                if(
    $hnd=fopen($p_new_fl,'w'))
                {
                    
    $draw false;
                    
    fclose($hnd);
                }
            }
            if(
    true==$draw)
            {
                
    header("Content-type: image/jpeg");
                
    $tmp imagecreatefromjpeg($img_dst);
                
    imagejpeg($img_dst);
            }
            else
            {
                
    imagejpeg($img_dst$p_new_fl);
            }
            
    imagedestroy($img_dst);
            
    imagedestroy($img_src);
        }
    Ein gif2jpeg('bild.gif') zeigt mir das Bild gleich im Browser an, da draw=false. Mit draw=true speichert es die Datei ab.

    Nun möchte ich bevor ich die Datei speichere sie noch verkleinern (deshalb konvertiere ich ja erst nach JPEG. Gif-Strichzeichnungen kleiner machen sieht grausich aus.) also ein imagecopyresample. Nur kommt das kleine Bild immer nur komplett schwarz heraus.

    Welchen Bilderstrom muss ich denn abfangen, damit ich diesen verkleinern kann? Ich dachte, ich nehme für den imagecopyresampled($target,imagecreatefromjpeg($img_dst),[…]). Geht aber wie gesagt nich.
    Oder kennt ihr eine andere Möglichkeit Gifs ansprechend zu verkleinern?
     
  2. JohnP

    JohnP MacUser Mitglied

    Mitglied seit:
    12.10.2004
    Beiträge:
    471
    Zustimmungen:
    6
    Probier mal folgendes. Ich vewende es für meine dynamische Gallerie (Thumbs):
    PHP:
    header("Content-type: image/jpeg");
    $faktor 6;
    $size getimagesize($p_fl);
    $width round($size[0]/$faktor);
    $height round($size[1]/$faktor);
    $src imagecreatefromjpeg($p_fl);
    $dest imagecreatetruecolor($width,$height);
    imagecopyresized($dest,$src,0,0,0,0,$width,$height,$size[0],$size[1]);
    imagejpeg($dest);
    imagedestroy($dest);
    imagedestroy($src);
    Das Bild wird um den Faktor 6
    PHP:
    $faktor
    verkleinert.
     
Die Seite wird geladen...