Avatar billede cmau Nybegynder
30. april 2005 - 11:53 Der er 29 kommentarer og
1 løsning

Lav thumb virker ikke

Hejsa.

Hvis i kigger her: http://www.babegalleri.dk/test/images/users/hotornot/index.php?img_id=1

Så ser i at min funktion sætter det lille billede i hjørnet på, men hvis jeg prøver at lave en thumb, som her: http://www.babegalleri.dk/test/images/users/hotornot/index.php?img_id=1&thumb=ture Så skulle den gerne lave den til 130 bred også højden så den passer, men den gør slet ikke noget ved billedet. Den viser det bare. Nogle der kan finde fejlen?

Kode:

<?
include('../../../sql.php');
$img_id = $_GET['img_id'];
$thumb = $_GET['thumb'];

$query = mysql_query("SELECT * FROM hotornot WHERE id = '$img_id' AND img_accepted = 'yes'") or die(mysql_error());

$mappe = "images/";

if(mysql_num_rows($query) == 0) {
header("Location:http://babegalleri.dk");
exit;
} else {

$row = mysql_fetch_assoc($query);

if($row['img_type'] == ".gif") {
header('content-type: image/gif');
} else {
header('content-type: image/jpg');
}

if($thumb == "true") {

if($row['img_type'] == ".gif") {
$type = ".gif";
$image = imagecreatefromgif($mappe.$img_id.$type);
} else {
$type = ".jpg";
$image = imagecreatefromjpeg($mappe.$img_id.$type);
}

$x = imagesx($image);
$y = imagesy($image);
$img_width = 130;
$calculate = $img_width / $x;
$img_height = round($y * $calculate,0);

$logo = imagecreatetruecolor($img_width,$img_height);
imagecopyresampled($logo,$image,0,0,0,0,$img_width,$img_height,$x,$y);

} else {

$logo = imagecreatefromgif('logo.gif');
$logo_width = 120;
$logo_height = 25;

$image = imagecreatetruecolor($logo_width, $logo_height);

if($row['img_type'] == ".gif") {
$type = ".gif";
$image = imagecreatefromgif($mappe.$img_id.$type);
} else {
$type = ".jpg";
$image = imagecreatefromjpeg($mappe.$img_id.$type);
}

$size = getimagesize($mappe.$img_id.$type);

$dest_x = $size[0] - $logo_width;
$dest_y = $size[1] - $logo_height;

imagecopymerge($image, $logo, $dest_x, $dest_y, 0, 0, $logo_width, $logo_height, 100);
}

if($row['img_type'] == ".gif") {
imagegif($image);
} else {
imagejpeg($image);
}



imagedestroy($image);
imagedestroy($logo);


}
?>
Avatar billede cmau Nybegynder
30. april 2005 - 11:55 #1
Hov linket til det billede der skulle blive thumb er:

