A community in which webmasters can ask for help with topics such as PHP coding , MySQL , IT jobs, web design, IT security.
Current location:homephp forumphp talk in 2009 yearphp resize script doesn't work for transparent gif's - page 1
User InfoPosts
php resize script doesn't work for transparent gif's#1
How Can I get this working for transparent gif(s and png(s?

function resizeImage($image,$newImage,$target_width,$target_height, $type="") {
if (is_file($image)) {
if($type == ".gif"){
$image_org=@imagecreatefromgif($image);
}else{
$image_org=@imagecreatefromjpeg($image);
}
if ($image_org) {
list($w,$h,$type,$attr) = getimagesize($image);
$factor=C_Image_Custom::calcRescaleFactor($w,$h,$target_width,$target_height);

if ($factor>1) {
$image_w = $w / $factor;
$image_h = $h / $factor;
} else {
$image_w = $w;
$image_h = $h;
}

//Note: PHP with GD2.0 required for imagecreatetruecolor
$img_copy = imagecreatetruecolor($image_w, $image_h);
imagecopyresampled($img_copy, $image_org, 0, 0, 0, 0, $image_w, $image_h, $w, $h);

if (@imagejpeg($img_copy, $newImage, 80)) {
chmod($newImage,0777);
} else {
echo("<b>Error: </b>Unable to create image $newImage. Check directory permissions.");
}

imagedestroy($image_org);
imagedestroy($img_copy);
}
}

posted date: 2009-04-06 23:35:00


Re: php resize script doesn't work for transparent gif's#2
I had made out the solution of this problem. click to view my topic...

hope that hepls.

posted date: 2009-04-06 23:35:01


Re: php resize script doesn't work for transparent gif's#3
It looks like you(re only outputting to jpeg - which doesn(t have transparency. If you want to output the transparency, you need to output a gif or png.If you want to replace the transparency with a colour, I think you want the php function imagecolorallocatealpha

posted date: 2009-04-07 00:40:00


Re: php resize script doesn't work for transparent gif's#4
Can you give any more information of what is happening instead of making transparent gifs?

posted date: 2009-04-07 00:41:00


Re: php resize script doesn't work for transparent gif's#5
Why only a jpeg?This is also for gif:if($type == ".gif"){ $image_org=@imagecreatefromgif($image); }else{ $image_org=@imagecreatefromjpeg($image); }

posted date: 2009-04-07 00:46:00


Re: php resize script doesn't work for transparent gif's#6
That's the input image, the output is JPEG only, look at this line: "if (@imagejpeg($img_copy, $newImage, 80)) {".

posted date: 2009-04-07 00:53:00


Re: php resize script doesn't work for transparent gif's#7
This function works perfectly for me for resizing jpg(s and transparent (or not) gif(s:function resizeImage($originalImage, $toWidth, $toHeight, $isJPG){ // Get the original geometry and calculate scales list($width, $height) = getimagesize($originalImage); $xscale = $width / $toWidth; $yscale = $height / $toHeight; // Recalculate new size with default ratio if ($yscale > $xscale) { $new_width = round($width * (1 / $yscale)); $new_height = round($height * (1 / $yscale)); } else { $new_width = round($width * (1 / $xscale)); $new_height = round($height * (1 / $xscale)); } // Resize the original image if ($isJPG) { $imageResized = imagecreatetruecolor($new_width, $new_height); $imageTmp = imagecreatefromjpeg($originalImage); imagecopyresampled($imageResized, $imageTmp, 0, 0, 0, 0, $new_width, $new_height, $width, $height); } else { //$imageResized = imagecreatetruecolor($new_width, $new_height); //$imageTmp = imagecreatefromgif ($originalImage); //imagecopyresampled($imageResized, $imageTmp, 0, 0, 0, 0, $new_width, $new_height, $width, $height); # what follows is for resizing a gif, transparent or not # http://ru2.php.net/imagecopyresampled # load/create images $imageTmp = imagecreatefromgif($originalImage); $imageResized = imagecreatetruecolor($new_width, $new_height); imagealphablending($imageResized, false); # get and reallocate transparency-color $transindex = imagecolortransparent($imageTmp); if ($transindex >= 0) { $transcol = imagecolorsforindex($imageTmp, $transindex); $transindex = imagecolorallocatealpha( $imageResized, $transcol[(red(], $transcol[(green(], $transcol[(blue(], 127 ); imagefill($imageResized, 0, 0, $transindex); } # resample imagecopyresampled($imageResized, $imageTmp, 0, 0, 0, 0, $new_width, $new_height, $width, $height); # restore transparency if ($transindex >= 0) { imagecolortransparent($imageResized, $transindex); for ($y = 0; $y < $new_height; ++$y) { for ($x = 0; $x < $new_width; ++$x) { if (((imagecolorat($imageResized, $x, $y) >> 24) & 0x7F) >= 100) { imagesetpixel( $imageResized, $x, $y, $transindex ); } } } } # save GIF imagetruecolortopalette($imageResized, true, 255); imagesavealpha($imageResized, false); } return $imageResized;}The original function is from PhpToys 1.0, and the part that works with transparent .gifs comes from this PHP docs comment.

posted date: 2009-05-11 20:41:00


Re: php resize script doesn't work for transparent gif's#8
i had the same problem, transparency just don(t work for PNG and when it work with PNG it just don(t with GIF, I(ve been looking all day for a solution till i found this function "Maxim(s, smart resize image"$info = getimagesize($file);switch ( $info[2] ) { case IMAGETYPE_GIF: $image = imagecreatefromgif($file); break; case IMAGETYPE_JPEG: $image = imagecreatefromjpeg($file); break; case IMAGETYPE_PNG: $image = imagecreatefrompng($file); break; default: return false;}# This is the resizing/resampling/transparency-preserving magic$image_resized = imagecreatetruecolor( $final_width, $final_height );if ( ($info[2] == IMAGETYPE_GIF) || ($info[2] == IMAGETYPE_PNG) ) { $transparency = imagecolortransparent($image); if ($transparency >= 0) { $transparent_color = imagecolorsforindex($image, $trnprt_indx); $transparency = imagecolorallocate($image_resized, $trnprt_color[(red(], $trnprt_color[(green(], $trnprt_color[(blue(]); imagefill($image_resized, 0, 0, $transparency); imagecolortransparent($image_resized, $transparency); } elseif ($info[2] == IMAGETYPE_PNG) { imagealphablending($image_resized, false); $color = imagecolorallocatealpha($image_resized, 0, 0, 0, 127); imagefill($image_resized, 0, 0, $color); imagesavealpha($image_resized, true); }}imagecopyresampled($image_resized, $image, 0, 0, 0, 0, $final_width, $final_height, $width_old, $height_old);There is just small errors on some variables, so you have to assign them as below to remove errors for $trnprt_indx and $trnprt_color$trnprt_color[(red(] = 255;$trnprt_color[(green(] = 255;$trnprt_color[(blue(] = 255;$trnprt_indx = 127;Hope this will help you

posted date: 2015-02-21 09:25:00


Re: php resize script doesn't work for transparent gif's#9
This does what you need it to for gif's and png's. Nice solution, thanks for sharing.

posted date: 2015-07-26 12:35:00


select page: « 1 »
Copyright ©2008-2017 www.momige.com, all rights reserved.