php缩略图代码,imagecopyresampled函数生成缩略图

发布时间:2020-11-18编辑:脚本学堂
php生成缩略图的一段代码,这里使用imagecopyresampled函数生成缩略图,可用于生成用户头像,供大家参考。

imagecopyresampled函数生成缩略图

1、函数调用:
 

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

2、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);
}

3、改进后代码:
 

复制代码 代码示例:

<?php
/*

*$o_photo 原图路径

*$d_photo 处理后图片路径

*$width    定义宽

*$height   定义高

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

*/

function cutphoto($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);
}
}
?>