http://www.babegalleri.dk/test/images/users/hotornot/index.php?img_id=1&thumb=true
Avatar billede tagman Nybegynder
30. april 2005 - 12:58 #2
if($thumb == "true") {

Skal måske være:

if($_GET["thumb"] == "true") {


Her er i øvrigt min funktion til at skalere billeder. Den sidste parameter fortæller, om thumb'en skal være i s/h.


function imageresize($filename,$filename2,$maxwidth,$maxheight,$biltype,$graysc) {
if (is_file($filename.$biltype)) { /* check if the file is really one ;) */
  if($biltype=="jpg") {
    $im = imagecreatefromjpeg($filename.$biltype);
  }
  elseif($biltype=="gif") {
    $im = imagecreatefromgif($filename.$biltype);
  }
  elseif($biltype=="png") {
    $im = imagecreatefrompng($filename.$biltype);
  }
  elseif($biltype=="bmp") {
    $im = imagecreatefromwbmp($filename.$biltype);
  }

  if($filename==$filename2) {
  unlink($filename.$biltype);
  }

  $currwidth = ImageSX($im);
  $currheight = ImageSY($im);
  $nwidth=$currwidth;
  $nheight=$currheight;
 
/* now we have to check if the image
  is higher than wider and larger
  than the defined size, then
  calculte it and resize it proportional */
  if ($currwidth > $currheight && $currwidth > $maxwidth) {
  $percent = ($maxwidth * 100) / $currwidth;
  $nwidth = $maxwidth;
  $nheight = ($percent * $currheight) / 100;
  }
  elseif ($currheight > $maxheight) {
  $percent = ($maxheight * 100) / $currheight;
  $nheight = $maxheight;
  $nwidth = ($percent * $currwidth) / 100;
  }
 
  $nwidth = intval($nwidth);
  $nheight = intval($nheight);

/* ok. let's create the new smaller image
  with calculated size... */
  $newim = imagecreatetruecolor ($nwidth, $nheight);

/* ...and put the lager image into the
  smaller one. */
    imagecopyresized($newim,$im,0,0,0,0,$nwidth,$nheight,$currwidth,$currheight);

if($graysc) {
for ($y = 0; $y <$nheight; $y++) {
for ($x = 0; $x <$nwidth; $x++) {

# here we extract the green from
# the pixel at x,y , to use it as gray value
$gray = (ImageColorAt($newim, $x, $y) >> 8) & 0xFF;

# a more exact way would be this:
# $rgb = ImageColorAt($image, $x, $y);
# $red = ($rgb >> 16) & 0xFF;
# $green = (trgb >> 8) & 0xFF;
# $blue = $rgb & 0xFF;
# $gray = (int)(($red+$green+$blue)/4);

# and here we set the new pixel/color
  imagesetpixel ($newim, $x, $y,
  ImageColorAllocate ($newim, $gray,$gray,$gray));
}
}
}
  /* now save to file and clear up the memory ;) */
  imagejpeg($newim,$filename2."jpg",75);
  ImageDestroy($im);
  ImageDestroy($newim);
}
}
Avatar billede tagman Nybegynder
30. april 2005 - 12:59 #3
Nej... rettelse: Min funktion, som jeg stjal fra en anden og modificerede =)
Avatar billede cmau Nybegynder
30. april 2005 - 14:09 #4
Hvorfor vil du rette:
if($thumb == "true") {

til:
if($_GET["thumb"] == "true") {

$thumb er angivet længere helt i toppen. Vil ikke til at have en ny kode, vil bare at lavet min egen, så den virker.
Avatar billede tagman Nybegynder
30. april 2005 - 14:33 #5
fordi jeg ikke så den var sat i toppen :)

håber du kan bruge min kode som inspiration. Du har min 100% garanti for at den virker.....
Avatar billede cmau Nybegynder
30. april 2005 - 14:53 #6
Det jeg tror, at jeg selv gør forkert er denne linje:

imagejpeg($newim,$filename2."jpg",75);

Men den gemmer da billedet på serveren? Jeg skal bare have sådan at billedet bliver vist småt nå det skal ellers skal det ligge i den normale størrelse på serveren.
Avatar billede coderdk Praktikant
30. april 2005 - 14:57 #7
imagejpeg( $newim, '', 75 );

Outputter billedet til browseren i stedet for at gemme
Avatar billede cmau Nybegynder
30. april 2005 - 15:08 #8
OKay, men hvorfor kan jeg ikke bare bruge:

if($row['img_type'] == ".gif") {
imagegif($image);
} else {
imagejpeg($image);
}
Avatar billede coderdk Praktikant
30. april 2005 - 15:09 #9
Det kan du også godt...
Avatar billede cmau Nybegynder
30. april 2005 - 15:18 #10
Hvad er så fejlen i min kode?
Avatar billede coderdk Praktikant
30. april 2005 - 15:46 #11
Flowfejl går jeg ud fra. Det kan for øvrigt betale sig at lave ordentlig indrykning ;)
Jeg har lavet den lidt om, se om det ikke virker:

<?

    include('../../../sql.php');
    $img_id = $_GET['img_id'];
    $thumb = $_GET['thumb'];
   
    $query = mysql_query("SELECT * FROM hotornot WHERE id = '$img_id' AND img_accepted = 'yes'") or die(mysql_error());
   
    $mappe = "images/";
   
    if(mysql_num_rows($query) == 0)
    {
        header("Location:http://babegalleri.dk");
        exit;
    }
    else
    {
        $row = mysql_fetch_assoc($query);
   
        if($row['img_type'] == ".gif")
        {
            header('content-type: image/gif');
        }
        else
        {
            header('content-type: image/jpg');
        }
   
        if($thumb == "true")
        {
   
            if($row['img_type'] == ".gif")
            {
                $type = ".gif";
                $image = imagecreatefromgif($mappe.$img_id.$type);
            }
            else
            {
                $type = ".jpg";
                $image = imagecreatefromjpeg($mappe.$img_id.$type);
            }
           
            $x = imagesx($image);
            $y = imagesy($image);
            $img_width = 130;
            $calculate = $img_width / $x;
            $img_height = round($y * $calculate,0);
           
            $newpic = imagecreatetruecolor($img_width,$img_height);
            imagecopyresampled($newpic,$image,0,0,0,0,$img_width,$img_height,$x,$y);
        }
        else
        {
            $logo = imagecreatefromgif('logo.gif');
            $logo_width = 120;
            $logo_height = 25;
           
            $newpic = imagecreatetruecolor($logo_width, $logo_height);
           
            if($row['img_type'] == ".gif")
            {
                $type = ".gif";
                $image = imagecreatefromgif($mappe.$img_id.$type);
            }
            else
            {
                $type = ".jpg";
                $image = imagecreatefromjpeg($mappe.$img_id.$type);
            }
   
            $size = getimagesize($mappe.$img_id.$type);
           
            $dest_x = $size[0] - $logo_width;
            $dest_y = $size[1] - $logo_height;
   
            imagecopymerge($newpic, $logo, $dest_x, $dest_y, 0, 0, $logo_width, $logo_height, 100);
        }

        if($row['img_type'] == ".gif")
        {
            imagegif($newpic);
        }
        else
        {
            imagejpeg($newpic);
        }
       
        imagedestroy($image);
        imagedestroy($logo);
    }

?>
Avatar billede coderdk Praktikant
30. april 2005 - 15:47 #12
Næh der var en linje der var overflødig, den ser sådan ud nu:

<?

    include('../../../sql.php');
    $img_id = $_GET['img_id'];
    $thumb = $_GET['thumb'];
   
    $query = mysql_query("SELECT * FROM hotornot WHERE id = '$img_id' AND img_accepted = 'yes'") or die(mysql_error());
   
    $mappe = "images/";
   
    if(mysql_num_rows($query) == 0)
    {
        header("Location:http://babegalleri.dk");
        exit;
    }
    else
    {
        $row = mysql_fetch_assoc($query);
   
        if($row['img_type'] == ".gif")
        {
            header('content-type: image/gif');
        }
        else
        {
            header('content-type: image/jpg');
        }
   
        if($thumb == "true")
        {
   
            if($row['img_type'] == ".gif")
            {
                $type = ".gif";
                $image = imagecreatefromgif($mappe.$img_id.$type);
            }
            else
            {
                $type = ".jpg";
                $image = imagecreatefromjpeg($mappe.$img_id.$type);
            }
           
            $x = imagesx($image);
            $y = imagesy($image);
            $img_width = 130;
            $calculate = $img_width / $x;
            $img_height = round($y * $calculate,0);
           
            $newpic = imagecreatetruecolor($img_width,$img_height);
            imagecopyresampled($newpic,$image,0,0,0,0,$img_width,$img_height,$x,$y);
        }
        else
        {
            $logo = imagecreatefromgif('logo.gif');
            $logo_width = 120;
            $logo_height = 25;
           
            if($row['img_type'] == ".gif")
            {
                $type = ".gif";
                $newpic = imagecreatefromgif($mappe.$img_id.$type);
            }
            else
            {
                $type = ".jpg";
                $newpic = imagecreatefromjpeg($mappe.$img_id.$type);
            }
   
            $size = getimagesize($mappe.$img_id.$type);
           
            $dest_x = $size[0] - $logo_width;
            $dest_y = $size[1] - $logo_height;
   
            imagecopymerge($newpic, $logo, $dest_x, $dest_y, 0, 0, $logo_width, $logo_height, 100);
        }

        if($row['img_type'] == ".gif")
        {
            imagegif($newpic);
        }
        else
        {
            imagejpeg($newpic);
        }
       
        imagedestroy($image);
        imagedestroy($logo);
    }

?>
Avatar billede coderdk Praktikant
30. april 2005 - 15:48 #13
Og den sidste:

      imagedestroy($image);

Skulle have været:

      imagedestroy($newpic);
Avatar billede cmau Nybegynder
30. april 2005 - 15:51 #14
Desværre. Nu er det kun thumb 100%. Uden thumb kommer der bare noget sort: http://www.babegalleri.dk/test/images/users/hotornot/index.php?img_id=1
Avatar billede coderdk Praktikant
30. april 2005 - 15:56 #15
Thumb virker da nu ;)
Er du sikker på at den virkede før, uden thumb? For så vidt jeg kan se har jeg ikke ændret så meget på den del ;P
Avatar billede cmau Nybegynder
30. april 2005 - 15:58 #16
Avatar billede cmau Nybegynder
30. april 2005 - 16:08 #17
Så nu virker det, ved ikke helt hvad det var jeg ændrede, men nu virker det. Smuder du svar?
Avatar billede coderdk Praktikant
30. april 2005 - 16:09 #18
Yes yes :)
Avatar billede cmau Nybegynder
30. april 2005 - 16:10 #19
Tak :)
Avatar billede coderdk Praktikant
30. april 2005 - 16:13 #20
Ved ikke lige om denne virker, men jeg synes den er lidt pænere - Der er refactoret lidt og flyttet rundt - Den er også lidt kortere:

