php 得到图片大小,使用 php的imagecopyresampled函数生成缩略图(控制图片大小)

用php生成缩略图经常被使用到,尤其是社区论坛里面生成用户头像,这里我写了一个能够产生缩略图的函数

函数的调用示例:

CreateImage('../'.$save_path, '../'.$BaseDir.$child_dir.'/'.$new_file_small, 128, 128);

CreateImage函数定义:

function CreateImage($SrcImageUrl, $DirImageUrl, $Width, $Height)

{

$img;

$srcw;

$new_width;

$srch;

$new_height;

// 图片类型

$type = substr(strrchr($SrcImageUrl, "."), 1);

// 初始化图像

if($type == "jpg")

$img = imagecreatefromjpeg($SrcImageUrl);

if($type == "gif")

$img = imagecreatefromgif($SrcImageUrl);

if($type == "png")

$img = imagecreatefrompng($SrcImageUrl);

$srcw = imagesx($img);

$srch = imagesy($img);

if ($srcw / $srch > $Width / $Height)

{

if ($srcw > $Width)

{

$new_width = $Width;

$new_height = $srch * ($Width / $srcw);

}

else

{

$new_width = $srcw;

$new_height = $srch;

}

}

else

{

if ($srch > $Height)

{

$new_height = $Height;

$new_width = $srcw * ($Height / $srch);

}

else

{

$new_width = $srcw;

$new_height = $srch;

}

}

$new_image = imagecreatetruecolor($new_width, $new_height);

imagecopyresampled($new_image, $img, 0, 0, 0, 0, $new_width, $new_height, $srcw, $srch);

imagejpeg($new_image, $DirImageUrl);

imagedestroy($img);

imagedestroy($new_image);

}

不过我在网上看到一个更好的代码:

/*

*         $o_photo 原图路径

*         $d_photo 处理后图片路径

*         $width    定义宽

*         $height   定义高

*         调用方法   cutphoto("test.jpg","temp.jpg",256,146);

*/

functioncutphoto($o_photo,$d_photo,$width,$height){

$temp_img=imagecreatefromjpeg($o_photo);

$o_width=imagesx($temp_img);//取得原图宽

$o_height=imagesy($temp_img);//取得原图高

//判断处理方法

if($width>$o_width||$height>$o_height){//原图宽或高比规定的尺寸小,进行压缩

$newwidth=$o_width;

$newheight=$o_height;

if($o_width>$width){

$newwidth=$width;

$newheight=$o_height*$width/$o_width;

}

if($newheight>$height){

$newwidth=$newwidth*$height/$newheight;

$newheight=$height;

}

//缩略图片

$new_img=imagecreatetruecolor($newwidth,$newheight);

imagecopyresampled($new_img,$temp_img,0,0,0,0,$newwidth,$newheight,$o_width,$o_height);

imagejpeg($new_img,$d_photo);

imagedestroy($new_img);

}else{//原图宽与高都比规定尺寸大,进行压缩后裁剪

if($o_height*$width/$o_width>$height){//先确定width与规定相同,如果height比规定大,则ok

$newwidth=$width;

$newheight=$o_height*$width/$o_width;

$x=0;

$y=($newheight-$height)/2;

}else{//否则确定height与规定相同,width自适应

$newwidth=$o_width*$height/$o_height;

$newheight=$height;

$x=($newwidth-$width)/2;

$y=0;

}

//缩略图片

$new_img=imagecreatetruecolor($newwidth,$newheight);

imagecopyresampled($new_img,$temp_img,0,0,0,0,$newwidth,$newheight,$o_width,$o_height);

imagejpeg($new_img,$d_photo);

imagedestroy($new_img);

$temp_img=imagecreatefromjpeg($d_photo);

$o_width=imagesx($temp_img);//取得缩略图宽

$o_height=imagesy($temp_img);//取得缩略图高

//裁剪图片

$new_imgx=imagecreatetruecolor($width,$height);

imagecopyresampled($new_imgx,$temp_img,0,0,$x,$y,$width,$height,$width,$height);

imagejpeg($new_imgx,$d_photo);

imagedestroy($new_imgx);

}

}

?>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值