30. august 2002 - 22:21
Der er
44 kommentarer og 1 løsning
Billedbehandling i GD-lib
Hej! Jeg har lavet et script der skal ændre størrelsen på et uploadet billede. Problemet er at når jeg uploader billeder som GD-lib skal arbejde med går den i stå - det har dog tidligere virket. Det kører på et webhotel - derfor kan jeg ikke selv ændre opsætning. Her er mit script, der får den til at gå i stå: $src_img = imagecreatefromjpeg($new_name); $w = imagesx($src_img); $h = imagesy($src_img); $prop = $w / $h; $new_w = 200; $new_h = $new_w / $prop; $dst_img = imagecreatetruecolor($new_w, $new_h); imagecopyresampled($dst_img, $src_img, 0, 0, 0, 0, $new_w, $new_h, imagesx($src_img), imagesy($src_img)); imagejpeg($dst_img, $new_name);
Annonceindlæg fra GlobalConnect
30. august 2002 - 22:32
#2
Er det under resize, eller under upload der sker en fejl?
30. august 2002 - 22:33
#3
Nej, jeg bruger $_FILES: move_uploaded_file($_FILES['kat_pic']['tmp_name'], "../img/".$_FILES['kat_pic']['name']); Bagefter omdøber jeg filen. - Så det er ikke det.
30. august 2002 - 22:33
#4
angelod > den kommer ik med nogen fejlmeddelelse - browseren bliver bare stående og tygger på det virkeligt længe....
30. august 2002 - 22:34
#5
..men har fundet ud af at hvis jeg bare uploader uden at behandle billedet så kører det bare..
30. august 2002 - 22:35
#6
Men har du så tjekket at billedet rent faktisk også *bliver* uploadet?
30. august 2002 - 22:37
#7
ja, det har jeg tjekket - det bliver det. Jeg kan nemlig set at filen bliver uploadet og omdøbt (sker lige for ovenstående kodestump) - men så sker der ikke mere.
30. august 2002 - 22:40
#8
Hvor har du webhotel? :o)
30. august 2002 - 22:42
#9
hvorfor? det har virket fint, så - ja, måske har de ændret noget ;o)
30. august 2002 - 22:45
#10
Lyder som om du laver et endless loop....
30. august 2002 - 22:46
#11
chanoa > ja, det kunne godt være det, da jeg har fundet ud af at filen bliver gemt mange gange på serveren. Men det kører på intet tidspunkt i nogen form for løkke.
30. august 2002 - 22:48
#12
Hmmm.. En bug i GD lib der får det til at ryge i en løkke... Hmmm.. Har ikke lige prøvet at teste koden på min egen server...
30. august 2002 - 22:49
#13
du har allerede $w og $h imagecopyresampled($dst_img, $src_img, 0, 0, 0, 0, $new_w, $new_h, $w, $h); men det er en småting. hvad med at vise noget mere at sourcen.
30. august 2002 - 22:49
#14
...Men så synes jeg jo bare at det er lidt underligt at det _har_ virket
30. august 2002 - 22:50
#15
jakoba > forstår vist ikke helt hvad du mener?
30. august 2002 - 22:53
#17
dr.tynell > Jakoba optimerede blot dit script en smule ;)
30. august 2002 - 22:54
#18
chanoa > ja, det synes jeg jo også, når det har virket.
30. august 2002 - 22:54
#19
jep - har fået den tilpasset nu ;o)
30. august 2002 - 22:57
#20
at det er spild at kalde en funktion når værdien allerede findes som variabel? //indsæt en linie foroven: error_reporting(E_ALL); // så alle småting rapporteres
30. august 2002 - 22:58
#21
jakoba > prøver jeg, men som sagt så står browseren bare og tygger på det i _meget_ lang tid.
30. august 2002 - 23:02
#23
mit testbillede er kun på 5kb og 250px bred - så det burde ikke være noget problem.
30. august 2002 - 23:05
#24
og der bliver intet rapporteret ? hvad så med at indsætte nogen debuglinier: error_reporting(E_ALL); // så alle småting rapporteres $src_img = imagecreatefromjpeg($new_name); $w = imagesx($src_img); $h = imagesy($src_img); echo "debug w,h= $w,$h<br>"; $prop = $w / $h; $new_w = 200; $new_h = $new_w / $prop; echo "debug new_w,new_h= $new_w,$new_h<br>"; $dst_img = imagecreatetruecolor($new_w, $new_h); echo "debug dst_img created<br>"; imagecopyresampled($dst_img, $src_img, 0,0, 0,0, $new_w,$new_h, $w,$h); echo "debug resample done<br>"; imagejpeg($dst_img, $new_name); echo "debug .jpg fil skrevet<br>"; så får vi at vide enten hvor den går istå, eller hvor den går i løkke
30. august 2002 - 23:06
#25
Næ, så det er ikke fordi den står og tygger på det længe, mit er nemlig over 1MB og pænt stort, og klaret på meget kort tid.
30. august 2002 - 23:08
#26
jakoba > jeg prøver dit forslag.... to sek.
30. august 2002 - 23:08
#27
Lidt mere status ville være fint.... error_reporting(E_ALL); // så alle småting rapporteres echo "debug åbner .jpg fil<br>"; $src_img = imagecreatefromjpeg($new_name); echo "debug .jpg fil åbnet<br>"; $w = imagesx($src_img); $h = imagesy($src_img); echo "debug w,h= $w,$h<br>"; $prop = $w / $h; $new_w = 200; $new_h = $new_w / $prop; echo "debug new_w,new_h,prop= $new_w,$new_h,$prop<br>"; $dst_img = imagecreatetruecolor($new_w, $new_h); echo "debug dst_img created<br>"; imagecopyresampled($dst_img, $src_img, 0,0, 0,0, $new_w,$new_h, $w,$h); echo "debug resample done<br>"; imagejpeg($dst_img, $new_name); echo "debug .jpg fil skrevet<br>";
30. august 2002 - 23:08
#28
imagecopyresampled() kræver PHP 4.0.6 og GD 2.0.1 check evt med php_info() om du har det
30. august 2002 - 23:10
#29
imagecreatetruecolor() gør også
30. august 2002 - 23:11
#30
Men PHP vil brække sig over scriptet hvis de ikke findes, og vise noget i stil med "Call to undefinded function imagecreatetruecolor() in /something line 42"
30. august 2002 - 23:12
#31
satte følgende ind: error_reporting(E_ALL); echo "starting...<br>"; $src_img = imagecreatefromjpeg($new_name); $w = imagesx($src_img); $h = imagesy($src_img); echo "debug w,h= $w,$h<br>"; $prop = $w / $h; $new_w = 200; $new_h = $new_w / $prop; echo "debug new_w,new_h= $new_w,$new_h<br>"; $dst_img = imagecreatetruecolor($new_w, $new_h); echo "debug dst_img created<br>"; imagecopyresampled($dst_img, $src_img, 0,0, 0,0, $new_w,$new_h, $w,$h); echo "debug resample done<br>"; imagejpeg($dst_img, $new_name); echo "debug .jpg fil skrevet<br>"; - men den stod bare og arbejdede på det indtil der var gået lidt over 2 min. (stadig 5kb billede) og browseren timed ud.
30. august 2002 - 23:13
#32
Den nåede slet ikke til "Strating..."?
30. august 2002 - 23:13
#33
Så tror jeg du bliver nødt til at poste hele scriptet.
30. august 2002 - 23:15
#34
som sagt ... det HAR virket på denne webserver. GD er: "2.0 or higher" PHP: 4.2.2 - og jeg tror ikke de har nedgraderet...
30. august 2002 - 23:20
#35
og flyt error_reporting(E_ALL); helt op i toppen af php
30. august 2002 - 23:21
#36
Go idé.. Og tilføj flere echo linjer.
30. august 2002 - 23:25
#37
har nu smidt flere echo'er ind... men, den står stadig bare og arbejder indtil den timer out. Her er hele min funktion: function add_cat($kategori, $kat_pic) { error_reporting(E_ALL); if (is_uploaded_file($_FILES['kat_pic']['tmp_name'])) { $use_pic = 1; // Upload billede og skift bredde til 200px move_uploaded_file($_FILES['kat_pic']['tmp_name'], "../img/".$_FILES['kat_pic']['name']); $img_size = getimagesize("../img/".$_FILES['kat_pic']['name']); if ($img_size[2] == 1) { $file_type = ".gif"; } elseif ($img_size[2] == 2) { $file_type = ".jpg"; } echo "Size found...<br>"; $file_name = "cat_pic_".time().$file_type; rename("../img/".$_FILES['kat_pic']['name'], "../img/".$file_name); $new_name = "../img/".$file_name; chmod($new_name, 0777); echo "Renamed end chmoded...<br>"; if (($img_size[0] > 200) && ($file_type == ".jpg")) { echo "starting...<br>"; $src_img = imagecreatefromjpeg($new_name); $w = imagesx($src_img); $h = imagesy($src_img); echo "debug w,h= $w,$h<br>"; $prop = $w / $h; $new_w = 200; $new_h = $new_w / $prop; echo "debug new_w,new_h= $new_w,$new_h<br>"; $dst_img = imagecreatetruecolor($new_w, $new_h); echo "debug dst_img created<br>"; imagecopyresampled($dst_img, $src_img, 0,0, 0,0, $new_w,$new_h, $w,$h); echo "debug resample done<br>"; imagejpeg($dst_img, $new_name); echo "debug .jpg fil skrevet<br>"; } $img_path = "img/".$file_name; } require_once("../conn.inc"); if ($kategori == 0) { mysql_query("INSERT INTO kategorier (mor_id, navn, kat_tekst, kat_billede) VALUES (0, '$_REQUEST[kat_navn]', '$_REQUEST[kat_tekst]', '$img_path')") or die(mysql_error()); } else { mysql_query("INSERT INTO kategorier (mor_id, navn, kat_tekst, kat_billede) VALUES ('$kategori', '$_REQUEST[kat_navn]', '$_REQUEST[kat_tekst]', '$img_path')") or die(mysql_error()); } if ($use_pic == 1) { // OMDØBER FILEN TIL cat_id_(INDSAT ID) $last_insert_id = mysql_insert_id(); $new_file_name = "cat_id_".$last_insert_id.$file_type; rename($new_name, "../img/".$new_file_name); $new_img_path = "img/".$new_file_name; mysql_query("UPDATE kategorier SET kat_billede='$new_img_path' WHERE id=$last_insert_id") or die(mysql_error()); } return "Kategorien blev tilføjet!"; }
30. august 2002 - 23:29
#38
- tror jeg vil tale med min udbyder i morgen - det må vist være hos dem der er en fejl.
30. august 2002 - 23:34
#39
Hmm... Prøv og kør scriptet efter ca. 30 sek trykker du cancel så BURDE browseren vise hvad den har modtaget so far.
30. august 2002 - 23:48
#40
et sted oppe i toppen står der <?php det er DER linien error_reporting(E_ALL); skal tilføjes.
30. august 2002 - 23:57
#41
jakoba > det ka vel være lige meget - filen indeholder bare en bunke funktioner - som den står nu bliver den startet når funktionen kaldes.
30. august 2002 - 23:58
#42
jamen vi ved jo allerede at php ikke kommer så langt som til den funktion. der er noget galt FØR det.
31. august 2002 - 00:13
#43
nu har jeg prøvet at sætte den helt op i toppen, men det hjælper stadig ikke - nu skriver den en masse småfejl, som ikke har betydning for udførslen af scriptet - og igen - DET HAR VIRKET SÅDAN HER!
31. august 2002 - 00:19
#44
Jeg synes nu at du skal lukke det her spm.. Hvis det har virket før, og der ikke er blevet ændret i det, så kan det ikke nytte noget.. Jeg har kigget scriptet igennem 3 gange nu, og jeg kan ikke umiddelbart se nogle fejl.. Det er nok en fejl fra din udbyders side (som du selv siger), og kan være sket under en opdatering af GD Lib.. Har set noget lignende før, faktisk..
31. august 2002 - 00:49
#45
angelod > tak :o) - prøver at snakke med dem i morgen :o)
Vi tilbyder markedets bedste kurser inden for webudvikling