#1 prince
问题:文件由表单提交,最后的imagejpeg()/imagegif()/imagepng()写新文件时 imagecopyresampled()这个好像不起作用,出来的图像是黑色,好像没有从源文件取得图像function pictureSave(){
$upDir = '../img/user/';//上传路径
if ($_FILES["file"]["error"] > 0){
return $_FILES["file"]["error"];
}else{
$file = fopen($_FILES["file"]["tmp_name"], "rb");//以只读模式打开文件
$bin = fread($file, 2); //只读取前2字节
fclose($file);
$strInfo = @unpack("C2chars", $bin);
$typeCode = intval($strInfo['chars1'].$strInfo['chars2']);
$type_r = $this -> file_judge($typeCode);
if ($type_r[0] == true){
$bgWidth = 450;//设置背景宽度
$bgHeight = 450;//设置背景高度
list($width, $height) = getimagesize($upPath.$picture);
list($dstwidth , $dstheight) = $this -> setW_H($width , $height , $bgWidth , $bgHeight);
$begin_X = ($bgWidth - $dstwidth)/2;//目标文件绘图X坐标起始点的位置
$begin_Y = ($bgHeight - $dstheight)/2;//目标文件绘图Y坐标起始点的位置
$end_X = $bgWidth-($bgWidth - $dstwidth);//目标文件X坐标结束绘图的位置
$end_Y = $bgWidth-($bgHeight - $dstheight);//目标文件Y坐标结束绘图的位置
//加载图像
$newIma = imagecreatetruecolor($bgWidth, $bgHeight);
$imgName = $_SESSION[username].'_'.date("Y-m-d_His") . $type_r[1];
//move_uploaded_file($_FILES["file"]["tmp_name"] , $upDir.$imgName);
/*开始调整大小,imagecopyresized ( resource $dst_image , resource $src_image , int $dst_x , int $dst_y , int $src_x , int $src_y , int $dst_w , int $dst_h , int $src_w , int $src_h )*/
if ($type_r[1] == '.jpg') $source = imagecreatefromjpeg($_FILES["file"]["tmp_name"]);
if ($type_r[1] == '.gif') $source = imagecreatefromgif($_FILES["file"]["tmp_name"]);
if ($type_r[1] == '.png') $source = imagecreatefrompng($_FILES["file"]["tmp_name"]);
imagecopyresampled($newIma, $source, $begin_X, $begin_Y, 0, 0, $end_X, $end_Y, $width, $height);
//unlink($upPath.$picture);覆盖原图像
if($type_r[1]=='.jpg')imagejpeg($newIma,$upDir.$imgName,100);
if($type_r[1]=='.gif')imagegif($newIma,$upDir.$imgName,100);
if($type_r[1]=='.png')imagepng($newIma,$upDir.$imgName,100);
imagedestroy($newIma);
$cplist_album = spClass("cplist_album");
$newPic = array('cp_id' => $this -> spArgs('cp_id'),'picture' => $imgName,'picDesc' => $this -> spArgs('picDesc'));
$cplist_album -> create($newPic);
if ($cplist_album == false){
$msg = '上传图片时记录到数据库出错,请向系统管理员报告此问题!';
$url = spUrl("add_new","UploadPic",'cp_id='.$this -> spArgs('cp_id'));
$this -> error($msg,$url);
}
else{
$msg = '上传图片成功';
$url = spUrl("add_new","UploadPic".'&cp_id='.$this -> spArgs('cp_id'));
$this -> success($msg,$url);
}
}
else{
//return false;
echo 'You want to upload files is lawlessness file.';
exit;
}
}
}
//file_judge()判断文件是否是指定类型,如果合法则以数组类型返回true和扩展名
function file_judge($typeValue){
switch ($typeValue){
case 255216://这个是jpg类型
$typeArray = array(true , '.jpg');
return $typeArray;
break;
case 7173:
$typeArray = array(true , '.gif');
return $typeArray;
break;
case 13780:
$typeArray = array(true , '.png');
return $typeArray;
break;
default:
return $typeArray = array(false,'');//默认返回false和空
}
}
//设置新图像宽度及高度,参数及顺序:原图宽度,原图高度,背景宽度,背景高度
function setW_H($src_width, $src_height,$bgWidth,$bgHeight){
if ((($src_width*1.05) < $bgWidth)&(($src_height*1.05) < $bgHeight)){
$new = array($src_width,$src_height);//如果源图像的高和宽的1.05倍都小于背景就直接返回源高宽
return $new;
}
//判断源图像的高或宽其中一个是否大于背景的高或宽
if (($src_width > $bgWidth)||($src_height > $bgHeight)){
if ($src_width > $src_height){//如果源图像的宽度大于高度
$new_width = $bgWidth - ($src_width*0.02);
$new_height = $src_height*($bgWidth/$src_width) - ($src_height*0.02);
$new = array($new_width,$new_height);
return $new;
}
if ($src_width < $src_height){//如果源图像的高度大于宽度
$new_width = ($src_width * ($bgHeight/$src_height)) - ($src_width*0.02);
$new_height = $bgHeight - ($src_height*0.02);
$new = array($new_width,$new_height);
return $new;
}
}
}
2010-11-20 19:36:45