|  | 		    
					
        
         
          
         
	
          | |  | Antialias i en JPEG resize funktion Fra : Flemming Joensson
 | 
 Dato :  11-07-03 10:05
 | 
 |  | Jeg har skrevet en resizefunktion baseret på andres eksempler på php.net
 - men har lidt problemer med den nye antialias funktion.
 
 Jeg synes ikke den har nogen effekt, eller også bruger jeg den forkert.
 Jeg har prøvet at resize et digitalfoto hvor min svigerfar er ved at pakke
 en gave op, og gavebåndet er meget hakket at se på, uanset om jeg kalder
 antialias funktionen eller ej - faktisk kan jeg ikke se nogen forskel.
 
 Jeg er rimelig ny i at bruge GD funktionerne, og har ikke kunnet finde
 nogen eksempler eller dokumentation der uddyber imageantialias funktionen
 ud over at den returnerer en bool, og skal have en image ressource og en
 boolsk værdi som parametre, hvor den boolske værdi indikerer om der skal
 bruges antialias eller ej.
 
 Koden til funktionen er følgende, jeg håber i kan komme med et par forslage
 til hvad der kan være galt:
 
 ////////////////////////////////////////////////
 //       resize_jpg($img, $target, $w, $h     //
 //                                            //
 //  $img -> Full path to the original jpeg    //
 //  $target -> Path to the target jpeg        //
 //  $w -> Width of target jpeg                //
 //  $h -> Height of target jpeg               //
 ////////////////////////////////////////////////
 
 function resize_jpg($img, $target, $w, $h) {
 $image = ImageCreateFromJpeg($img);
 
 if (function_exists('imageistruecolor')) {
 //PHP >= 4.3.2
 if (imageistruecolor($image)) {
 $thumb = imagecreatetruecolor($w, $h);
 } else {
 $thumb = imagecreate ($w, $h);
 }
 } else {
 //PHP < 4.3.2
 $thumb = imagecreatetruecolor($w, $h);
 }
 
 if (function_exists('imageantialias')) {
 //PHP >= 4.3.2
 if (imageantialias($thumb, TRUE)) {
 echo "<h3>Antialias aktiveret</h3>";
 } else {
 echo "<h3>Antialias kunne ikke aktiveres</h3>";
 }
 }
 
 $imagedata = getimagesize($img);
 imagecopyresized (
 $thumb, $image, 0, 0, 0, 0, $w, $h, $imagedata[0],$imagedata[1]
 );
 
 return imagejpeg($thumb, $target);
 }//end resize_jpg
 
 
 |  |  | 
  Flemming Joensson (11-07-2003) 
 
	
          | |  | Kommentar Fra : Flemming Joensson
 | 
 Dato :  11-07-03 10:11
 | 
 |  | Flemming Joensson <joensson@fjerndette.cs.auc.dk> wrote in
 news:Xns93B57132598B5joenssonfjerndettecs@130.225.247.90:
 
 > Jeg synes ikke den har nogen effekt, eller også bruger jeg den
 > forkert. Jeg har prøvet at resize et digitalfoto hvor min svigerfar er
 > ved at pakke en gave op, og gavebåndet er meget hakket at se på,
 > uanset om jeg kalder antialias funktionen eller ej - faktisk kan jeg
 > ikke se nogen forskel.
 >
 
 Det skal lige siges at de kanter selvfølgelig ikke er der på originalen -
 kun på den resizede kopi jeg får lavet.
 
 Flemming
 
 
 |  |  | 
  Lars Dybdahl (11-07-2003) 
 
	
          | |  | Kommentar Fra : Lars Dybdahl
 | 
 Dato :  11-07-03 11:17
 | 
 |  | 
 
            Flemming Joensson wrote:
 > Jeg har skrevet en resizefunktion baseret på andres eksempler på php.net
 > - men har lidt problemer med den nye antialias funktion. 
 Jeg kan anbefale at bruge ImageMagick - hvis du har eller kan få den
 installeret på webserveren. Den laver rigtig, rigtig gode thumbnails - se
 evt. her: http://billeder.dybdahl.dk/.  Du kan køre ImageMagick's convert
 eller mogrify programmer med php's popen() funktion.
 Lars.
 -- 
 Freelance programmør
 Programmering mod timebetaling
            
             |  |  | 
  Flemming Joensson (11-07-2003) 
 
	
          | |  | Kommentar Fra : Flemming Joensson
 | 
 Dato :  11-07-03 12:01
 | 
 |  | 
 
            Lars Dybdahl <lars@dybdahl.net> wrote in 
 news:3f0e8e99$0$5148$edfadb0f@dread11.news.tele.dk:
 >> Jeg har skrevet en resizefunktion baseret på andres eksempler på php.net
 >> - men har lidt problemer med den nye antialias funktion. 
 > 
 > Jeg kan anbefale at bruge ImageMagick - hvis du har eller kan få den
 > installeret på webserveren. Den laver rigtig, rigtig gode thumbnails - se
 > evt. her: http://billeder.dybdahl.dk/.  Du kan køre ImageMagick's convert
 > eller mogrify programmer med php's popen() funktion.
 Takker, de thumbnails ser fine ud - det vil jeg lige prøve og se nærmere 
 på. Det er ikke til thumbnail brug, men til et content management system, 
 hvor billeder ikke må være bredere end en bestemt bredde. Er de det bliver 
 de resizet og der laves et link, så man kan få den originale opløsning ved 
 at klikke på det resizede billede. Man kan vel med lidt god vilje kalde det 
 et thumbnail, men bare et pænt stort et af slagsen. :)
 Jeg har iøvrigt allerede imagemagick på min maskine derhjemme i forbindelse 
 med coppermine gallery, men havde ikke lige tænkt over at jeg bare kunne 
 bruge den :)
 Flemming
            
             |  |  | 
  Flemming Joensson (11-07-2003) 
 
	
          | |  | Kommentar Fra : Flemming Joensson
 | 
 Dato :  11-07-03 13:19
 | 
 |  | 
 
            Lars Dybdahl <lars@dybdahl.net> wrote in 
 news:3f0e8e99$0$5148$edfadb0f@dread11.news.tele.dk:
 > Jeg kan anbefale at bruge ImageMagick - hvis du har eller kan få den
 > installeret på webserveren. Den laver rigtig, rigtig gode thumbnails - se
 > evt. her: http://billeder.dybdahl.dk/.  Du kan køre ImageMagick's convert
 > eller mogrify programmer med php's popen() funktion.
 Hej Lars,
 hvad er grunden til at du anbefaler popen, til at afvikle mogrify med? 
 Den funktion jeg skal bruge kommer kun til at blive brugt in-house, så der 
 er rimelig styr på hvad folk vil smide efter den af input, så sikkerhed er 
 ikke det vigtigste for mit vedkommende - men hvis der er en eller anden 
 fordel ved popen metoden jeg har overset, så vil jeg gerne vide det.
 Jeg biksede lige nedenstående funktion sammen og den virker sådan set fint, 
 og gør det samme som den resize_jpeg jeg sendte tidligere - bare ved at 
 bruge imagicks mogrify i stedet:
 function imagick_resize($img, $target, $w, $h) {
   copy($img, $target);
   $command   = '"C:\Program Files\ImageMagick-5.5.7-Q16\mogrify.exe"';
   $arguments = "-size ".$w."x".$h." ".$target." -resize ".$w."x".$h;
   $output=array(); // Array used for holding all lines output by exec
   exec($command." ".$arguments, $output);
   return $output;
 }
 Mvh.
 Flemming
            
             |  |  | 
   Lars Dybdahl (11-07-2003) 
 
	
          | |  | Kommentar Fra : Lars Dybdahl
 | 
 Dato :  11-07-03 16:05
 | 
 |  | 
 
            Flemming Joensson wrote:
 > hvad er grunden til at du anbefaler popen, til at afvikle mogrify med? 
 Jeg plejer at bruge popen() fordi jeg så kan læse output fra programmet. På
 den måde kan jeg reagere hensigtsmæssigt, hvis der opstår en fejl ved
 programafvikling.
 popen() har desuden den fordel, at mogrify programmet afvikles parallelt med
 php-scriptet, dvs. multitasking. Under visse omstændigheder kan det betyde
 noget for, hvor lang tid det tager at hente en side eller lign.
 Hvis man bruger popen() til at starte et program med, som kan finde ud af at
 levere progress information, kan man desuden levere progress information i
 html-siden...    det kræver dog lidt teknisk snilde.
 Og så er der jo den åbenbare: Hvis du har en maskine med flere processorer,
 så kan du nemt med popen() holde dem alle sammen beskæftiget. Det kunne
 godt være relevant i et content-management system, da du nok mest kun har
 en bruger der skal skalere billeder, men muligvis en stærk server.
 Hilsen,
 Lars.
 -- 
 Freelance programmør
 Programmering mod timebetaling
            
             |  |  | 
    Flemming Joensson (11-07-2003) 
 
	
          | |  | Kommentar Fra : Flemming Joensson
 | 
 Dato :  11-07-03 16:33
 | 
 |  | 
 
            Lars Dybdahl <lars@dybdahl.net> wrote in
 news:3f0ed234$0$5167$edfadb0f@dread11.news.tele.dk: 
 > Hvis man bruger popen() til at starte et program med, som kan finde ud
 > af at levere progress information, kan man desuden levere progress
 > information i html-siden...    det kræver dog lidt teknisk snilde.
 > 
 Snedigt :)
 Tak for svaret, til det system jeg laver vil det altid være ét enkelt 
 billede af gangen, da der næsten ikke skal være billeder i systemet - så 
 jeg tror det vil være overkill for mig at lave det med popen - men systemet 
 derhjemme kunne da godt lige trænge til lidt justering :)
 Flemming
            
             |  |  | 
  Nezar Nielsen (11-07-2003) 
 
	
          | |  | Kommentar Fra : Nezar Nielsen
 | 
 Dato :  11-07-03 13:06
 | 
 |  | 
 
            Flemming Joensson wrote:
 > Jeg har skrevet en resizefunktion baseret på andres eksempler på php.net
 > - men har lidt problemer med den nye antialias funktion. 
 > 
 > Jeg synes ikke den har nogen effekt, eller også bruger jeg den forkert. 
 > Jeg har prøvet at resize et digitalfoto hvor min svigerfar er ved at pakke 
 > en gave op, og gavebåndet er meget hakket at se på, uanset om jeg kalder 
 > antialias funktionen eller ej - faktisk kan jeg ikke se nogen forskel.
 ....
 >   imagecopyresized (
 >         $thumb, $image, 0, 0, 0, 0, $w, $h, $imagedata[0],$imagedata[1]
 >   ); 
 Jeg tror ikke imageantilias gør at imagecopyresized opfører sig 
 anderledes, til gengæld tror jeg at når du tegner streger osv. at den 
 sørger for at de ser pænere ud..
 imagecopyresized har dog det "problem" at den laver en direkte resizing, 
 dvs. den kigger ikke på "de pixels der ligger rundt om", hvilket 
 resulterer i at man får et noget hakket billede, meget bedre resultater 
 (på bekostning af lidt hastighed) får man med imagecopyresampled som 
 laver noget interpolering, og så er der nogen (se kommentarerne til 
 ovenstående funktioner) der har lavet en funktion der laver bicubic 
 resizing som skulle være endnu bedre(bedre detaljer på det resizede 
 billede), jeg har (for et års tid siden - jeg kan se der er kommet 
 forbedringer i kommentarerne siden) lavet en sammenligning af de tre 
 metoder, som kan ses her: http://linux.control.dk/eksempler/imageresizing/ -- 
 Mvh. Nezar Nielsen
