翼度科技»论坛 编程开发 PHP 查看内容

PHP实现图片旋转的方法详解

5

主题

5

帖子

15

积分

新手上路

Rank: 1

积分
15
最近有一个需求需要将前端上传过来的图片进行逆时针旋转90°,这个主要需要使用到php的imagerotate方法对于图片进行旋转,具体实现方法如下:
  1. <?php

  2. namespace common\traits;

  3. use Yii;
  4. use yii\helpers\FileHelper;

  5. /**
  6. * 图片旋转处理trait
  7. *
  8. * @author wangjian
  9. * @since 1.0
  10. */
  11. class ImageRotate
  12. {

  13.     /**
  14.      * base64图片旋转
  15.      * @param $image 需要旋转的base64图片
  16.      * @param string $rotate 逆时针旋转角度
  17.      * @param false $savePath 保存的图片路径,false返回base64格式
  18.      */
  19.     public static function base64Rotate($image, $rotate = '90', $savePath = false)
  20.     {
  21.         if (empty($image)) {
  22.             return false;
  23.         }
  24.         if (preg_match('/^(data:\s*image\/(\w+);base64,)/', $image, $result)) {
  25.             $type = $result[2];
  26.             //设置临时目录
  27.             $temporaryPath = '/tmp/';
  28.             $temporaryPath = dirname(Yii::getAlias('@common')) . '/web' . $temporaryPath;
  29.             FileHelper::createDirectory($temporaryPath);

  30.             //将原图保存到零食目录
  31.             $temporaryImage = date('YmdHis') . rand(1000, 9999) . '.' . $type;
  32.             if (file_put_contents($temporaryPath . $temporaryImage, base64_decode(str_replace($result[1], '', $image)))) {
  33.                 $newImage = self::rotateImage($temporaryPath . $temporaryImage, $rotate); //旋转图片
  34.                 //删除临时文件
  35.                 @unlink($temporaryPath . $temporaryImage);

  36.                 ob_start();
  37.                 if ($savePath === false) { //返回base
  38.                     imagepng($newImage);
  39.                     $imageString = $result[1] . base64_encode(ob_get_contents());
  40.                     @unlink($newImage);
  41.                 } else {
  42.                     $imageString = imagepng($newImage, $savePath);
  43.                 }
  44.                 ob_end_clean();

  45.                 return $imageString;
  46.             }
  47.         }

  48.         return false;
  49.     }

  50.     /**
  51.      * 本地图片旋转
  52.      * @param $image 需要旋转的本地图片
  53.      * @param string $rotate 逆时针旋转角度
  54.      * @param false $savePath 保存的图片路径,false返回替换原图
  55.      */
  56.     public static function imageRotate($image, $rotate = '90', $savePath = false)
  57.     {
  58.         if (empty($image)) {
  59.             return false;
  60.         }
  61.         //旋转图片
  62.         $newImage = self::rotateImage($image, $rotate);
  63.         ob_start();
  64.         if ($savePath === false) {
  65.             //替换原图
  66.             $url = $image;
  67.         } else {
  68.             $url = $savePath;
  69.         }
  70.         $imageString = imagepng($newImage, $url);
  71.         ob_end_clean();
  72.         return $imageString;
  73.     }

  74.     /**
  75.      * @param $file 需要旋转的图片
  76.      * @param $rotate 逆时针旋转角度
  77.      */
  78.     private static function rotateImage($file, $rotate)
  79.     {
  80.         $imageSize = getimagesize($file);
  81.         $imageSize = explode('/', $imageSize['mime']);
  82.         $type = $imageSize[1];

  83.         switch ($type) {
  84.             case "png":
  85.                 $image = imagecreatefrompng($file);
  86.                 break;
  87.             case "jpeg":
  88.                 $image = imagecreatefromjpeg($file);
  89.                 break;
  90.             case "jpg":
  91.                 $image = imagecreatefromjpeg($file);
  92.                 break;
  93.             case "gif":
  94.                 $image = imagecreatefromgif($file);
  95.                 break;
  96.         }
  97.         $rotateImage = imagerotate($image, $rotate, 0); //逆时针旋转
  98.         //获取旋转后的宽高
  99.         $srcWidth = imagesx($rotateImage);
  100.         $srcHeight = imagesy($rotateImage);
  101.         //创建新图
  102.         $newImage = imagecreatetruecolor($srcWidth, $srcHeight);
  103.         //分配颜色 + alpha,将颜色填充到新图上
  104.         $alpha = imagecolorallocatealpha($newImage, 0, 0, 0, 127);
  105.         imagefill($newImage, 0, 0, $alpha);
  106.         //将源图拷贝到新图上,并设置在保存 PNG 图像时保存完整的 alpha 通道信息
  107.         imagecopyresampled($newImage, $rotateImage, 0, 0, 0, 0, $srcWidth, $srcHeight, $srcWidth, $srcHeight);
  108.         imagesavealpha($newImage, true);

  109.         return $newImage;
  110.     }

  111. }
复制代码
具体使用:
1:base64图片旋转并输出base64
  1. ImageRotate::base64Rotate('base64图片', '旋转角度');
复制代码
2:base64图片旋转并保存
  1. ImageRotate::base64Rotate('base64图片', '旋转角度', '保存地址');
复制代码
3:本地图片旋转
  1. ImageRotate::imageRotate('本地图片地址', '旋转角度', '保存地址');
复制代码
根据上面的方法我们就可以实现图片的旋转功能了
到此这篇关于PHP实现图片旋转的方法详解的文章就介绍到这了,更多相关PHP图片旋转内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

来源:https://www.jb51.net/article/266643.htm
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

举报 回复 使用道具