本文介绍了关于PHP解决图片无损压缩的问题,分享给大家,具体如下:
代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
header( "Content-type: image/jpeg" ); $file = "111.jpg" ; $percent = 1.5; //图片压缩比 list( $width , $height ) = getimagesize ( $file ); //获取原图尺寸 //缩放尺寸 $newwidth = $width * $percent ; $newheight = $height * $percent ; $src_im = imagecreatefromjpeg( $file ); $dst_im = imagecreatetruecolor( $newwidth , $newheight ); imagecopyresized( $dst_im , $src_im , 0, 0, 0, 0, $newwidth , $newheight , $width , $height ); imagejpeg( $dst_im ); //输出压缩后的图片 imagedestroy( $dst_im ); imagedestroy( $src_im ); |
我发现用php的imagecopyresized把大图片缩成小图片时,图片会变得很模糊,这时候要提升清晰度不如用 imagecopyresampled 代替 imagecopyresized也许会更好。
注:压缩有损失是必然的,看的清楚与否实际上就是是否接受这个范围的问题.比如你图像上原图有些点是2px,但是你压缩5倍,那么这些点就会消失。
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
|
<?php /** * desription 压缩图片 * @param sting $imgsrc 图片路径 * @param string $imgdst 压缩后保存路径 */ function image_png_size_add( $imgsrc , $imgdst ){ list( $width , $height , $type )= getimagesize ( $imgsrc ); $new_width = ( $width >600?600: $width )*0.9; $new_height =( $height >600?600: $height )*0.9; switch ( $type ){ case 1: $giftype =check_gifcartoon( $imgsrc ); if ( $giftype ){ header( 'Content-Type:image/gif' ); $image_wp =imagecreatetruecolor( $new_width , $new_height ); $image = imagecreatefromgif( $imgsrc ); imagecopyresampled( $image_wp , $image , 0, 0, 0, 0, $new_width , $new_height , $width , $height ); imagejpeg( $image_wp , $imgdst ,75); imagedestroy( $image_wp ); } break ; case 2: header( 'Content-Type:image/jpeg' ); $image_wp =imagecreatetruecolor( $new_width , $new_height ); $image = imagecreatefromjpeg( $imgsrc ); imagecopyresampled( $image_wp , $image , 0, 0, 0, 0, $new_width , $new_height , $width , $height ); imagejpeg( $image_wp , $imgdst ,75); imagedestroy( $image_wp ); break ; case 3: header( 'Content-Type:image/png' ); $image_wp =imagecreatetruecolor( $new_width , $new_height ); $image = imagecreatefrompng( $imgsrc ); imagecopyresampled( $image_wp , $image , 0, 0, 0, 0, $new_width , $new_height , $width , $height ); imagejpeg( $image_wp , $imgdst ,75); imagedestroy( $image_wp ); break ; } } /** * desription 判断是否gif动画 * @param sting $image_file图片路径 * @return boolean t 是 f 否 */ function check_gifcartoon( $image_file ){ $fp = fopen ( $image_file , 'rb' ); $image_head = fread ( $fp ,1024); fclose( $fp ); return preg_match( "/" . chr (0x21). chr (0xff). chr (0x0b). 'NETSCAPE2.0' . "/" , $image_head )?false:true; } ?> |
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:http://blog.csdn.net/u012717614/article/details/60962557