加入收藏 | 设为首页 | 会员中心 | 我要投稿 莱芜站长网 (https://www.0634zz.com/)- 云连接、建站、智能边缘云、设备管理、大数据!
当前位置: 首页 > 编程开发 > PHP > 正文

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

发布时间:2023-02-16 12:45:30 所属栏目:PHP 来源:互联网
导读:这篇文章主要为大家详细介绍了PHP如何实现图片旋转功能,文中的示例代码讲解详细,对我们学习PHP有一定帮助,感兴趣的小伙伴可以了解一下 最近有一个需求需要将前端上传过来的图片进行逆时针旋转90,这个主要需要使用到php的imagerotate方法对于图片进行旋转
  这篇文章主要为大家详细介绍了PHP如何实现图片旋转功能,文中的示例代码讲解详细,对我们学习PHP有一定帮助,感兴趣的小伙伴可以了解一下

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

  <?php
    
  namespace commontraits;
    
  use Yii;
  use yiihelpersFileHelper;
    
  /**
   * 图片旋转处理trait
   *
   * @author wangjian
   * @since 1.0
   */
  class ImageRotate
  {
    
      /**
       * base64图片旋转
       * @param $image 需要旋转的base64图片
       * @param string $rotate 逆时针旋转角度
       * @param false $savePath 保存的图片路径,false返回base64格式
       */
      public static function base64Rotate($image, $rotate = '90', $savePath = false)
      {
          if (empty($image)) {
              return false;
          }
          if (preg_match('/^(data:s*image/(w+);base64,)/', $image, $result)) {
              $type = $result[2];
              //设置临时目录
              $temporaryPath = '/tmp/';
              $temporaryPath = dirname(Yii::getAlias('@common')) . '/web' . $temporaryPath;
              FileHelper::createDirectory($temporaryPath);
    
              //将原图保存到零食目录
              $temporaryImage = date('YmdHis') . rand(1000, 9999) . '.' . $type;
              if (file_put_contents($temporaryPath . $temporaryImage, base64_decode(str_replace($result[1], '', $image)))) {
                  $newImage = self::rotateImage($temporaryPath . $temporaryImage, $rotate); //旋转图片
                  //删除临时文件
                  @unlink($temporaryPath . $temporaryImage);
    
                  ob_start();
                  if ($savePath === false) { //返回base
                      imagepng($newImage);
                      $imageString = $result[1] . base64_encode(ob_get_contents());
                      @unlink($newImage);
                  } else {
                      $imageString = imagepng($newImage, $savePath);
                  }
                  ob_end_clean();
    
                  return $imageString;
              }
          }
    
          return false;
      }
    
      /**
       * 本地图片旋转
       * @param $image 需要旋转的本地图片
       * @param string $rotate 逆时针旋转角度
       * @param false $savePath 保存的图片路径,false返回替换原图
       */
      public static function imageRotate($image, $rotate = '90', $savePath = false)
      {
          if (empty($image)) {
              return false;
          }
          //旋转图片
          $newImage = self::rotateImage($image, $rotate);
          ob_start();
          if ($savePath === false) {
              //替换原图
              $url = $image;
          } else {
              $url = $savePath;
          }
          $imageString = imagepng($newImage, $url);
          ob_end_clean();
          return $imageString;
      }
    
      /**
       * @param $file 需要旋转的图片
       * @param $rotate 逆时针旋转角度
       */
      private static function rotateImage($file, $rotate)
      {
          $imageSize = getimagesize($file);
          $imageSize = explode('/', $imageSize['mime']);
          $type = $imageSize[1];
    
          switch ($type) {
              case "png":
                  $image = imagecreatefrompng($file);
                  break;
              case "jpeg":
                  $image = imagecreatefromjpeg($file);
                  break;
              case "jpg":
                  $image = imagecreatefromjpeg($file);

(编辑:莱芜站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

推荐文章
    热点阅读