<?

    include('../../../sql.php');
    $img_id = $_GET['img_id'];
    $thumb = $_GET['thumb'];
 
    $query = mysql_query("SELECT * FROM hotornot WHERE id = '$img_id' AND img_accepted = 'yes'") or die(mysql_error());
 
    $mappe = "images/";
 
    if(mysql_num_rows($query) == 0)
    {
        header("Location:http://babegalleri.dk");
        exit;
    }
    else
    {
        $row = mysql_fetch_assoc($query);
 
        if($row['img_type'] == ".gif")
        {
            header('content-type: image/gif');
            $type = '.gif';
            $orig = imagecreatefromgif($mappe.$img_id.$type);
        }
        else
        {
            header('content-type: image/jpg');
            $type = '.jpg';
            $image = imagecreatefromjpeg($mappe.$img_id.$type);
        }
        $w = imagesx($orig);
        $h = imagesy($orig);
 
        if($thumb == "true")
        {
            $img_width = 130;
            $calculate = $img_width / $w;
            $img_height = round($h * $calculate,0);
         
            $newpic = imagecreatetruecolor($img_width,$img_height);
           
            imagecopyresampled($newpic,$orig,0,0,0,0,$img_width,$img_height,$w,$h);
        }
        else
        {
            $logo = imagecreatefromgif('logo.gif');
            $logo_width = imagesx( $logo );
            $logo_height = imagesy( $logo );
         
            $dest_x = $w - $logo_width;
            $dest_y = $h - $logo_height;
 
            imagecopymerge($orig, $logo, $dest_x, $dest_y, 0, 0, $logo_width, $logo_height, 100);
            imagedestroy( $logo );
        }

        if($row['img_type'] == ".gif")
        {
            imagegif($orig);
        }
        else
        {
            imagejpeg($orig);
        }
     
        imagedestroy($orig);
    }

?>
Avatar billede coderdk Praktikant
30. april 2005 - 16:14 #21
Typisk, så ser jeg en fejl ;)

<?

    include('../../../sql.php');
    $img_id = $_GET['img_id'];
    $thumb = $_GET['thumb'];
 
    $query = mysql_query("SELECT * FROM hotornot WHERE id = '$img_id' AND img_accepted = 'yes'") or die(mysql_error());
 
    $mappe = "images/";
 
    if(mysql_num_rows($query) == 0)
    {
        header("Location:http://babegalleri.dk");
        exit;
    }
    else
    {
        $row = mysql_fetch_assoc($query);
 
        if($row['img_type'] == ".gif")
        {
            header('content-type: image/gif');
            $type = '.gif';
            $orig = imagecreatefromgif($mappe.$img_id.$type);
        }
        else
        {
            header('content-type: image/jpg');
            $type = '.jpg';
            $orig = imagecreatefromjpeg($mappe.$img_id.$type);
        }
        $w = imagesx($orig);
        $h = imagesy($orig);
 
        if($thumb == "true")
        {
            $img_width = 130;
            $calculate = $img_width / $w;
            $img_height = round($h * $calculate,0);
         
            $newpic = imagecreatetruecolor($img_width,$img_height);
           
            imagecopyresampled($newpic,$orig,0,0,0,0,$img_width,$img_height,$w,$h);
        }
        else
        {
            $logo = imagecreatefromgif('logo.gif');
            $logo_width = imagesx( $logo );
            $logo_height = imagesy( $logo );
         
            $dest_x = $w - $logo_width;
            $dest_y = $h - $logo_height;
 
            imagecopymerge($orig, $logo, $dest_x, $dest_y, 0, 0, $logo_width, $logo_height, 100);
            imagedestroy( $logo );
        }

        if($row['img_type'] == ".gif")
        {
            imagegif($orig);
        }
        else
        {
            imagejpeg($orig);
        }
     
        imagedestroy($orig);
    }

?>
Avatar billede cmau Nybegynder
30. april 2005 - 16:22 #22
Avatar billede coderdk Praktikant
30. april 2005 - 16:25 #23
Gah, det er da også rigtigt! Pis os'! :) Prøv lige med denne, det er bare ikke så elegant ;P

<?

    include('../../../sql.php');
    $img_id = $_GET['img_id'];
    $thumb = $_GET['thumb'];

    $query = mysql_query("SELECT * FROM hotornot WHERE id = '$img_id' AND img_accepted = 'yes'") or die(mysql_error());

    $mappe = "images/";

    if(mysql_num_rows($query) == 0)
    {
        header("Location:http://babegalleri.dk");
        exit;
    }
    else
    {
        $row = mysql_fetch_assoc($query);

        if($row['img_type'] == ".gif")
        {
            header('content-type: image/gif');
            $type = '.gif';
            $orig = imagecreatefromgif($mappe.$img_id.$type);
        }
        else
        {
            header('content-type: image/jpg');
            $type = '.jpg';
            $orig = imagecreatefromjpeg($mappe.$img_id.$type);
        }
        $w = imagesx($orig);
        $h = imagesy($orig);

        if($thumb == "true")
        {
            $img_width = 130;
            $calculate = $img_width / $w;
            $img_height = round($h * $calculate,0);
       
            $newpic = imagecreatetruecolor($img_width,$img_height);
         
            imagecopyresampled($newpic,$orig,0,0,0,0,$img_width,$img_height,$w,$h);
            imagedestroy( $orig );
            $orig &= $newpic;
        }
        else
        {
            $logo = imagecreatefromgif('logo.gif');
            $logo_width = imagesx( $logo );
            $logo_height = imagesy( $logo );
       
            $dest_x = $w - $logo_width;
            $dest_y = $h - $logo_height;

            imagecopymerge($orig, $logo, $dest_x, $dest_y, 0, 0, $logo_width, $logo_height, 100);
            imagedestroy( $logo );
        }

        if($row['img_type'] == ".gif")
        {
            imagegif($orig);
        }
        else
        {
            imagejpeg($orig);
        }
   
        imagedestroy($orig);
    }

?>
Avatar billede cmau Nybegynder
30. april 2005 - 16:29 #24
Virker heller ikke med thumb.
Avatar billede coderdk Praktikant
30. april 2005 - 16:45 #26
Prøv lige at udkommentere header('content-type: linjen, eller bare gå tilbage til den der virkede ;) heheheh
Avatar billede coderdk Praktikant
30. april 2005 - 16:47 #27
Eller prøv at lave:

            $orig &= $newpic;

om til

            $orig = $newpic;

eller

            $orig = &$newpic;
Avatar billede cmau Nybegynder
30. april 2005 - 16:59 #28
Så nu virker det. Lavede det om til $orig = &$newpic;, men hvorfor skal der være & i?
Avatar billede coderdk Praktikant
30. april 2005 - 17:05 #29
Når du laver noget i PHP sådan:

  $var1 = '123';
  $var2 = $var1;
  $var2 = '456';
  echo "var1: $var1 var2: $var2";

$var2 = $var1 tager en kopi af $var1 - $var2 = &$var1; derimod skulle sætte adressen på $var2's pointer til det samme som $var1, altså:

  $var1 = '123';
  $var2 = &$var1;
  $var2 = '456';
  echo "var1: $var1 var2: $var2";

Her vil begge variable være det samme, for når du ændre én går ændringen igen i den anden variabel ;) De peger på det samme!
Avatar billede cmau Nybegynder
30. april 2005 - 17:16 #30
Ok :)
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