本文介绍了PHP实现图片压缩的两种方法,读者可以根据具体应用参考或加以改进,以适应自身应用需求!废话不多说,主要代码部分如下:
实例1:
<?php /** * desription 压缩图片 * @param sting $imgsrc 图片路径 * @param string $imgdst 压缩后保存路径 */function image_png_size_add($imgsrc,$imgdst){ list($width,$height,$type)=getimagesize($imgsrc); $new_width = ($width>600?600:$width)*0.9; $new_height =($height>600?600:$height)*0.9; switch($type){ case 1: $giftype=check_gifcartoon($imgsrc); if($giftype){ header("Content-Type:image/gif"); $image_wp=imagecreatetruecolor($new_width, $new_height); $image = imagecreatefromgif($imgsrc); imagecopyresampled($image_wp, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height); imagejpeg($image_wp, $imgdst,75); imagedestroy($image_wp); } break; case 2: header("Content-Type:image/jpeg"); $image_wp=imagecreatetruecolor($new_width, $new_height); $image = imagecreatefromjpeg($imgsrc); imagecopyresampled($image_wp, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height); imagejpeg($image_wp, $imgdst,75); imagedestroy($image_wp); break; case 3: header("Content-Type:image/png"); $image_wp=imagecreatetruecolor($new_width, $new_height); $image = imagecreatefrompng($imgsrc); imagecopyresampled($image_wp, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height); imagejpeg($image_wp, $imgdst,75); imagedestroy($image_wp); break; } } /** * desription 判断是否gif动画 * @param sting $image_file图片路径 * @return boolean t 是 f 否 */function check_gifcartoon($image_file){ $fp = fopen($image_file,"rb"); $image_head = fread($fp,1024); fclose($fp); return preg_match("/".chr(0x21).chr(0xff).chr(0x0b)."NETSCAPE2.0"."/",$image_head)?false:true; } ?>实例2:
<?php/*----------------------------------------------------------------------函数:调整图片尺寸或生成缩略图返回:True/False参数:$Image需要调整的图片(含路径)$Dw=450调整时最大宽度;缩略图时的绝对宽度$Dh=450调整时最大高度;缩略图时的绝对高度$Type=11,调整尺寸; 2,生成缩略图$path="img/";//路径$phtypes=array("img/gif","img/jpg","img/jpeg","img/bmp","img/pjpeg","img/x-png");Function Img($Image,$Dw=450,$Dh=450,$Type=1){IF(!File_Exists($Image)){Return False;}//如果需要生成缩略图,则将原图拷贝一下重新给$Image赋值IF($Type!=1){Copy($Image,Str_Replace(".","_x.",$Image));$Image=Str_Replace(".","_x.",$Image);}//取得文件的类型,根据不同的类型建立不同的对象$ImgInfo=GetImageSize($Image);Switch($ImgInfo[2]){Case 1:$Img = @ImageCreateFromGIF($Image);Break;Case 2:$Img = @ImageCreateFromJPEG($Image);Break;Case 3:$Img = @ImageCreateFromPNG($Image);Break;}//如果对象没有创建成功,则说明非图片文件IF(Empty($Img)){//如果是生成缩略图的时候出错,则需要删掉已经复制的文件IF($Type!=1){Unlink($Image);}Return False;}//如果是执行调整尺寸操作则IF($Type==1){$w=ImagesX($Img);$h=ImagesY($Img);$width = $w;$height = $h;IF($width>$Dw){ $Par=$Dw/$width; $width=$Dw; $height=$height*$Par; IF($height>$Dh){ $Par=$Dh/$height; $height=$Dh; $width=$width*$Par; }}ElseIF($height>$Dh){ $Par=$Dh/$height; $height=$Dh; $width=$width*$Par; IF($width>$Dw){ $Par=$Dw/$width; $width=$Dw; $height=$height*$Par; }}Else{ $width=$width; $height=$height;}$nImg = ImageCreateTrueColor($width,$height); //新建一个真彩色画布ImageCopyReSampled($nImg,$Img,0,0,0,0,$width,$height,$w,$h);//重采样拷贝部分图像并调整大小ImageJpeg ($nImg,$Image); //以JPEG格式将图像输出到浏览器或文件Return True;//如果是执行生成缩略图操作则}Else{$w=ImagesX($Img);$h=ImagesY($Img);$width = $w;$height = $h;$nImg = ImageCreateTrueColor($Dw,$Dh);IF($h/$w>$Dh/$Dw){ //高比较大 $width=$Dw; $height=$h*$Dw/$w; $IntNH=$height-$Dh; ImageCopyReSampled($nImg, $Img, 0, -$IntNH/1.8, 0, 0, $Dw, $height, $w, $h);}Else{ //宽比较大 $height=$Dh; $width=$w*$Dh/$h; $IntNW=$width-$Dw; ImageCopyReSampled($nImg, $Img, -$IntNW/1.8, 0, 0, 0, $width, $Dh, $w, $h);}ImageJpeg ($nImg,$Image);Return True;}}?><html><body><form method="post" enctype="multipart/form-data" name="form1"> <table><tr><td>上传图片</td></tr><tr><td><input type="file" name="photo" size="20" /></td></tr> <tr><td><input type="submit" value="上传"/></td></tr> </table> 允许上传的文件类型为:<?=implode(", ",$phtypes)?></form><?php if($_SERVER["REQUEST_METHOD"]=="POST"){if (!is_uploaded_file($_FILES["photo"][tmp_name])){ echo "图片不存在"; exit();}if(!is_dir("img")){//路径若不存在则创建 mkdir("img");}$upfile=$_FILES["photo"]; $pinfo=pathinfo($upfile["name"]);$name=$pinfo["basename"];//文件名$tmp_name=$upfile["tmp_name"];$file_type=$pinfo["extension"];//获得文件类型$showphpath=$path.$name;if(in_array($upfile["type"],$phtypes)){ echo "文件类型不符!"; exit(); }if(move_uploaded_file($tmp_name,$path.$name)){echo "成功!"; Img($showphpath,100,800,2);}echo "<img src="".$showphpath."" />"; }?></body></html>