Avatar billede wosgam Nybegynder
07. april 2008 - 15:18 Der er 3 kommentarer og
1 løsning

Gd Lib kode funker ikke?

Hej jeg har lavet denne kode, den virker fint hvis man konverterer billeder der ikke fylder så meget, men hvis man vælger et billede det fylder f.eks. 1,5MB så kan den ikke konverterer det, og den kommer heller ikke med en fejl meddelelse.

Kode:

<?php
$type = strtoupper($_GET['to']);
$dd = explode(".", $_GET['q']);
$ddd = strtoupper($dd[1]);
if($ddd == 'JPG')
{
    if($im = @imagecreatefromjpeg($_GET['q']))
    {
        $valid = "ja";
    }else{
        $valid = "nej";
    }
}
if($ddd == 'PNG')
{
    if($im = @imagecreatefrompng($_GET['q']))
    {
        $valid = "ja";
    }else{
        $valid = "nej";
    }
}
if($ddd == 'GIF')
{
    if($im = @imagecreatefromgif($_GET['q']))
    {
        $valid = "ja";
    }else{
        $valid = "nej";
    }
}

if($valid == 'ja')
{
    if($type == 'JPG')
    {
        header("Content-type: image/jpeg");
        imagejpeg($im,null,$_GET['kvali']);
    }
   

    if($type == 'PNG')
    {
        header("Content-type: image/png");
        imagepng($im);
    }

    if($type == 'GIF')
    {
        header("Content-type: image/gif");
        imagegif($im);
    }
}else{
$err = imagecreatetruecolor(100,100);
imagecolorallocate($billede, 255, 255, 255);
imagestring($err,5,0,0,':FEJL:FEJL:',imagecolorallocate($billede, 255, 0, 0));
imagestring($err,5,0,15,':FEJL:FEJL:',imagecolorallocate($billede, 255, 0, 0));
imagestring($err,5,0,30,':FEJL:FEJL:',imagecolorallocate($billede, 255, 0, 0));
imagestring($err,5,0,45,':FEJL:FEJL:',imagecolorallocate($billede, 255, 0, 0));
imagestring($err,5,0,60,':FEJL:FEJL:',imagecolorallocate($billede, 255, 0, 0));
imagestring($err,5,0,75,':FEJL:FEJL:',imagecolorallocate($billede, 255, 0, 0));
imagestring($err,5,0,90,':FEJL:FEJL:',imagecolorallocate($billede, 255, 0, 0));
imagepng($err);
}
?>

Er der nogle der kan hjælpe??

På forhånd mange tusinde tak ;D
Avatar billede pidgeot Nybegynder
07. april 2008 - 16:23 #1
Sandsynligvis overskrider du memory limit idet du læser billedet ind i hukommelsen, hvilket dræber dit script. Hvis PHP er konfigureret til ikke at vise fejlmeddelelser (enten med display_errors eller error_reporting), så vil du blot få en blank side.

I og med at den skal opbevare det dekomprimerede billede i hukommelsen, kan du som tommelfingerregel forvente at et billede kræver (højde*bredde*4) bytes for at blive indlæst, men diverse operationer på billedet kan gøre at der skal mere til.

Da du egentlig ikke gør noget med billedet, kunne du overveje at benytte getimagesize (http://dk2.php.net/manual/en/function.getimagesize.php) til at checke om det er et ordentligt billede, og så sende den komprimerede billedfil direkte.
Avatar billede wosgam Nybegynder
07. april 2008 - 17:33 #2
Tak fordi du gad at svare men hvis jeg skal være helt ærlig forstår jeg ikke det der med hvad jeg skal gøre med funktionen getimagesize();
Avatar billede pidgeot Nybegynder
07. april 2008 - 18:52 #3
Det eneste du gør med $im i dit script er at indlæse billedet (for at se om det er gyldigt), og så sende den til browseren. I stedet for at spilde en masse hukommelse på det, kan du bruge getimagesize til at checke om det er et gyldigt billede - hvis det ikke er det, vil den funktion nemlig returnere false (ellers et array).

Hvis du med getimagesize finder ud af at den findes, kan du så sende din eksisterende billedfil direkte - den simpleste er at bruge echo og file_get_contents, men hvis du har store billedfiler bør du måske skrive lidt kode der læser X bytes ad gangen og sender afsted.
Avatar billede wosgam Nybegynder
07. maj 2008 - 20:55 #4
lukker :(
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester