一款實現的生成小圖功能的實現代碼,有需要的朋友可以參考,每個都有詳細的說明參數。 代碼如下 復制代碼
<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; //上傳文件的新名字
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();
}
?>