PNG,GIF缩略图背景透明函数.(都支持,就差一个缺点了[黑色的处理])
突然需要这个功能,找了别人的一个函数来用,才发现gif和png北京都是黑色.
然后就改,改到现在都可以实现了.
但就是gif的时候,对黑色的处理不好.把图片的黑色也给透明了.
有哪位高手解决下这个问题.
然后就改,改到现在都可以实现了.
但就是gif的时候,对黑色的处理不好.把图片的黑色也给透明了.
有哪位高手解决下这个问题.
<?PHP
/*
$source_img = "../base_img/index.jpg";
$target_dir='../base_img/';
$new_width=500;
$new_height=500;
$if_cut=0;
$target_name='HanroadClass';
$img=new HanroadClass;
$img->HrResize($source_img,$target_dir,$target_name,$new_width,$new_height,$if_cut);
*/
class HanroadClass
{
/**//**********************
利用PHP的GD库生成缩略图。
支持图片格式:jpg,gif,png
$source_img: 源图象完整路径
$target_dir: 目标图象目录
$target_name: 目标图象名称
$new_width: 目标图象宽
$new_height: 目标图象高
$if_cut: 是否裁图
1(裁图): 裁图则按设置的大小生成目标图象
0(不裁): 不裁则按比例生成目标图象
**********************/
function HrResize($source_img,$target_dir,$target_name,$new_width,$new_height,$if_cut) {
//图片类型
$img_type = strtolower(substr(strrchr($source_img,"."),1));
//图象的完整目标路径
$tar_url = $target_dir."/".$target_name.".".$img_type;
//初始化图象
if($img_type=="jpg")$temp_img = imagecreatefromjpeg($source_img);
if($img_type=="gif")$temp_img = imagecreatefromgif($source_img);
if($img_type=="png")$temp_img = imagecreatefrompng($source_img);
//原始图象的宽和高
$old_width = imagesx($temp_img);
$old_height = imagesy($temp_img);
//改变前后的图象的比例
$new_ratio = $new_width/$new_height;
$old_ratio = $old_width/$old_height;
//生成新图象的参数
//情况一:裁图 则按设置的大小生成目标图象
if($if_cut=="1"){
$new_width = $new_width;
$new_height = $new_height;
//高度优先
if($old_ratio>=$new_ratio){
$old_width = $old_height*$new_ratio;
$old_height = $old_height;
}else{//宽度优先
$old_width = $old_width;
$old_height = $old_width/$new_ratio;
}
}else{//情况二:不裁图 则按比例生成目标图象
$old_width = $old_width;
$old_height = $old_height;
//高度优先
if($old_ratio>=$new_ratio) {
$new_width = $new_width;
$new_height = $new_width/$old_ratio;
}else{//宽度优先
$new_width = $new_height*$old_ratio;
$new_height = $new_height;
}
}
//生成新图片
$new_img = imagecreatetruecolor($new_width,$new_height);
if($img_type=="gif"){
imagealphablending($new_img, false);
imagesavealpha($new_img, true);
}
if($img_type=="png"){
imagesavealpha($temp_img,true);
imagealphablending($new_img,false);
imagesavealpha($new_img,true);
}
imagecopyresampled($new_img,$temp_img,0,0,0,0,$new_width,$new_height,$old_width,$old_height);
if($img_type=="jpg")imagejpeg($new_img,$tar_url);
if($img_type=="gif"){
$bgcolor=imagecolorallocate($new_img,0,0,0);
$bgcolor=imagecolortransparent($new_img,$bgcolor);
$bgcolor=imagecolorallocatealpha($new_img, 0, 0, 0,127);
imagefill($new_img, 0, 0, $bgcolor);
imagegif($new_img,$tar_url);
}
if($img_type=="png")imagepng($new_img,$tar_url);
imagedestroy($source_img);
imagedestroy($new_img);
}
}
?>
...全文
相关推荐
php缩放gif和png图透明背景变成黑色的解决方法
在PHP图像处理中,遇到一个常见问题是在缩放GIF或PNG图片时,如果使用`imagecreatetruecolor`和`imagecopyresampled`函数组合操作,原本透明的背景可能会变成黑
支持png透明图片的php生成缩略图类分享
本文将详细介绍一个支持PNG透明图片的PHP生成缩略图类,该类基于GD2图形库,能够处理PNG透明效果,避免背景填充问题。
支持png透亮图片的php生成缩略图类分享_.docx
这个类提供了一个方便的方法,使得开发者能够轻松地为PNG图像生成带有透明度的缩略图,而无需担心黑色背景填充或其他常见的透明度问题。
PHP使用imagick读取PDF生成png缩略图的两种方法
对于PNG图像,由于其支持透明度,处理时需要特别注意,以免背景变为黑色或其他非预期颜色。此外,生成的缩略图可能需要进行优化,以降低文件大小,提高网页加载速度。
C#源码图像操作图片缩略图
透明通道处理同样关键,特别是PNG格式图像含Alpha通道时,必须启用PixelFormat.Format32bppArgb像素格式并设置Clear画布背景为透明色,否则将默认填充黑色背景造成显示异常。


基础编程
