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; //上传文件的新名字
- //开源代码phpfensi.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();
- }
- ?>