PHP实现图片压缩的两则实例

这篇文章主要介绍了PHP实现图片压缩的两则实例,很有实用价值,值得借鉴学习,需要的朋友可以参考下。

本文介绍了PHP实现图片压缩的两种方法,读者可以根据具体应用参考或加以改进,以适应自身应用需求!废话不多说,主要代码部分如下:

实例1:

  1. <?php
  2. /**
  3. * desription 压缩图片
  4. * @param sting $imgsrc 图片路径
  5. * @param string $imgdst 压缩后保存路径
  6. */
  7. function image_png_size_add($imgsrc,$imgdst){
  8. list($width,$height,$type)=getimagesize($imgsrc);
  9. $new_width = ($width>600?600:$width)*0.9;
  10. $new_height =($height>600?600:$height)*0.9;
  11. switch($type){
  12. case 1:
  13. $giftype=check_gifcartoon($imgsrc);
  14. if($giftype){
  15. header('Content-Type:image/gif');
  16. $image_wp=imagecreatetruecolor($new_width, $new_height);
  17. $image = imagecreatefromgif($imgsrc);
  18. imagecopyresampled($image_wp, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
  19. imagejpeg($image_wp, $imgdst,75);
  20. imagedestroy($image_wp);
  21. }
  22. break;
  23. case 2:
  24. header('Content-Type:image/jpeg');
  25. $image_wp=imagecreatetruecolor($new_width, $new_height);
  26. $image = imagecreatefromjpeg($imgsrc);
  27. imagecopyresampled($image_wp, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
  28. imagejpeg($image_wp, $imgdst,75);
  29. imagedestroy($image_wp);
  30. break;
  31. case 3:
  32. header('Content-Type:image/png');
  33. $image_wp=imagecreatetruecolor($new_width, $new_height);
  34. $image = imagecreatefrompng($imgsrc);
  35. imagecopyresampled($image_wp, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
  36. imagejpeg($image_wp, $imgdst,75);
  37. imagedestroy($image_wp);
  38. break;
  39. }
  40. }
  41. /**
  42. * desription 判断是否gif动画
  43. * @param sting $image_file图片路径
  44. * @return boolean t 是 f 否
  45. */
  46. function check_gifcartoon($image_file){
  47. $fp = fopen($image_file,'rb');
  48. $image_head = fread($fp,1024);
  49. fclose($fp);
  50. return preg_match("/".chr(0x21).chr(0xff).chr(0x0b).'NETSCAPE2.0'."/",$image_head)?false:true;
  51. }
  52. ?>

实例2:

  1. <?php
  2. /*
  3. ----------------------------------------------------------------------
  4. 函数:调整图片尺寸或生成缩略图
  5. 返回:True/False
  6. 参数:
  7. $Image 需要调整的图片(含路径)
  8. $Dw=450 调整时最大宽度;缩略图时的绝对宽度
  9. $Dh=450 调整时最大高度;缩略图时的绝对高度
  10. $Type=1 1,调整尺寸; 2,生成缩略图
  11. $path='img/';//路径
  12. $phtypes=array(
  13. 'img/gif',
  14. 'img/jpg',
  15. 'img/jpeg',
  16. 'img/bmp',
  17. 'img/pjpeg',
  18. 'img/x-png'
  19. );
  20. Function Img($Image,$Dw=450,$Dh=450,$Type=1){
  21. IF(!File_Exists($Image)){
  22. Return False;
  23. }
  24. //如果需要生成缩略图,则将原图拷贝一下重新给$Image赋值
  25. IF($Type!=1){
  26. Copy($Image,Str_Replace(".","_x.",$Image));
  27. $Image=Str_Replace(".","_x.",$Image);
  28. }
  29. //取得文件的类型,根据不同的类型建立不同的对象
  30. $ImgInfo=GetImageSize($Image);
  31. Switch($ImgInfo[2]){
  32. Case 1:
  33. $Img = @ImageCreateFromGIF($Image);
  34. Break;
  35. Case 2:
  36. $Img = @ImageCreateFromJPEG($Image);
  37. Break;
  38. Case 3:
  39. $Img = @ImageCreateFromPNG($Image);
  40. Break;
  41. }
  42. //如果对象没有创建成功,则说明非图片文件
  43. IF(Empty($Img)){
  44. //如果是生成缩略图的时候出错,则需要删掉已经复制的文件
  45. IF($Type!=1){Unlink($Image);}
  46. Return False;
  47. }
  48. //如果是执行调整尺寸操作则
  49. IF($Type==1){
  50. $w=ImagesX($Img);
  51. $h=ImagesY($Img);
  52. $width = $w;
  53. $height = $h;
  54. IF($width>$Dw){
  55. $Par=$Dw/$width;
  56. $width=$Dw;
  57. $height=$height*$Par;
  58. IF($height>$Dh){
  59. $Par=$Dh/$height;
  60. $height=$Dh;
  61. $width=$width*$Par;
  62. }
  63. }ElseIF($height>$Dh){
  64. $Par=$Dh/$height;
  65. $height=$Dh;
  66. $width=$width*$Par;
  67. IF($width>$Dw){
  68. $Par=$Dw/$width;
  69. $width=$Dw;
  70. $height=$height*$Par;
  71. }
  72. }Else{
  73. $width=$width;
  74. $height=$height;
  75. }
  76. $nImg = ImageCreateTrueColor($width,$height); //新建一个真彩色画布
  77. ImageCopyReSampled($nImg,$Img,0,0,0,0,$width,$height,$w,$h);//重采样拷贝部分图像并调整大小
  78. ImageJpeg ($nImg,$Image); //以JPEG格式将图像输出到浏览器或文件
  79. Return True;
  80. //如果是执行生成缩略图操作则
  81. }Else{
  82. $w=ImagesX($Img);
  83. $h=ImagesY($Img);
  84. $width = $w;
  85. $height = $h;
  86. $nImg = ImageCreateTrueColor($Dw,$Dh);
  87. IF($h/$w>$Dh/$Dw){ //高比较大
  88. $width=$Dw;
  89. $height=$h*$Dw/$w;
  90. $IntNH=$height-$Dh;
  91. ImageCopyReSampled($nImg, $Img, 0, -$IntNH/1.8, 0, 0, $Dw, $height, $w, $h);
  92. }Else{ //宽比较大
  93. $height=$Dh;
  94. $width=$w*$Dh/$h;
  95. $IntNW=$width-$Dw;
  96. ImageCopyReSampled($nImg, $Img, -$IntNW/1.8, 0, 0, 0, $width, $Dh, $w, $h);
  97. }
  98. ImageJpeg ($nImg,$Image);
  99. Return True;
  100. }
  101. }
  102. ?>
  103. <html><body>
  104. <form method="post" enctype="multipart/form-data" name="form1">
  105. <table>
  106. <tr><td>上传图片</td></tr>
  107. <tr><td><input type="file" name="photo" size="20" /></td></tr>
  108. <tr><td><input type="submit" value="上传"/></td></tr>
  109. </table>
  110. 允许上传的文件类型为:<?=implode(', ',$phtypes)?></form>
  111. <?php
  112. if($_SERVER['REQUEST_METHOD']=='POST'){
  113. if (!is_uploaded_file($_FILES["photo"][tmp_name])){
  114. echo "图片不存在";
  115. exit();
  116. }
  117. if(!is_dir('img')){//路径若不存在则创建
  118. mkdir('img');
  119. }
  120. $upfile=$_FILES["photo"];
  121. $pinfo=pathinfo($upfile["name"]);
  122. $name=$pinfo['basename'];//文件名
  123. $tmp_name=$upfile["tmp_name"];
  124. $file_type=$pinfo['extension'];//获得文件类型
  125. $showphpath=$path.$name;
  126. if(in_array($upfile["type"],$phtypes)){
  127. echo "文件类型不符!";
  128. exit();
  129. }
  130. if(move_uploaded_file($tmp_name,$path.$name)){
  131. echo "成功!";
  132. Img($showphpath,100,800,2);
  133. }
  134. echo "<img src=\"".$showphpath."\" />";
  135. }
  136. ?>
  137. </body>
  138. </html>