Bekijk Volledige Versie : [PHP]De imagecopyresampled-functie
Hallo,
Ik werk aan een foto-upload-script. Nadat de foto via een formulier is
verzonden, gebeurt het volgende:
- Na het checken van alle velden worden de gegevens van het jpegje in een
database gezet. Vervolgens wordt de id van dat record uit de database
gehaald en die wordt meteen als naam voor het originele plaatje gebruikt.
- Het originele plaatje met id als naam wordt in de map pictures/$region
gezet.
- Dan wordt er een thumbnail gemaakt, in dezelfde map, met th_ voor de naam.
<?php
if(empty($foutmsg)){
//uploaden en in database zetten
$insert_image = "INSERT INTO `sys_pics` (`region` , `org_name` ,
`description` , `user_id` , `story_id` , `width` , `height`, `ext`, `size`)
VALUES ('".$region."', '".$fileorgname."',
'".$_POST['description']."', '".$_SESSION['my_id']."',
'".$_POST['story_id']."', '".$filesizex."', '".$filesizey."',
'".$file_type."', '".$filesize."')";
mysql_query($insert_image) or die(mysql_error());
$sql = "SELECT `id` FROM `sys_pics` WHERE `org_name` =
'".$fileorgname."' AND `user_id` = '".$_SESSION['my_id']."' AND `story_id` =
'".$_POST['story_id']."'";
$q = mysql_query($sql);
while($record = mysql_fetch_object($q)){
$pic_id = $record->id;
}
if(move_uploaded_file($filetmpname,
"pictures/".$region."/".$pic_id.".".$file_type."" )){
//thumbs maken
$new_width = 60;
$width_ratio = $new_width/$filesizex;
$new_height = $width_ratio * $filesizey;
//Aanmaken thumbnail
$img = "pictures/".$region."/".$pic_id.".".$file_type."";
//originele pic
$dest_img = "pictures/".$region."/th_".$pic_id.".".$file_type."";
//bestemming pic
echo "".$img . "<br>". $dest_img."" ;
imagecopyresampled($dest_img, $img, 0, 0, 0, 0, $new_width,
$new_height, $filesizex, $filesizey);
echo "<h3>Je foto staat online</h3><a
href=\"index.php?page=add_pic\">Nog een foto uploaden</a><br><br><a
href=\"index.php?page=pic_admin\">Terug</a>";
}else{
echo"<h3>Fout</h3><p>Er is iets misgegaan tijdens het
uploaden</p><p>Probeer het opnieuw of neem contact op met de webmaster</p>";
}
}
?>
Probleem is nu dat ik de foutmelding krijg dat dat nummer niet bestaat.
Toch, als ik de variabele $img echo krijg ik een plaatje dat toch echt wel
bestaat.
Iemand een idee wat hier misgaat?
Alvast bedankt
Rick
Daniel Tryba
01/07/04, 01:05
Rick <r.haasteren@planet.nl> wrote:
> $insert_image = "INSERT INTO `sys_pics` (`region` , `org_name` ,
[knip]
>
> $sql = "SELECT `id` FROM `sys_pics` WHERE `org_name` =
> '".$fileorgname."' AND `user_id` = '".$_SESSION['my_id']."' AND `story_id` =
> '".$_POST['story_id']."'";
> $q = mysql_query($sql);
> while($record = mysql_fetch_object($q)){
> $pic_id = $record->id;
> }
Zonde: http://nl3.php.net/manual/en/function.mysql-insert-id.php
[knip]
> $img = "pictures/".$region."/".$pic_id.".".$file_type."";
> //originele pic
> $dest_img = "pictures/".$region."/th_".$pic_id.".".$file_type."";
> //bestemming pic
> echo "".$img . "<br>". $dest_img."" ;
> imagecopyresampled($dest_img, $img, 0, 0, 0, 0, $new_width,
> $new_height, $filesizex, $filesizey);
[knip]
> Probleem is nu dat ik de foutmelding krijg dat dat nummer niet bestaat.
> Toch, als ik de variabele $img echo krijg ik een plaatje dat toch echt wel
> bestaat.
>
> Iemand een idee wat hier misgaat?
En wat is de foutmelding (de echte, niet jou interpretatie)?
BTW als je in de handleiding kijkt
(http://nl3.php.net/manual/en/function.imagecopyresampled.php) zie je
dat waar jij strings voor de eerste 2 argumenten gebruikt, het volgens
het prototype resources moeten zijn. In de commentaren van de functie
staan voldoende voorbeelden hoe het wel moet.
--
Daniel Tryba
Jaap de Bergen
01/07/04, 09:35
On Thu, 1 Jul 2004 00:05:55 +0200, "Rick" <r.haasteren@planet.nl>
wrote:
>Hallo,
>
>Ik werk aan een foto-upload-script. Nadat de foto via een formulier is
>verzonden, gebeurt het volgende:
>
Een algemeen tipje: je kunt beter imagemagick gebruiken als
performance belangrijk is, die is stukken sneller dan de gd functies.
Jaap
Daniel Tryba wrote:
> Rick <r.haasteren@planet.nl> wrote:
>> $insert_image = "INSERT INTO `sys_pics` (`region` ,
>> `org_name` , [knip]
>>
>> $sql = "SELECT `id` FROM `sys_pics` WHERE `org_name` =
>> '".$fileorgname."' AND `user_id` = '".$_SESSION['my_id']."' AND
>> `story_id` = '".$_POST['story_id']."'";
>> $q = mysql_query($sql);
>> while($record = mysql_fetch_object($q)){
>> $pic_id = $record->id;
>> }
>
> Zonde: http://nl3.php.net/manual/en/function.mysql-insert-id.php
>
> [knip]
Stuk makkelijker inderdaad, dank je!
>> $img = "pictures/".$region."/".$pic_id.".".$file_type."";
>> //originele pic
>> $dest_img =
>> "pictures/".$region."/th_".$pic_id.".".$file_type.""; //bestemming
>> pic echo "".$img . "<br>". $dest_img."" ;
>> imagecopyresampled($dest_img, $img, 0, 0, 0, 0, $new_width,
>> $new_height, $filesizex, $filesizey);
>
> [knip]
>
>> Probleem is nu dat ik de foutmelding krijg dat dat nummer niet
>> bestaat. Toch, als ik de variabele $img echo krijg ik een plaatje
>> dat toch echt wel bestaat.
>>
>> Iemand een idee wat hier misgaat?
>
> En wat is de foutmelding (de echte, niet jou interpretatie)?
Dit is de *echte* foutmelding: Warning: imagecopyresampled(): supplied
argument is not a valid Image resource .
> BTW als je in de handleiding kijkt
> (http://nl3.php.net/manual/en/function.imagecopyresampled.php) zie je
> dat waar jij strings voor de eerste 2 argumenten gebruikt, het volgens
> het prototype resources moeten zijn. In de commentaren van de functie
> staan voldoende voorbeelden hoe het wel moet.
Ik begrijp eerlijk gezegd niet precies hoe ik aan die prototype resources
moet komen. Ik heb het geprobeerd zoals in die voorbeelden op php.net:
Het plaatje wordt: $thumb = imagecreatetruecolor ($new_width,
$new_height);
Ook dan nog krijg ik die foutmelding. Ook snap ik niet helemaal welke
resource er op de eerste plaats (de aankomende thumbnail) moet komen.
Alvast bedankt!
Rick
Daniel Tryba
01/07/04, 10:15
Jaap de Bergen <DEBERGEN.COM@remove_this_to_emaildomainsbyproxy.co m > wrote:
>>Ik werk aan een foto-upload-script. Nadat de foto via een formulier is
>>verzonden, gebeurt het volgende:
>>
>
> Een algemeen tipje: je kunt beter imagemagick gebruiken als
> performance belangrijk is, die is stukken sneller dan de gd functies.
Vertel meer... benchmarks en de api zouden welkom zijn om je opmerking
te ondersteunen.
--
Daniel Tryba
Daniel Tryba
01/07/04, 10:25
Rick <r.haasteren@planet.nl> wrote:
>> En wat is de foutmelding (de echte, niet jou interpretatie)?
>
> Dit is de *echte* foutmelding: Warning: imagecopyresampled(): supplied
> argument is not a valid Image resource .
^^^^^^^^^^^^^^^^^^^^^^^^^^
>> BTW als je in de handleiding kijkt
>> (http://nl3.php.net/manual/en/function.imagecopyresampled.php) zie je
>> dat waar jij strings voor de eerste 2 argumenten gebruikt, het volgens
>> het prototype resources moeten zijn. In de commentaren van de functie
>> staan voldoende voorbeelden hoe het wel moet.
>
> Ik begrijp eerlijk gezegd niet precies hoe ik aan die prototype resources
> moet komen.
Die staan gewoon in de handleiding:
<q src='http://nl3.php.net/imagecopyresampled'>
bool imagecopyresampled
(
resource dst_im,
resource src_im,
int dstX,
int dstY,
int srcX,
int srcY,
int dstW,
int dstH,
int srcW,
int srcH
)
</q>
> Ik heb het geprobeerd zoals in die voorbeelden op php.net:
> Het plaatje wordt: $thumb = imagecreatetruecolor ($new_width, $new_height);
Heeft als prototype:
resource imagecreatetruecolor ( int x_size, int y_size)
In je oorspronkelijke code dient dus $dest_img eerst hiermee te worden
gemaakt. $img krijg je met een van de imagecreatefrom....() functies.
> Ook dan nog krijg ik die foutmelding. Ook snap ik niet helemaal welke
> resource er op de eerste plaats (de aankomende thumbnail) moet komen.
Huh! imagecreatetruecolor kan _die_ foutmelding niet geven... het is
uitermate handig dat je niet vertelt wat je aangepast hebt aan je
script... die $thumb... regel past namelijk op geen enkele manier in je
oorspronkelijke script.
Je kan overigens het eerst voorbeeld (sirsiggi at bin-ich-jesus dot de
20-Jun-2004 10:21) gewoon als vervangin nemen voor je eigen probeersel:
//Aanmaken thumbnail
$img = "pictures/".$region."/".$pic_id.".".$file_type.""; //originele pic
$dest_img = "pictures/".$region."/th_".$pic_id.".".$file_type.""; //bestemming pic
if(!imageresize($img,$dest_img,$new_width,$new_hei ght))
{
die("er ging iets fout");
}
--
Daniel Tryba
Jaap de Bergen
01/07/04, 10:35
On Thu, 1 Jul 2004 08:01:03 +0000 (UTC), Daniel Tryba
<news_nl.internet.www.server-side@canopus.nl> wrote:
>Jaap de Bergen <DEBERGEN.COM@remove_this_to_emaildomainsbyproxy.co m > wrote:
>>>Ik werk aan een foto-upload-script. Nadat de foto via een formulier is
>>>verzonden, gebeurt het volgende:
>>>
>>
>> Een algemeen tipje: je kunt beter imagemagick gebruiken als
>> performance belangrijk is, die is stukken sneller dan de gd functies.
>
>Vertel meer... benchmarks en de api zouden welkom zijn om je opmerking
>te ondersteunen.
Google heeft het antwoord, zoek maar eens op "faster gd imagemagick".
Jaap
Daniel Tryba wrote:
> Rick <r.haasteren@planet.nl> wrote:
>>> En wat is de foutmelding (de echte, niet jou interpretatie)?
>>
>> Dit is de *echte* foutmelding: Warning: imagecopyresampled():
>> supplied argument is not a valid Image resource .
> ^^^^^^^^^^^^^^^^^^^^^^^^^^
>
>>> BTW als je in de handleiding kijkt
>>> (http://nl3.php.net/manual/en/function.imagecopyresampled.php) zie
>>> je dat waar jij strings voor de eerste 2 argumenten gebruikt, het
>>> volgens het prototype resources moeten zijn. In de commentaren van
>>> de functie staan voldoende voorbeelden hoe het wel moet.
>>
>> Ik begrijp eerlijk gezegd niet precies hoe ik aan die prototype
>> resources moet komen.
>
> Die staan gewoon in de handleiding:
> <q src='http://nl3.php.net/imagecopyresampled'>
> bool imagecopyresampled
> (
> resource dst_im,
> resource src_im,
> int dstX,
> int dstY,
> int srcX,
> int srcY,
> int dstW,
> int dstH,
> int srcW,
> int srcH
> )
> </q>
Dat zijn de waarden die ingevuld dienen te worden ja, maar het probleem voor
mij blijft: die 2 resources. Blijkbaar werkt het niet om gewoon het adres
van het plaatje op te geven.
[knip]
>> Ook dan nog krijg ik die foutmelding. Ook snap ik niet helemaal welke
>> resource er op de eerste plaats (de aankomende thumbnail) moet komen.
>
> Huh! imagecreatetruecolor kan _die_ foutmelding niet geven... het is
> uitermate handig dat je niet vertelt wat je aangepast hebt aan je
> script... die $thumb... regel past namelijk op geen enkele manier in
> je oorspronkelijke script.
Nee, die foutmedling kwam ook van imagecopyresampled.
> Je kan overigens het eerst voorbeeld (sirsiggi at bin-ich-jesus dot de
> 20-Jun-2004 10:21) gewoon als vervangin nemen voor je eigen
> probeersel:
>
> //Aanmaken thumbnail
> $img = "pictures/".$region."/".$pic_id.".".$file_type.""; //originele
> pic $dest_img = "pictures/".$region."/th_".$pic_id.".".$file_type."";
> //bestemming pic
>
> if(!imageresize($img,$dest_img,$new_width,$new_hei ght))
> {
> die("er ging iets fout");
> }
Die ben ik nu aan het uitproberen ja. Maar ook nu loop ik weer tegen het
probleem van die prototypes aan. In de functie moeten $img en $target worden
ingevoerd. Wat moet daar precies ingevoerd worden?
Rick
Daniel Tryba
01/07/04, 11:35
Jaap de Bergen <DEBERGEN.COM@remove_this_to_emaildomainsbyproxy.co m> wrote:
>>> Een algemeen tipje: je kunt beter imagemagick gebruiken als
>>> performance belangrijk is, die is stukken sneller dan de gd functies.
>>
>>Vertel meer... benchmarks en de api zouden welkom zijn om je opmerking
>>te ondersteunen.
>
> Google heeft het antwoord, zoek maar eens op "faster gd imagemagick".
In de Nederlands rechtstaat geldt: "Wie eist, bewijst!"
Maar goed:
Hit 5:
<q src='http://www.smartphp.net/content/classes/thumbnail/Creating_Thumbnails.html'>
imagemagick is faster and much more powerful that GD.
</q>
Hit 7:
<q src='http://reflections-ig.com/home.php?a=documentation'>
GD comes with php, and has a wider array of capabilities. It tends to
be faster, but the image quality and the number of compatible formats
isn't as good as ImageMagick's.
</q>
Hit 8:
<q src='http://cpanratings.perl.org/d/Imager'>
Other than this, the module works well and is even faster than GD in
many instances. GD however is much easier to learn, again due to the
superior documentation.
</q>
Hit 10:
<q src='http://www.webhostingtalk.com/archive/thread/149065-1.html'>
I found ImageMagick 30% slower then netpbm.
</q>
MAW geen enkele benchmark... Maar wel de leuke opmerking dat netpbm in
sommige gevallen sneller is, maar in gebruik ook weer een stuk
moeilijker (de enige reden waarom ik ooit imagemagick heb gebruik was
'convert -flop'). Als je toch al een het shellen bent maakt dat toch
weinig meer uit. Maar daar heb je dan ook meteen een groot probleem te
pakken: het is niet portable. GD2 tegenwoordig wel.
--
Daniel Tryba
Daniel Tryba
01/07/04, 11:35
Rick <r.haasteren@planet.nl> wrote:
>> </q>
>
> Dat zijn de waarden die ingevuld dienen te worden ja, maar het probleem voor
> mij blijft: die 2 resources. Blijkbaar werkt het niet om gewoon het adres
> van het plaatje op te geven.
>
> [knip]
Dat stond dan ook (beknopt) uitgelegt in de 3 regels die je hier geknipt
hebt.
>> if(!imageresize($img,$dest_img,$new_width,$new_hei ght))
>> {
>> die("er ging iets fout");
>> }
>
> Die ben ik nu aan het uitproberen ja. Maar ook nu loop ik weer tegen het
> probleem van die prototypes aan. In de functie moeten $img en $target worden
> ingevoerd. Wat moet daar precies ingevoerd worden?
Nogmaals lezen wat ik gepost heb, wellicht valt je iets op als je de
code heel aandachtig leest.
--
Daniel Tryba
Daniel Tryba wrote:
> Rick <r.haasteren@planet.nl> wrote:
>>> </q>
>>
>> Dat zijn de waarden die ingevuld dienen te worden ja, maar het
>> probleem voor mij blijft: die 2 resources. Blijkbaar werkt het niet
>> om gewoon het adres van het plaatje op te geven.
>>
>> [knip]
>
> Dat stond dan ook (beknopt) uitgelegt in de 3 regels die je hier
> geknipt hebt.
>
>>> if(!imageresize($img,$dest_img,$new_width,$new_hei ght))
>>> {
>>> die("er ging iets fout");
>>> }
Maar in die functie van php.net komt de functie ImageCreateFromJpeg ook
voor. De input daarvoor is de var $img. Kan dat wel de url van een bestand
zijn?
Dank je
Rick
Daniel Tryba
01/07/04, 12:15
Rick <r.haasteren@planet.nl> wrote:
> Maar in die functie van php.net komt de functie ImageCreateFromJpeg ook
> voor. De input daarvoor is de var $img. Kan dat wel de url van een bestand
> zijn?
<q src='http://nl.php.net/manual/en/function.imagecreatefromjpeg.php'>
Description
resource imagecreatefromjpeg ( string filename)
....
Tip: You can use a URL as a filename with this function if the fopen
wrappers have been enabled. See fopen() for more details on how to
specify the filename and Appendix L for a list of supported URL
protocols.
Warning
Windows versions of PHP prior to PHP 4.3.0 do not support accessing
remote files via this function, even if allow_url_fopen is enabled.
</q>
--
Daniel Tryba