在web开发过程中缩略图已经是得到了广泛的应用,所以我觉得我很有必要弄清楚其原理!
要想在php中使用缩略图的功能必须打开GD2,就是在php.ini中把extension=php_gd2.dll前的那个分号去掉,之后重新启动web服务器就可以用啦!
废话不多说马上开始!
缩略图的功能就是把一张大的图片变成成一张小的图片,这样图片容易加载,网页显示速度快,但是又不能是图片的内容变形!!也就是要等比例缩放!
创建缩略图第一步就是要打开源图片。
<?php
$im = imagecreatefromjpeg('test.jpg');
if($im == false){
die("不能打开jpg图片!");
} else{
echo "图片已经打开!";
}
?>
这只是一个简单的测试函数。 请大家自己看看手册,理解函数是什么意思。下面是个通用打开图像函数。
/**
*函数名称: open_image
*参数: $file -- 图片文件的路径名
*函数说明: 判断打开的文件是否图片是否合法
*返回: 成功返回资源类型,失败返回 false
*/
function open_image($file) {
$im = @imagecreatefromjpeg($file); //jpeg格式
if($im !== false) return $im;
$im = @imagecreatefromgif($file); //gif格式
if($im !== false) return $im;
$im = @imagecreatefrompng($file); //png格式
if($im !== false) return $im;
$im = @imagecreatefromgd($file); //gd生成的文件
if($im !== false) return $im;
$im = @imagecreatefromgd2($file); //gd2生成的文件
if($im !== false) return $im;
$im = @imagecreatefromwbmp($file); //wbmp手机格式图片
if($im !== false) return $im;
$im = @imagecreatefromxbm($file); //xbm格式文件
if($im !== false) return $im;
$im = @imagecreatefromxpm($file); //xpm格式文件
if($im !==false) return $im;
$im = @imagecreatefromstring($file); //尝试从字符串中建立一个图片文件
if($im !==false) return $im;
return false;
}
下面是缩略图函数呵呵! 不清楚的地方可以留言问我!
/**
*函数名称: imageResize
*参数: $srcFile-- 图片文件的路径名$tow--缩略图宽$toh--缩略图高,$tofile--缩略图路径和名称
*函数说明:生成缩略图
*
*/
function imageResize($srcFile, $tow, $toh, $tofile){
$im = open_image($srcFile);
$wh_rate = $tow/$toh; //缩略图宽高比
$srcw = imagesx($im); //源图片的宽
$srch = imagesy($im); //源图片的高
$start = (int) abs(($srcw-$srch)/2);
$src_pix = $srcw/$srch>$wh_rate?$srch:$srcw;
$tox = (int)(($srcw - $tow)/2); //缩略图的x坐标
$toy = (int)(($srch - $toh)/2); //缩略图的y坐标
if(function_exists("imagecreatetruecolor")) {
$ni = imagecreatetruecolor($tow, $toh);
if($ni) {
imagecopyresampled($ni, $im, 0, 0, $wh_rate>=1?$start:0, $wh_rate>=1?0:$start, $tow, $toh, $src_pix,$src_pix);
} else {
$ni = imagecreate($tow, $toh);
imagecopyresampled($ni, $im, 0, 0, $wh_rate>=1?$start:0, $wh_rate>=1?0:$start, $tow, $toh, $src_pix,$src_pix);
}
} else {
$ni = imagecreate($tow, $toh);
imagecopyresampled($ni, $im, 0, 0, $wh_rate>=1?$start:0, $wh_rate>=1?0:$start, $tow, $toh, $src_pix,$src_pix);
}
imagegif($ni, $tofile);
imagedestroy($ni);
imagedestroy($im);
}