本文实例讲述了PHP实现对png图像进行缩放的方法。分享给大家供大家参考。具体实现方法如下:
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
|
function smart_resize_image( $file , $width = 0, $height = 0, $proportional = false, $output = 'file' , $delete_original = true, $use_linux_commands = false ) { if ( $height <= 0 && $width <= 0 ) { return false; } $info = getimagesize ( $file ); $image = '' ; $final_width = 0; $final_height = 0; list( $width_old , $height_old ) = $info ; if ( $proportional ) { if ( $width == 0) $factor = $height / $height_old ; elseif ( $height == 0) $factor = $width / $width_old ; else $factor = min ( $width / $width_old , $height / $height_old ); $final_width = round ( $width_old * $factor ); $final_height = round ( $height_old * $factor ); } else { $final_width = ( $width <= 0 ) ? $width_old : $width ; $final_height = ( $height <= 0 ) ? $height_old : $height ; } switch ( $info [2] ) { case IMAGETYPE_GIF: $image = imagecreatefromgif( $file ); break ; case IMAGETYPE_JPEG: $image = imagecreatefromjpeg( $file ); break ; case IMAGETYPE_PNG: $image = imagecreatefrompng( $file ); break ; default : return false; } $image_resized = imagecreatetruecolor( $final_width , $final_height ); if ( ( $info [2] == IMAGETYPE_GIF) || ( $info [2] == IMAGETYPE_PNG) ) { $trnprt_indx = imagecolortransparent( $image ); // If we have a specific transparent color if ( $trnprt_indx >= 0) { // Get the original image's transparent color's RGB values $trnprt_color = imagecolorsforindex( $image , $trnprt_indx ); // Allocate the same color in the new image resource $trnprt_indx = imagecolorallocate( $image_resized , $trnprt_color [ 'red' ], $trnprt_color [ 'green' ], $trnprt_color [ 'blue' ]); // Completely fill the background of the new image with allocated color. imagefill( $image_resized , 0, 0, $trnprt_indx ); // Set the background color for new image to transparent imagecolortransparent( $image_resized , $trnprt_indx ); } // Always make a transparent background color for PNGs that don't have one allocated already elseif ( $info [2] == IMAGETYPE_PNG) { // Turn off transparency blending (temporarily) imagealphablending( $image_resized , false); // Create a new transparent color for image $color = imagecolorallocatealpha( $image_resized , 0, 0, 0, 127); // Completely fill the background of the new image with allocated color. imagefill( $image_resized , 0, 0, $color ); // Restore transparency blending imagesavealpha( $image_resized , true); } } imagecopyresampled( $image_resized , $image , 0, 0, 0, 0, $final_width , $final_height , $width_old , $height_old ); if ( $delete_original ) { if ( $use_linux_commands ) exec ( 'rm ' . $file ); else @unlink( $file ); } switch ( strtolower ( $output ) ) { case 'browser' : $mime = image_type_to_mime_type( $info [2]); header( "Content-type: $mime" ); $output = NULL; break ; case 'file' : $output = $file ; break ; case 'return' : return $image_resized ; break ; default : break ; } switch ( $info [2] ) { case IMAGETYPE_GIF: imagegif( $image_resized , $output ); break ; case IMAGETYPE_JPEG: imagejpeg( $image_resized , $output ); break ; case IMAGETYPE_PNG: imagepng( $image_resized , $output ); break ; default : return false; } return true; } |
希望本文所述对大家的php程序设计有所帮助。