Avatar billede dr.tynell Nybegynder
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);
Avatar billede jakoba Nybegynder
30. august 2002 - 22:32 #1
kunne det fære dit webhotel har opgraderet php til den nye version (php 4.2 og op) hvor formdata skal hentes fra $_GET eller $_POST og ikke automatisk bliver lavet til varaibler med feltenes navne.

læs: http://dk.php.net/manual/en/language.variables.predefined.php
og : http://dk.php.net/manual/en/language.variables.external.php
Avatar billede angelod Novice
30. august 2002 - 22:32 #2
Er det under resize, eller under upload der sker en fejl?
Avatar billede dr.tynell Nybegynder
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.
Avatar billede dr.tynell Nybegynder
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....
Avatar billede dr.tynell Nybegynder
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..
Avatar billede angelod Novice
30. august 2002 - 22:35 #6
Men har du så tjekket at billedet rent faktisk også *bliver* uploadet?
Avatar billede dr.tynell Nybegynder
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.
Avatar billede angelod Novice
30. august 2002 - 22:40 #8
Hvor har du webhotel? :o)
Avatar billede dr.tynell Nybegynder
30. august 2002 - 22:42 #9
hvorfor? det har virket fint, så - ja, måske har de ændret noget ;o)
Avatar billede Noone Nybegynder
30. august 2002 - 22:45 #10
Lyder som om du laver et endless loop....
Avatar billede dr.tynell Nybegynder
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.
Avatar billede Noone Nybegynder
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...
Avatar billede jakoba Nybegynder
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.
Avatar billede dr.tynell Nybegynder
30. august 2002 - 22:49 #14
...Men så synes jeg jo bare at det er lidt underligt at det _har_ virket
Avatar billede dr.tynell Nybegynder
30. august 2002 - 22:50 #15
jakoba > forstår vist ikke helt hvad du mener?
Avatar billede Noone Nybegynder
30. august 2002 - 22:53 #16
http://www.mrfunny.yi.org/ekspert/252327.php

Altså er det nok serveren's opsætning den er gal med, kontakt udbyderen og hør hvad de lavede ved sidste opgradering.
Avatar billede Noone Nybegynder
30. august 2002 - 22:53 #17
dr.tynell > Jakoba optimerede blot dit script en smule ;)
Avatar billede dr.tynell Nybegynder
30. august 2002 - 22:54 #18
chanoa > ja, det synes jeg jo også, når det har virket.
Avatar billede dr.tynell Nybegynder
30. august 2002 - 22:54 #19
jep - har fået den tilpasset nu ;o)
Avatar billede jakoba Nybegynder
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
Avatar billede dr.tynell Nybegynder
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.
Avatar billede Noone Nybegynder
30. august 2002 - 23:00 #22
Er det et stort billede?

Det billede jeg brugte som test kan findes på http://www.nikkiwebster.dk/photo_gallery/pics/c3.jpg

Prøv eventuelt med det.
Avatar billede dr.tynell Nybegynder
30. august 2002 - 23:02 #23
mit testbillede er kun på 5kb og 250px bred - så det burde ikke være noget problem.
Avatar billede jakoba Nybegynder
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
Avatar billede Noone Nybegynder
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.
Avatar billede dr.tynell Nybegynder
30. august 2002 - 23:08 #26
jakoba > jeg prøver dit forslag.... to sek.
Avatar billede Noone Nybegynder
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>";
Avatar billede jakoba Nybegynder
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
Avatar billede Noone Nybegynder
30. august 2002 - 23:10 #29
imagecreatetruecolor() gør også
Avatar billede Noone Nybegynder
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"
Avatar billede dr.tynell Nybegynder
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.
Avatar billede Noone Nybegynder
30. august 2002 - 23:13 #32
Den nåede slet ikke til "Strating..."?
Avatar billede Noone Nybegynder
30. august 2002 - 23:13 #33
Så tror jeg du bliver nødt til at poste hele scriptet.
Avatar billede dr.tynell Nybegynder
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...
Avatar billede jakoba Nybegynder
30. august 2002 - 23:20 #35
og flyt
error_reporting(E_ALL);
helt op i toppen af php
Avatar billede Noone Nybegynder
30. august 2002 - 23:21 #36
Go idé.. Og tilføj flere echo linjer.
Avatar billede dr.tynell Nybegynder
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!";
}
Avatar billede dr.tynell Nybegynder
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.
Avatar billede Noone Nybegynder
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.
Avatar billede jakoba Nybegynder
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.
Avatar billede dr.tynell Nybegynder
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.
Avatar billede jakoba Nybegynder
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.
Avatar billede dr.tynell Nybegynder
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!
Avatar billede angelod Novice
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..
Avatar billede dr.tynell Nybegynder
31. august 2002 - 00:49 #45
angelod > tak :o) - prøver at snakke med dem i morgen :o)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester