最近有一个需求需要将前端上传过来的图片进行逆时针旋转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( '本地图片地址' , '旋转角度' , '保存地址' ); |
根据上面的方法我们就可以实现图片的旋转功能了
原文链接:https://blog.csdn.net/huaweichenai/article/details/125259484
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
暂无评论内容