/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
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

Søg
Reklame
Statistik
Spørgsmål : 177552
Tips : 31968
Nyheder : 719565
Indlæg : 6408849
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste