[php] Imagecopyresized probleem

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • kokorico
  • Registratie: Januari 2004
  • Laatst online: 22:42
Ik wil een thumb maken die uiteraard kleiner is van formaat dan origineel en met een x of y verschuiving. Mijn thumb moet vierkant zijn (50 x 50).

Stel het origineel is 350 breed en 300 hoog en als je daar en thumb van 50 x 50 van maakt vervormt het boeltje. Ik wil dat dan een thumb gemaakt wordt met een y verschijving van 25 = (breed - hoog ) / 2 = ( 350 - 300)/2

Ik denk dat dit moet gebeuren met imagecopyresized.
Hoe moet ik die variablen nu invullen in de functie? Op http://nl.php.net/manual/nl/function.imagecopyresized.php snap ik er niets van :(
code:
1
2
3
4
5
6
7
8
9
10
variablen:

$xverschuiving
$yverschuiving
$width //origineel
$height //origineel
$nwidth //thumb
$nheight //thumb

imagecopyresized($pic,$cpyImage,0,0,0,0,$width, $height, $nwidth, $nheight);

Acties:
  • 0 Henk 'm!

  • xander88
  • Registratie: September 2003
  • Laatst online: 28-02-2007
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
<?php 
if (!isset($image) || !ereg(".jpg",$image)){
    $image = "fotos/error.jpg";
}
if (getenv(SERVER_NAME)=="localhost") $func = "imagecreatetruecolor";
else $func = "imagecreate"; // hier is ook een nette oplossing voor
 #####################################################
 $size = @GetImageSize($image); 
 $width = $size[0]; 
 $height = $size[1]; 
 $type = $size[2]; 
 $scale = $scale/100; 
 //$newwidth = round($width*$scale); 
 //$newheight = round($height*$scale); 
 $newwidth = 150; 
 $newheight = $height*($newwidth/$width); 
 $arr_gd=get_extension_funcs ("gd");
  
 ############################################################### 
  
if ($type == 1) { 
    echo "GIF-format is no longer supported, please use PNG or JPEG."; 
} 
elseif ($type == 2) {
    header ("Content-type: image/jpeg"); 
    $src = imagecreatefromjpeg($image);
    $im=$func($newwidth,$newheight);
    imagecopyresized($im,$src,0,0,0,0,$newwidth,$newheight,$width,$height); 
    imagejpeg($im); 
    imagedestroy($im); 
} 
elseif ($type == 3) { 
    header ("Content-type: image/png"); 
    $src = imagecreatefrompng("$image"); 
    $im = $func($newwidth,$newheight);  
    imagecopyresized($im,$src,0,0,0,0,$newwidth,$newheight,$width,$height); 
    imagepng($im); 
    imagedestroy($im);
} 
else { 
    echo "Dieses Format wird nicht unterstüzt!"; 
} 
 ?>


Hier is mijn script. Ergens gevonden en aangepast.

Acties:
  • 0 Henk 'm!

  • T-MOB
  • Registratie: Maart 2001
  • Laatst online: 22:34
Sorry hoor, maar in het Manual staat als eerste voorbeeld hoe je een plaatje X-% verkleind. Met de gegevens (width en height) die je hebt lijkt het me een koekie om te bepalen hoeveel je plaatje kleiner moet worden (procentueel gezien)... [hint: $thumbsize/max($width, $height)].
Het scipt hierboven kun je ook gebruiken, dan moet je alleen de nieuwe breedte uitvogelen ipv de "shrink-factor". Met $newwidth op 50 zou je namelijk weleens plaatjes kunnen krijgen die hoger zijn dan 50px...

Regeren is vooruitschuiven


Acties:
  • 0 Henk 'm!

  • Skaah
  • Registratie: Juni 2001
  • Laatst online: 16-09 18:38
Uit: http://www.codebase.nl/index.php/command/viewcode/id/234
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
        function resize($width,$height)
        {
        // verander de groote van een afbeelding

                $dst_img = imagecreatetruecolor($width,$height);
                imagecopyresampled($dst_img,$this->img,0,0,0,0,$width,$height,$this->width,$this->height);

                $this->img = $dst_img;
                $this->updatemetadata();
        }

        function thumb($max_width,$max_height)
        {
        // maak een thumbnail van de afbeelding.
                if ((($this->width)> $max_width) || (($this->height) > $max_height))                {
                        if ($this->aspectratio > 1)
                        {
                                // plaatje is breder dan hoog, dus breedte als uitgangspunt.
                                $new_width  = $max_width;
                                $new_height = floor(($max_width * $this->height)/ ($this->width));
                        }
                        else
                        {
                                // plaatje is hoger dan breed, dus hoogte als uitgangspunt.
                                $new_height = $max_height;
                                $new_width  = floor($max_height / (($this->height) / ($this->width)));
                        }
                        $this->resize($new_width,$new_height);
                }
        }