代码如下
<?php
/**
* makeThumb() 制作缩略图
* 缩略图制作逻辑
* 1. 纵横比保持不变
* 2. 两种方式制作缩略图: 按宽度控制 和 按高度控制
* 3. 按宽度控制: 如 byWidth=200px, 表示把图片制作成宽度为200px的缩略图, 高度是多少不管
* 4. 按高度控制: 如 byHeight=200px, 表示把图片制作成高度为200px的缩略图, 宽度是多少不管
*
* @param $path 原图片路径
* @param $mode 制作缩略图的方式: byWidth是按宽度控制, byHeight是按高度控制
* @param $value 控制到的像素
* @param $saveTo 是否保存, 默认false为进行二进制输出; 如果填写路径, 则保存至填写的路径
*/
function makeThumb($path, $mode = 'byWidth', $value, $saveTo = false)
{
//typeOld说明: 1 = GIF,2 = JPG,3 = PNG,4 = SWF,5 = PSD,6 = BMP,7 = TIFF(intel byte order),8 = TIFF(motorola byte order),9 = JPC,10 = JP2,11 = JPX,12 = JB2,13 = SWC,14 = IFF,15 = WBMP,16 = XBM
//取得图片数据
$imageData = file_get_contents($path);
// 获取图像信息
$imageInfo = getimagesizefromstring($imageData);
list($widthOld, $heightOld, $typeOld) = $imageInfo;
//取得缩略图的高度和宽度
if ($mode == 'byWidth') {
$percent = $value / $widthOld;
$width = $value;
$height = round($heightOld * $percent, 0);
} elseif ($mode = 'byHeight') {
$percent = $value / $heightOld;
$height = $value;
$width = round($widthOld * $percent, 0);
}
// 创建缩略图画板
$block = imagecreatetruecolor($width, $height);
// 启用混色模式
imagealphablending($block, false);
// 保存PNG alpha通道信息
imagesavealpha($block, true);
// 创建原图画板
$bigImg = imagecreatefromstring($imageData);
// 缩放
imagecopyresampled($block, $bigImg, 0, 0, 0, 0, $width, $height, $widthOld, $heightOld);
//没有填写saveTo, 则保存至临时文件
if ($saveTo === false) {
// 生成临时文件名
$saveToPath = tempnam(sys_get_temp_dir(), 'image_');
} else {
$saveToPath = $saveTo;
}
// 保存操作
switch ($typeOld) {
case 1:
imagegif($block, $saveToPath);
break;
case 2:
imagejpeg($block, $saveToPath);
break;
case 3:
imagepng($block, $saveToPath);
break;
}
//没有填写saveTo, 则显示
if ($saveTo === false) {
// 销毁画布
imagedestroy($block);
//再次读取
$image = file_get_contents($saveToPath);
//删除临时文件
unlink($saveToPath);
//浏览器二进制输出
header("content-type:image/png");
echo $image;
}
}
把以上代码叫做 代码A
好比说 显示 1.jpg 的缩略图, 可以在代码A的最后添加以下代码
makeThumb('./1.jpg', 'byWidth', 400) //生成宽度为400px的缩略图
值得一提的是, 要在浏览器直接输出时, 同一文件如果输出了其他字符, 可能造成图片无法输出
又好比说 要把1.jpg的缩略图保存为2.png, 可以在代码A的最后添加以下代码
makeThumb('./1.jpg', 'byHeight', 400, './2.png'); //保存高度为400px的缩略图为2.png