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

吾爱主题 阅读:337 2022-11-25 14:33:00 评论:0

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

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 <?php   namespace common\traits;   use Yii; use yii\helpers\FileHelper;   /**   * 图片旋转处理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 );                  break ;              case "gif" :                  $image = imagecreatefromgif( $file );                  break ;          }          $rotateImage = imagerotate( $image , $rotate , 0); //逆时针旋转          //获取旋转后的宽高          $srcWidth = imagesx( $rotateImage );          $srcHeight = imagesy( $rotateImage );          //创建新图          $newImage = imagecreatetruecolor( $srcWidth , $srcHeight );          //分配颜色 + alpha,将颜色填充到新图上          $alpha = imagecolorallocatealpha( $newImage , 0, 0, 0, 127);          imagefill( $newImage , 0, 0, $alpha );          //将源图拷贝到新图上,并设置在保存 PNG 图像时保存完整的 alpha 通道信息          imagecopyresampled( $newImage , $rotateImage , 0, 0, 0, 0, $srcWidth , $srcHeight , $srcWidth , $srcHeight );          imagesavealpha( $newImage , true);            return $newImage ;      }   }

具体使用:

1:base64图片旋转并输出base64

?
1 ImageRotate::base64Rotate( 'base64图片' , '旋转角度' );

2:base64图片旋转并保存

?
1 ImageRotate::base64Rotate( 'base64图片' , '旋转角度' , '保存地址' );

3:本地图片旋转

?
1 ImageRotate::imageRotate( '本地图片地址' , '旋转角度' , '保存地址' );

根据上面的方法我们就可以实现图片的旋转功能了

到此这篇关于PHP实现图片旋转的方法详解的文章就介绍到这了,更多相关PHP图片旋转内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/huaweichenai/article/details/125259484

可以去百度分享获取分享代码输入这里。
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

【腾讯云】云服务器产品特惠热卖中
搜索
标签列表
    关注我们

    了解等多精彩内容