Ik heb het onderstaande script gesprokkeld wat van een plaatje wat al online staat een thumb maakt. Alles werkt prima, alleen bij de png en de gif maakt hij de thumb zwart. Kan iemand zien wat ik verkeerd doe?
<?php
if (isset($_POST['make_thumb'])){

$in_filename = $_POST['thumb_name'];
$in_filename =str_replace("_thumb","",$in_filename);

$ext = end(explode('.', $in_filename));


copy($dir.$in_filename,$dir.$in_filename = str_replace(".","_thumb.",$in_filename));


if($ext=="jpg" || $ext=="jpeg" )
{
$image = imagecreatefromjpeg($dir.$in_filename);

}
else if($ext=="png")
{
$image = imagecreatefrompng($dir.$in_filename);

}
else
{
$image = imagecreatefromgif($dir.$in_filename);
}



list($width, $height) = getimagesize($dir.$in_filename);



if ($height > $width){

$newwidth=$thumb_width;
$newheight=($newwidth*$height)/$width;

if($newheight < $thumb_height){

$newheight=$thumb_height;
$newwidth=($newheight*$width)/$height;
}
}

if($width == $height){

$newwidth=$thumb_width;
$newheight=$thumb_height;
}



if ($height < $width){

$newheight=$thumb_height;
$newwidth=($newheight*$width)/$height;

if($newwidth < $thumb_width){

$newwidth=$thumb_width;
$newheight=($newwidth*$height)/$width;
}

}

//hier wordt gekeken wat het type van het bestand is, jpg, jpeg, png of gif




$new_image = imagecreatetruecolor($newwidth, $newheight);
//hier worden de afmetingen van de thumb daadwerkelijk aangepast


imagecopyresampled($new_image,$image,0,0,0,0,$newwidth,$newheight,$width,$height);

/* Uncomment in case you want it also outputted
header('Content-Type: image/jpeg');
imagejpeg($new_image);
*/

imagejpeg($new_image, $dir.$in_filename,100);

?><div class="msg" id="msg">
<p>Thumbnail <b>created</b>.</p>
</div><?php


}
Mebus VG

Thanks for the quick reaction, I tried to implement your sollution. Now i get a completely transparant picture, this is my code:

<?php

if (isset($_POST['make_thumb'])){

$in_filename = $_POST['thumb_name'];
$in_filename =str_replace("_thumb","",$in_filename);

$ext = end(explode('.', $in_filename));


copy($dir.$in_filename,$dir.$in_filename = str_replace(".","_thumb.",$in_filename));


list($width, $height) = getimagesize($dir.$in_filename);



if ($height > $width){

$newwidth=$thumb_width;
$newheight=($newwidth*$height)/$width;

if($newheight < $thumb_height){

$newheight=$thumb_height;
$newwidth=($newheight*$width)/$height;
}
}

if($width == $height){

if($thumb_width > $thumb_height){
$newwidth=$thumb_width;
$newheight=$thumb_width;
}else{
$newwidth=$thumb_height;
$newheight=$thumb_height;
}}



if ($height < $width){

$newheight=$thumb_height;
$newwidth=($newheight*$width)/$height;

if($newwidth < $thumb_width){

$newwidth=$thumb_width;
$newheight=($newwidth*$height)/$width;
}

}


$thumb = imagecreatetruecolor($newwidth, $newheight);
//hier worden de afmetingen van de thumb daadwerkelijk aangepast

imagealphablending($thumb, false);

imagesavealpha($thumb, true);

$transparent = imagecolorallocatealpha($thumb, 255, 255, 255, 127);
imagefilledrectangle($thumb, 0, 0, $newwidth, $newheight, $transparent);


switch($ext){
case 'jpeg':
case 'jpg':
$image = imagecreatefromjpeg($dir.$in_filename);
break;
case 'gif':
$image = imagecreatefromgif($dir.$in_filename);
break;
case 'png':
$image = imagecreatefrompng($dir.$in_filename);
break;
}

imagealphablending($image, true);

imagecopyresampled($thumb, $image,0,0,0,0,$newwidth,$newheight,$width,$height);

/* Uncomment in case you want it also outputted
header('Content-Type: image/jpeg');
imagejpeg($new_image);
*/

switch($ext){
case 'jpeg':
case 'jpg':
imagejpeg($thumb, $dir.$in_filename);
break;
case 'gif':
imagegif($thumb, $dir.$in_filename);
break;
case 'png':
imagepng($thumb, $dir.$in_filename);
break;
}?>

Reageren