本文介绍了关于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