+ -
当前位置:首页 → 问答吧 → php 实现图片翻转,有8种方向

php 实现图片翻转,有8种方向

时间:2011-10-04

来源:互联网

函数名:zhuanxiang($src,$fx,1)

参数设置:$src--原始图片地址;$fx--图片转向,默认1,1,2--向上(1左2右,其他组相同)3,4--转左,5,6--下,7,8--转右

功能:根据$fx参数设置图片显示的方向,有8种

测试的图片:http://ww2.sinaimg.cn/bmiddle/4d0d0169jw1dlpkalb734j.jpg

  1. <?php
  2. /*
  3. 函数名:zhuanxiang($src,$fx,1),实现图片8个方向展示的效果
  4. 参数设置:$src--原始图片地址;$fx--图片转向,默认1,1,2--向上(1左2右,其他组相同)3,4--转左,5,6--下,7,8--转右
  5. 错误提示:原图片地址确保正确,$fx:1-8
  6. */
  7. function zhuanxiang($src,$fx=1){
  8. //图片相关信息数组
  9. $arr=@getimagesize($src);
  10. if(!$arr)die('图片参数存在问题');
  11. switch($arr[2]){
  12. case 1:$img=imagecreatefromgif($src);break;
  13. case 2:$img=imagecreatefromjpeg($src);break;
  14. case 3:$img=imagecreatefrompng($src);break;
  15. default:die('不支持的图片类型');
  16. }
  17. //获得宽高
  18. $k=imagesx($img);
  19. $g=imagesy($img);

  20. //echo 'k:'.$k.'-g:'.$g.'<br>';
  21. //创建图片画布,根据方向,设置宽高$hk,$hg

  22. switch($fx){
  23. //向上
  24. case 1:$hk=$k;$hg=$g;break;
  25. case 2:$hk=$k;$hg=$g;break;
  26. //转左
  27. case 3:$hk=$g;$hg=$k;break;
  28. case 4:$hk=$g;$hg=$k;break;
  29. //向下
  30. case 5:$hk=$k;$hg=$g;break;
  31. case 6:$hk=$k;$hg=$g;break;
  32. //转右
  33. case 7:$hk=$g;$hg=$k;break;
  34. case 8:$hk=$g;$hg=$k;break;
  35. default:die('方向参数错了');
  36. }
  37. $img2=imagecreatetruecolor($hk,$hg);
  38. //根据原图片宽高,取像素得到垂直图像
  39. $wid=$k-1;
  40. $hid=$g-1;
  41. for($y=0;$y<$g;$y++){
  42. //取一行的图像
  43. for($x=0;$x<$k;$x++){
  44. switch($fx){
  45. case 1:imagecopyresized($img2,$img,$x,$y,$x,$y,1,1,1,1);break;
  46. case 2:imagecopyresized($img2,$img,$wid-$x,$y,$x,$y,1,1,1,1);break;
  47. case 3:imagecopyresized($img2,$img,$hid-$y,$x,$x,$y,1,1,1,1);break;
  48. case 4:imagecopyresized($img2,$img,$hid-$y,$wid-$x,$x,$y,1,1,1,1);break;
  49. case 5:imagecopyresized($img2,$img,$wid-$x,$hid-$y,$x,$y,1,1,1,1);break;
  50. case 6:imagecopyresized($img2,$img,$x,$hid-$y,$x,$y,1,1,1,1);break;
  51. case 7:imagecopyresized($img2,$img,$y,$wid-$x,$x,$y,1,1,1,1);break;
  52. case 8:imagecopyresized($img2,$img,$y,$x,$x,$y,1,1,1,1);break;
  53. default:die('方向参数不正确');
  54. }//end switch($fx)

  55. }//end for($j=0;$j<$k;$j++)
  56. }//end for($i=0;$i<$g;$i++)
  57. //根据类型输出图片
  58. switch($arr[2]){
  59. case 1:header('content-type:image/gif');imagegif($img2,false,100);break;
  60. case 2:header('content-type:image/jpeg');imagejpeg($img2,false,100);break;
  61. case 3:header('content-type:image/png');imagepng($img2,false,100);break;
  62. }

  63. }//function zhuanxiang($src,$fx=0)





  64. //测试例子
  65. set_time_limit(0);


  66. //大图地址
  67. $src='http://ww2.sinaimg.cn/bmiddle/4d0d0169jw1dlpkalb734j.jpg';
  68. //随机方向
  69. $fx=rand(1,8);
  70. //转向输出图片
  71. zhuanxiang($src,$fx);



  72. ?>
复制代码

作者: 阿修罗   发布时间: 2011-10-04

谢谢分享

作者: tangxuewu   发布时间: 2011-10-04