php生成高清缩略图实例详解
本文实例讲述了php生成高清缩略图的方法。分享给大家供大家参考,具体如下:
在使用php的函数生成缩略图的使用,缩略图很多情况下都会失真,这个时候需要有一些对应的解决方法。
1.用imagecreatetruecolor和imageCopyreSampled函数分别取代imagecreate和imagecopyresized
2.给imagejpeg的第三个参数带上100(例:imagejpeg($ni,$toFile,100))
下面是具体的函数
functionCreateSmallImage($OldImagePath,$NewImagePath,$NewWidth=154,$NewHeight=134)
{
//取出原图,获得图形信息getimagesize参数说明:0(宽),1(高),2(1gif/2jpg/3png),3(width="638"height="340")
$OldImageInfo=getimagesize($OldImagePath);
if($OldImageInfo[2]==1)$OldImg=@imagecreatefromgif($OldImagePath);
elseif($OldImageInfo[2]==2)$OldImg=@imagecreatefromjpeg($OldImagePath);
else$OldImg=@imagecreatefrompng($OldImagePath);
//创建图形,imagecreate参数说明:宽,高
$NewImg=imagecreatetruecolor($NewWidth,$NewHeight);
//创建色彩,参数:图形,red(0-255),green(0-255),blue(0-255)
$black=ImageColorAllocate($NewImg,0,0,0);//黑色
$white=ImageColorAllocate($NewImg,255,255,255);//白色
$red=ImageColorAllocate($NewImg,255,0,0);//红色
$blue=ImageColorAllocate($NewImg,0,0,255);//蓝色
$other=ImageColorAllocate($NewImg,0,255,0);
//新图形高宽处理
$WriteNewWidth=$NewHeight*($OldImageInfo[0]/$OldImageInfo[1]);//要写入的高度
$WriteNewHeight=$NewWidth*($OldImageInfo[1]/$OldImageInfo[0]);//要写入的宽度
//这样处理图片比例会失调,但可以填满背景
if($OldImageInfo[0]/$NewWidth>$org_info[1]/$NewHeight){
$WriteNewWidth=$NewWidth;
$WriteNewHeight=$NewWidth/($OldImageInfo[0]/$OldImageInfo[1]);
}else{
$WriteNewWidth=$NewHeight*($OldImageInfo[0]/$OldImageInfo[1]);
$WriteNewHeight=$NewHeight;
}
//以$NewHeight为基础,如果新宽小于或等于$NewWidth,则成立
if($WriteNewWidth<=$NewWidth){
$WriteNewWidth=$WriteNewWidth;//用判断后的大小
$WriteNewHeight=$NewHeight;//用规定的大小
$WriteX=floor(($NewWidth-$WriteNewWidth)/2);//在新图片上写入的X位置计算
$WriteY=0;
}else{
$WriteNewWidth=$NewWidth;//用规定的大小
$WriteNewHeight=$WriteNewHeight;//用判断后的大小
$WriteX=0;
$WriteY=floor(($NewHeight-$WriteNewHeight)/2);//在新图片上写入的X位置计算
}
//旧图形缩小后,写入到新图形上(复制),imagecopyresized参数说明:新旧,新xy旧xy,新宽高旧宽高
@imageCopyreSampled($NewImg,$OldImg,$WriteX,$WriteY,0,0,$WriteNewWidth,$WriteNewHeight,$OldImageInfo[0],$OldImageInfo[1]);
//保存文件
//@imagegif($NewImg,$NewImagePath);
@imagejpeg($NewImg,$NewImagePath,100);
//结束图形
@imagedestroy($NewImg);
}
CreateSmallImage("./images/jiexie.jpg","./images/jiexie.small.jpg",200,300);
CreateSmallImage("./images/jiexie.jpg","./images/jiexie.middle.jpg",400,500);
希望本文所述对大家php程序设计有所帮助。