/ 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
imagecopyresized
Fra : Jonas Voss


Dato : 07-03-03 19:29

Jeg sidder og fumler lidt med PHP's GD-lib funktioner, og ville i den
sammenhæng forsøge mig med at lave et thumbnail ud af et billede.

Jeg har skrevet en funktion:

function resizeImg($image,$newWidth) {
$size = getimagesize($image);
$width = $size[0];
$height = $size[1];
$ratio=$width/$newWidth;
$newHeight=$height/$ratio;
$newImage = imagecreate($newWidth,$newHeight);
imagecopyresized($newImage, $image, 0, 0, 0, 0, $newWidth,
$newHeight, $width, $height);
return $newImage;
}

Men den returnerer følgende fejlmeddelelse:

+-
| Warning: imagecopyresized(): supplied argument is not a valid Image
| resource in /www/foto/index.php on line 10
+-

Når jeg kalder den således:

resizeImg("/sti/til/mit/billede.jpg", 100);

Jeg har googlet og RTFM til jeg blev blå i hovedet og jeg kan
simpelthen ikke gennemskue hvad jeg gør galt.

Er der nogen der kan spotte min fejl?

--
| Jonas @ 55.75, 12.42 | <http://verture.net/> |

"UNIX is basically a simple operating system, but you
have to be a genius to understand the simplicity." - Dennis Ritchie.

 
 
Jens Tønnesen (07-03-2003)
Kommentar
Fra : Jens Tønnesen


Dato : 07-03-03 20:11

Jonas Voss <voss@null.dk> skrev i
dk.edb.internet.webdesign.serverside.php:

>Jeg sidder og fumler lidt med PHP's GD-lib funktioner, og ville i den
>sammenhæng forsøge mig med at lave et thumbnail ud af et billede.

>Jeg har skrevet en funktion:

>function resizeImg($image,$newWidth) {
> $size = getimagesize($image);
> $width = $size[0];
> $height = $size[1];
> $ratio=$width/$newWidth;
> $newHeight=$height/$ratio;
> $newImage = imagecreate($newWidth,$newHeight);
> imagecopyresized($newImage, $image, 0, 0, 0, 0, $newWidth,
> $newHeight, $width, $height);
> return $newImage;
>}

Din funktion er blottet for fejlsøgning, hvilket gør det hele temmelig
vanskeligt.

Det springende punkt er, om du rent faktisk får hentet oplysninger om
billedet korrekt - med andre ord om funktionen kan 'se' billedet og
dermed returnere korrekte højder og bredder.

Hvis f.eks. højde og bredde returneres som 0 og 0, så bliver $newWidth
og $newHeight også 0, hvorved du ikke får skabt en ny Image-handle.

Du bør med andre ord teste om originalbilledet kan findes, om der
returneres gyldige højde/bredde-angivelser og om der oprettes en ny
image-handle FØR du overhovedet går i gang med at resize.

--
Jens Tønnesen - http://www.pressefoto.dk

Jonas Voss (07-03-2003)
Kommentar
Fra : Jonas Voss


Dato : 07-03-03 20:59

In dk.edb.internet.webdesign.serverside.php, Jens Tønnesen wrote:

> Din funktion er blottet for fejlsøgning, hvilket gør det hele temmelig
> vanskeligt.

OK. Ved at printe alle variabler og indhentede oplysninger ud løbende,
får jeg følgende info:

$image: 133-3308_IMG.JPG
$height: 1024
$width: 768
$ratio: 7.68
$newHeight: 133
$newWidth: 100
$newImage: Resource id #3

Den finder altså billedet, og får også de rette oplysninger ud af det
(højde og bredde). Til gengæld får jeg stadig den samme fejlmeddelelse:

+-
| Warning: imagecopyresized(): supplied argument is not a valid Image
| resource in /www/foto/new.php on line 23
+-

Jeg kan stadig ikke forstå det ikke virker.

--
| Jonas @ 55.75, 12.42 | <http://verture.net/> |

"Bistromathics,' he said, 'the most powerful computational force
known to parascience."

Jens Tønnesen (07-03-2003)
Kommentar
Fra : Jens Tønnesen


Dato : 07-03-03 23:26

Jonas Voss <voss@null.dk> skrev i
dk.edb.internet.webdesign.serverside.php:

>Den finder altså billedet, og får også de rette oplysninger ud af det
>(højde og bredde). Til gengæld får jeg stadig den samme fejlmeddelelse:
>
> +-
> | Warning: imagecopyresized(): supplied argument is not a valid Image
> | resource in /www/foto/new.php on line 23
> +-
>
>Jeg kan stadig ikke forstå det ikke virker.

