图片处理函数功能:缩放、剪切、相框、水印、锐化、旋转、翻转、透明度、反色处理并保存历史记录的思路:当有图片有改动时自动生成一张新图片
1、转Base64编码
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
|
/**
* 获取图片的Base64编码(不支持url)
* @param $img_file 传入本地图片地址
* @return string
*/
function imgToBase64( $img_file ) {
$img_base64 = '' ;
if ( file_exists ( $img_file )) {
$app_img_file = $img_file ; // 图片路径
$img_info = getimagesize ( $app_img_file ); // 取得图片的大小,类型等
//echo '<pre>' . print_r($img_info, true) . '</pre><br>';
list( $width , $height , $type , $attr ) = getimagesize ( $app_img_file );
$fp = fopen ( $app_img_file , "r" ); // 图片是否可读权限
if ( $fp ) {
$filesize = filesize ( $app_img_file );
$content = fread ( $fp , $filesize );
$file_content = chunk_split ( base64_encode ( $content )); // base64编码
switch ( $type ) { //判读图片类型
case 1: $img_type = "gif" ;
break ;
case 2: $img_type = "jpg" ;
break ;
case 3: $img_type = "png" ;
break ;
}
$img_base64 = 'data:image/png;base64,' . $file_content ; //合成图片的base64编码
}
fclose( $fp );
} else {
return $img_file ;
}
return $img_base64 ; //返回图片的base64
}
|
2、图片旋转
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
|
/**
* 图片旋转
* @param $src 图片地址
* @param $direction 1顺时针90 2 逆时针90
* @return string
*/
function imgturn( $src , $direction = 1){
$ext = pathinfo ( $src )[ 'extension' ];
switch ( $ext ) {
case 'gif' :
$img = imagecreatefromgif( $src );
break ;
case 'jpg' :
case 'jpeg' :
$img = imagecreatefromjpeg( $src );
break ;
case 'png' :
$img = imagecreatefrompng( $src );
break ;
default :
die ( '图片格式错误!' );
break ;
}
$width = imagesx( $img );
$height = imagesy( $img );
$img2 = imagecreatetruecolor( $height , $width );
//顺时针旋转90度
if ( $direction == 1){
for ( $x = 0; $x < $width ; $x ++) {
for ( $y =0; $y < $height ; $y ++) {
imagecopy( $img2 , $img , $height - 1 - $y , $x , $x , $y , 1, 1);
}
}
} else if ( $direction == 2) {
//逆时针旋转90度
for ( $x = 0; $x < $height ; $x ++) {
for ( $y = 0; $y < $width ; $y ++) {
imagecopy( $img2 , $img , $x , $y , $width - 1 - $y , $x , 1, 1);
}
}
}
switch ( $ext ) {
case 'jpg' :
case "jpeg" :
imagejpeg( $img2 , $src , 100);
break ;
case "gif" :
imagegif( $img2 , $src , 100);
break ;
case "png" :
imagepng( $img2 , $src , 100);
break ;
default :
die ( '图片格式错误!' );
break ;
}
imagedestroy( $img );
imagedestroy( $img2 );
}
|
3、图片压缩
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
|
/**
* 图片压缩处理
* @param string $sFile 源图片路径
* @param int $iWidth 自定义图片宽度
* @param int $iHeight 自定义图片高度
* @return string 压缩后的图片路径
*/
function getThumb( $sFile , $iWidth , $iHeight ){
//图片公共路径
$public_path = '' ;
//判断该图片是否存在
if (! file_exists ( $public_path . $sFile )) return $sFile ;
list( $width , $height , $type , $attr ) = getimagesize ( $sFile );
if ( $width < $height ){
imgturn( $sFile , 2);
}
//判断图片格式(图片文件后缀)
$extend = explode ( "." , $sFile );
$attach_fileext = strtolower ( $extend [ count ( $extend ) - 1]);
if (!in_array( $attach_fileext , array ( 'jpg' , 'png' , 'jpeg' ))){
return '' ;
}
//压缩图片文件名称
$sFileNameS = str_replace ( "." . $attach_fileext , "_" . $iWidth . '_' . $iHeight . '.' . $attach_fileext , $sFile );
//判断是否已压缩图片,若是则返回压缩图片路径
if ( file_exists ( $public_path . $sFileNameS )){
return $sFileNameS ;
}
//生成压缩图片,并存储到原图同路径下
resizeImage( $public_path . $sFile , $public_path . $sFileNameS , $iWidth , $iHeight );
if (! file_exists ( $public_path . $sFileNameS )){
return $sFile ;
}
return $sFileNameS ;
}
|
4、生成目标图片
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
|
/**
* 生成图片
* @param string $im 源图片路径
* @param string $dest 目标图片路径
* @param int $maxwidth 生成图片宽
* @param int $maxheight 生成图片高
*/
function resizeImage( $im , $dest , $maxwidth , $maxheight ) {
$img = getimagesize ( $im );
switch ( $img [2]) {
case 1:
$im = @imagecreatefromgif( $im );
break ;
case 2:
$im = @imagecreatefromjpeg( $im );
break ;
case 3:
$im = @imagecreatefrompng( $im );
break ;
}
$pic_width = imagesx( $im );
$pic_height = imagesy( $im );
$resizewidth_tag = false;
$resizeheight_tag = false;
if (( $maxwidth && $pic_width > $maxwidth ) || ( $maxheight && $pic_height > $maxheight )) {
if ( $maxwidth && $pic_width > $maxwidth ) {
$widthratio = $maxwidth / $pic_width ;
$resizewidth_tag = true;
}
if ( $maxheight && $pic_height > $maxheight ) {
$heightratio = $maxheight / $pic_height ;
$resizeheight_tag = true;
}
if ( $resizewidth_tag && $resizeheight_tag ) {
if ( $widthratio < $heightratio ){
$ratio = $widthratio ;
} else {
$ratio = $heightratio ;
}
}
if ( $resizewidth_tag && ! $resizeheight_tag ){
$ratio = $widthratio ;
}
if ( $resizeheight_tag && ! $resizewidth_tag ){
$ratio = $heightratio ;
}
$newwidth = $pic_width * $ratio ;
$newheight = $pic_height * $ratio ;
if (function_exists( "imagecopyresampled" )) {
$newim = imagecreatetruecolor( $newwidth , $newheight );
imagecopyresampled( $newim , $im , 0, 0, 0, 0, $newwidth , $newheight , $pic_width , $pic_height );
} else {
$newim = imagecreate( $newwidth , $newheight );
imagecopyresized( $newim , $im , 0, 0, 0, 0, $newwidth , $newheight , $pic_width , $pic_height );
}
imagejpeg( $newim , $dest );
imagedestroy( $newim );
} else {
imagejpeg( $im , $dest );
}
}
|
以上就是PHP对图片的处理的详细内容,更多关于PHP 图片处理的资料请关注服务器之家其它相关文章!
原文链接:https://www.myong.top/view/92