Avatar billede mac10 Nybegynder
20. oktober 2009 - 12:58 Der er 12 kommentarer og
1 løsning

Vil ikke auto-resize store billeder?

Hej,

Jeg har en form hvor jeg uploader billede, og efterfølgende auto-resizer dem. Det virker fint med små billeder, men når jeg prøver at uploade et billede på 2MB så uploader den det store, men vil efterfølgende ikke resize det mindre.

Har prøvet at sætte php_value memory_limit 16M  i htaccess, og også at ændre det i PHP ini_set('memory_limit', '16M'); - men det gør bare ingen forskel! :S

--------------------------------------------------------------------------------------------------------------------------------

Min Resize kode ser ud som følgende:

<?php
function imageResize( $filename, $newfilename, $maxw, $maxh, $quality=99 )
{
    $ext = strtolower( pathinfo( $filename, PATHINFO_EXTENSION ) ); 
   
    switch($ext) 
    {   
        case 'jpeg':   
        case 'jpe':   
        case 'jpg':     
            $srcim = imagecreatefromjpeg( $filename );     
        break;   
        case 'gif':     
            $srcim = imagecreatefromgif( $filename );     
        break;   
        case 'png':     
            $srcim = imagecreatefrompng( $filename );     
        break;   
        default:     
            return false; 
    } 
    $ow = imagesx( $srcim ); 
    $oh = imagesy( $srcim );
    if($oh > $maxh || $ow > $maxw)
    {
                        $wscale = $maxw / $ow;
                        $hscale = $maxh / $oh; 
                        $scale = min( $hscale, $wscale ); 
                        $nw = round( $ow * $scale, 0 );
                        $nh = round( $oh * $scale, 0 );
    } else {
                        $nh = $oh;
                        $nw = $ow;
    }
    $dstim = imagecreatetruecolor( $nw, $nh ); 
    imagecopyresampled( $dstim, $srcim, 0, 0, 0, 0, $nw, $nh, $ow, $oh ); 
   
    switch($ext) 
    {   
                        case 'jpeg':   
                        case 'jpe':   
                        case 'jpg':     
                                            imagejpeg( $dstim, $newfilename, $quality );     
                        break;   
                        case 'gif':     
                                            imagegif( $dstim, $newfilename );     
                        break;   
                        case 'png':
                                            imagesavealpha($dstim, true);
                                            $trans_colour = imagecolorallocatealpha($dstim, 0, 0, 0, 127);
                                            imagefill($dstim, 0, 0, $trans_colour); 
                                            $png_q = floor( abs( $quality / 10 - 9.9 ) );     
                                            imagepng( $dstim, $newfilename, $png_q );     
                        break;   
                        default:     
                                            return false; 
    } 
   
    imagedestroy( $dstim ); 
    imagedestroy( $srcim );
    return true;
}
?>

--------------------------------------------------------------------------------------------------------------------------------

På forhånd rigtig mange tak!
Avatar billede repox Seniormester
20. oktober 2009 - 13:05 #1
Du bliver nød til at spørge din udbyder om denne vil rette grænsen for dig. Hvis ikke PHP er konfigureret til at du kan ændre den, så er det kun udbyderen der kan (som oftest er tilfældet).
Avatar billede mac10 Nybegynder
20. oktober 2009 - 13:33 #2
Jeg er selv udbyder, har min egen server og lige nu kører jeg lokalt. Så jeg har selv kontrol over alt, men ved bare ikk hvor jeg ændrer det henne? php.ini, httpd.conf?
Avatar billede repox Seniormester
20. oktober 2009 - 15:40 #3
Det skal du gøre i php.ini
Avatar billede mac10 Nybegynder
20. oktober 2009 - 17:50 #4
Hvad er det jeg skal rette?
Avatar billede mac10 Nybegynder
20. oktober 2009 - 17:51 #5
Hvis du tænker på memory_limit er den på 128M så det kan ikke være det.
Avatar billede repox Seniormester
20. oktober 2009 - 19:10 #6
Så er det fordi du har haft fokus et forkert sted.
Hvilken fejl får du fra PHP når du forsøger at eksekvere koden?
Avatar billede mac10 Nybegynder
20. oktober 2009 - 19:31 #7
Hva tænker du på med fokus det forkerte sted?

Ingen fejl overhovedet. Det virker fint når det er et mindre billede, men fylder det f.eks. 2MB så gør den bare intet. Den viser ingen fejl eller noget, så PHP koden må vel gøre sit.

Har sat en exit; efter resize funktionen, og den fortæller intet :S
Avatar billede repox Seniormester
20. oktober 2009 - 19:53 #8
PHP koden gør jo netop ikke sit; du har enten en fejl et sted.
Istedet for at konsekvent bare at returnere (bool)false i din funktion når tingene går galt, så prøv at returnere en streng eller et tal der angiver hvor fejlen opstår.

Brug nogle flere kontroller af dine funktioner og returner en fejl, når det ikke gik som ventet.

F.eks:


  function writeToFile($filename, $input)
  {
    if(empty($input))
      return "Intet input";

    if(!file_put_contents($filename, $input))
      return "Strengen kunne ikke skrives til filen";

    return true;
  }

  var_dump(writeToFile("test.txt", "Dette er en streng"));


Ovenstående vil enten returnere en (string)"" hvis der er fejl eller (bool)true hvis der ikke er fejl.

På den måde kan du følge hvor og hvorfor fejlen opstår.
Avatar billede mac10 Nybegynder
20. oktober 2009 - 20:36 #9
Fedt med ovenstående. Hvordan bruger jeg det så? Har lagt den lige efter resize funktionen når den uploader og der kommer så bare "Dette er en streng" i txt filen. Hvordan benyttes det?

Her er image resize funktionen:
imageResize($image_path. $filename, $thumb_path . $filename, 150, 150);
Avatar billede repox Seniormester
21. oktober 2009 - 09:27 #10
...

Du skulle jo ikke bruge den faktiske funktion jeg skrev; det var et praktisk eksempel på hvordan du kan returnere fejl beskrivelser i dine funktioner i stedet for bare at returnere false når funktionen fejler.

Din funktion returnerer false to steder, men du har ingen mulighed for at se hvor din funktion fejler. Der er i øvrigt flere steder din funktion kan fejle idet din funktion benytter sig af mange andre funktioner som også giver returværdier.

Kontroller dine funktioners returneringer og reager på dem hvis ikke de returnerer hvad du forventer.
Avatar billede mac10 Nybegynder
10. november 2010 - 12:29 #11
Lav svar tak
Avatar billede repox Seniormester
10. november 2010 - 12:42 #12
Behold du bare pointene selv.
Avatar billede mac10 Nybegynder
17. november 2010 - 09:17 #13
ok tak
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