Variablen $image peger på et filnavn, ikke på en image-ressource.

Du mangler med andre ord en

$image = imagecreatefromjpeg($image);

i din kode.

Må jeg iøvrigt anbefale dig at bruge imagecratetruecolor() i stedet
for imagecreate() for ellers udnytter du ikke JPEG-filens
24bit-farver.

--
Jens Tønnesen - http://www.pressefoto.dk

Jonas Voss (07-03-2003)
Kommentar
Fra : Jonas Voss


Dato : 07-03-03 23:51

In dk.edb.internet.webdesign.serverside.php, Jens Tønnesen wrote:

> Variablen $image peger på et filnavn, ikke på en image-ressource.
>
> Du mangler med andre ord en
>
> $image = imagecreatefromjpeg($image);
>
> i din kode.

Minsandten, tak for hjælpen, det var ikke lige gået op for mig.

> Må jeg iøvrigt anbefale dig at bruge imagecratetruecolor() i stedet
> for imagecreate() for ellers udnytter du ikke JPEG-filens
> 24bit-farver.

Det skal jeg love for, det er meget pænere end imagecreate().

Mange tak for hjælpen.

--
| Jonas @ 55.75, 12.42 | <http://verture.net/> |

"Great things are afoot!"

Niels Andersen (07-03-2003)
Kommentar
Fra : Niels Andersen


Dato : 07-03-03 23:17

Jonas Voss wrote in <205nj-gon.ln1@zaphod.local>:
[$image er en streng med sti til billede]
> imagecopyresized($newImage, $image, 0, 0, 0, 0, $newWidth,
[...]
> | Warning: imagecopyresized(): supplied argument is not a valid Image
> | resource in /www/foto/index.php on line 10

2. parameter skal være et GD-billede, ligesom første parameter.

Noget i stil med:

$oldimage = imageCreateFromJpeg($image);
imagecopyresized($newImage, $oldimage ...

--
Mvh.
Niels Andersen
http://myplace.dk/articles/getpost/?lang=da

Jonas Voss (07-03-2003)
Kommentar
Fra : Jonas Voss


Dato : 07-03-03 23:43

In dk.edb.internet.webdesign.serverside.php, Niels Andersen wrote:

> 2. parameter skal være et GD-billede, ligesom første parameter.

Aha!

> Noget i stil med:
>
> $oldimage = imageCreateFromJpeg($image);
> imagecopyresized($newImage, $oldimage ...

Yup, det virkede, mange tak. Det er godt nok ikke noget særligt kønt
resultat må jeg indrømme, men til gengæld kan man slippe for at skulle
resize hele moletjavsen manuelt.

--
| Jonas @ 55.75, 12.42 | <http://verture.net/> |

Sorry, no quote today.

Niels Andersen (08-03-2003)
Kommentar
Fra : Niels Andersen


Dato : 08-03-03 12:43

Jonas Voss wrote in <nrjnj-07o.ln1@zaphod.local>:
>> imagecopyresized($newImage, $oldimage ...
> Yup, det virkede, mange tak. Det er godt nok ikke noget særligt kønt

Er det pænt nu, hvor du bruger truecolor?

--
Mvh.
Niels Andersen
http://myplace.dk/articles/getpost/?lang=da

Jonas Voss (08-03-2003)
Kommentar
Fra : Jonas Voss


Dato : 08-03-03 16:17

In dk.edb.internet.webdesign.serverside.php, Niels Andersen wrote:

> Jonas Voss wrote in <nrjnj-07o.ln1@zaphod.local>:
>>> imagecopyresized($newImage, $oldimage ...
>> Yup, det virkede, mange tak. Det er godt nok ikke noget særligt kønt
>
> Er det pænt nu, hvor du bruger truecolor?

Ja, det er meget bedre. Jeg har har også forsøgt mig med
imagecopyresampled() i stedet for imagecopyresized(), men det sluger
er en del flere ressourcer, og er nok ikke smart hvis man har en mappe
med mange billeder i, og ikke er den eneste på serveren.

Har tænkt mig at lave scriptet sådan at man enten kan vælge den ene
eller den anden, samt lave en indbygget kontrol der automagisk vælger
imagecopyresized() hvis der er over 50 billeder i mappen.

--
| Jonas @ 55.75, 12.42 | <http://verture.net/> |

   "When I eat a biscuit," said Arthur, "it stays eaten."

Søg
Reklame
Statistik
Spørgsmål : 177559
Tips : 31968
Nyheder : 719565
Indlæg : 6408937
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste