PHP实现图片压缩的两则实例
这篇文章主要介绍了PHP实现图片压缩的两则实例,很有实用价值,值得借鉴学习,需要的朋友可以参考下。
本文介绍了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=1 1,调整尺寸; 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>