php 上传图片自动生成缩略图
一款实现的生成小图功能的实现代码,有需要的朋友可以参考,每个都有详细的说明参数,php 上传图片自动生成缩略图实例代码如下:
<form action="uploads.php" method="post" enctype="multipart/form-data">
<input type='file' name='image'><br>
<input type='submit' name='sub' value='提交'>
</form>
//uploads.php文件
<?php
class image_upload {
private $srcimg; //原图片
private $destimg; // 目标图片
private $width; //原图片的宽度
private $height; //原图片的高度
private $type; //原文件的图片类型
private $thumb_width; //缩略图的宽度
private $thumb_height; //缩略图的高度
private $cut; //是否剪切图片到指定高度
private $tmp; //上传图片的临时地址
private $error;
private $im; // 创建一个临时的图片句柄
private $new_name; //上传文件的新名字
//开源代码phprm.com
function __construct($srcimg, $t_width, $t_height, $cut, $tmp, $error) {
$this->srcimg = $srcimg;
$this->thumb_width = $t_width;
$this->thumb_height = $t_height;
$this->cut = $cut;
$this->tmp = $tmp;
$this->error = $error;
$this->get_srcimg_type();
$this->get_new_upload_name();
}
function img_upload() {
//文件上传的方法
$this->check_error($this->error);
$this->in_type();
$dst_dir = './images';
if (!is_dir($dst_dir)) {
mkdir($dst_dir);
echo "%%%<BR>";
}
if (is_uploaded_file($this->tmp)) {
if (move_uploaded_file($this->tmp, $this->new_name)) {
echo "文件上传成功<br>";
return true;
} else {
echo '文件不能被移动,上传失败';
exit;
}
} else {
echo '文件上传可能被攻击';
exit;
}
}
function make_thumbnail() {
//生成缩略图的方法
$this->get_dest_imgpath();
$this->make_im();
$this->width = imagesx($this->im);
$this->height = imagesy($this->im);
$thumb_ratio = $this->thumb_width / $this->thumb_height;
$ratio = $this->width / $this->height;
if ($this->cut == 1) { //是否裁剪
if ($ratio >= $thumb_ratio) {
$img = imagecreatetruecolor($this->thumb_width, $this->thumb_height);
imagecopyresampled($img, $this->im, 0, 0, 0, 0, $this->thumb_width, $this->thumb_height, $this->height * $thumb_ratio, $this->height);
imagejpeg($img, $this->destimg);
echo "缩略图生成成功";
} else {
$img = imagecreatetruecolor($this->thumb_width, $this->thumb_height);
imagecopyresampled($img, $this->im, 0, 0, 0, 0, $this->thumb_width, $this->thumb_height, $this->width, $this->width / $thumb_ratio);
imagejpeg($img, $this->destimg);
echo "缩略图生成成功";
}
} else {
if ($ratio >= $thumb_ratio) {
$img = imagecreatetruecolor($this->thumb_height * $thumb_ratio, $this->thumb_height);
imagecopyresampled($img, $this->im, 0, 0, 0, 0, $this->thumb_height * $thumb_ratio, $this->thumb_height, $this->width, $this->height);
imagejpeg($img, $this->destimg);
echo "缩略图生成成功";
} else {
$img = imagecreatetruecolor($this->thumb_width, $this->thumb_width / $thumb_ratio);
imagecopyresampled($img, $this->im, 0, 0, 0, 0, $this->thumb_width, $this->thumb_width / $thumb_ratio, $this->width, $this->height);
imagejpeg($img, $this->destimg);
echo "缩略图生成成功";
}
}
imagedestroy($this->im);
imagedestroy($img);
}
private function check_error($error) {
//检查文件上传传得错误;
if ($error > 0) {
switch ($error) {
case 1:
echo "上传文件的大小超过了PHP.INI文件中得配置<br>";
break;
case 2:
echo "上传文件的大小超过了表单中的限制大小<br>";
break;
case 3:
echo "只有部分文件被上传<br>";
break;
case 4:
echo "没有文件被上传<br>";
break;
case 6:
echo "php.ini中没有设置图片存放的临时未知<br>";
break;
case 7:
echo "硬盘不可以写入,上传失败<br>";
break;
default:
echo "未知错误";
break;
}
}
}
private function get_srcimg_type() {
//判断源文件的图片类型
$this->type = substr(strrchr($this->srcimg, '.') , '1');
}
private function in_type() {
//检查文件是否符合类型
$type_arr = array(
'gif',
'jpg',
'png'
);
if (!in_array($this->type, $type_arr)) {
echo "只支持PNG,GIF,JPG 三种类型的文件格式……,请重新上传正确的格式";
exit;
}
}
private function get_new_upload_name() {
//上传的文件生成新的名字
$this->new_name = 'images/' . date('YmdHis') . '.' . $this->type;
}
private function make_im() {
//从原文件新建一幅图像
switch ($this->type) {
case 'jpg':
$this->im = imagecreatefromjpeg($this->new_name);
break;
case 'gif':
$this->im = imagecreatefromgif($this->new_name);
break;
case 'png':
$this->im = imagecreatefrompng($this->new_name);
break;
}
}
private function get_dest_imgpath() {
//得到缩略图的存储路径
$len1 = strlen($this->new_name);
$len2 = strlen(strrchr($this->new_name, '.'));
$len3 = $len1 - $len2;
$this->destimg = substr($this->new_name, 0, $len3) . '_small.' . $this->type;
}
}
print_r($_FILES);
$file = $_FILES['image'];
echo $file['name'];
$uploads = new image_upload($file['name'], 120, 160, 1, $file['tmp_name'], $file['error']);
if ($uploads->img_upload()) {
$uploads->make_thumbnail();
}文章网址:http://www.phprm.com/tuxiang/fs4427.html
随意转载^^但请附上教程地址。