http://fez.dk/ |  |  | 
  Flemming Joensson (11-07-2003) 
 
	
          | |  | Kommentar Fra : Flemming Joensson
 | 
 Dato :  11-07-03 13:48
 | 
 |  | 
 
            Nezar Nielsen <tumpen@fez.dk> wrote in
 news:bem97l$70em9$1@ID-179598.news.uni-berlin.de: 
 > imagecopyresized har dog det "problem" at den laver en direkte
 > resizing, dvs. den kigger ikke på "de pixels der ligger rundt om",
 > hvilket resulterer i at man får et noget hakket billede, meget bedre
 > resultater (på bekostning af lidt hastighed) får man med
 > imagecopyresampled som laver noget interpolering, og så er der nogen
 > (se kommentarerne til ovenstående funktioner) der har lavet en
 > funktion der laver bicubic resizing som skulle være endnu bedre(bedre
 > detaljer på det resizede billede), jeg har (for et års tid siden - jeg
 > kan se der er kommet forbedringer i kommentarerne siden) lavet en
 > sammenligning af de tre metoder, som kan ses her:
 > http://linux.control.dk/eksempler/imageresizing/ > 
 Mange tak, det var interessant læsning. Indtil videre tror jeg dog, som 
 Lars har foreslået, at jeg bruger imagemagick idet det gør det ganske 
 hæderligt - både med kvalitet og hastighed.
 Men interessant at se forskellene på de 3 metoder. 
 Flemming
            
             |  |  | 
 |  |