PHP上传文件,文件的相关信息保存在
$FILES
这个全局变量里,文件本身保存在
php.ini
指定的临时文件夹下。
对图片缩放,有两个好处,一个是安全性问题能够满足,第二个能够将不必要使用大图的地方节省服务器的流量。
主要是用几个函数配合使用,按照这样的流程:
imagecreatetruecolor
直接在内存中创建一张图片
imagecreatefromjpeg
从上传的图片创建一张图片
imagecopyresampled
复制图片
imagejpeg
将内存中的图片保存到文件
imagedestroy
销毁内存中的图片
在php中创建图像的函数是返回一种资源类型,可以理解为指向当前图像的指针,因此在最后不要忘记释放这个指针。(虽然PHP脚本的生存周期很短,结束后会自动释放。)
imagecopyresampled
比
imagecopyresized
好的地方在于不是非常粗糙,缩放效果更好一点。
/**
* 从表单上传JPEG文件并进行重新缩放
* @param string $fieldname
* @param string $desturl
* @param string $errmsg
* @param int $width
* @param int $height
* @return int
*/
function uploadjpeg($fieldname, $desturl, &$errmsg, $width = , $height = ) {
if($_FILES[$fieldname]['error'] == ){
$imageinfo = getimagesize($_FILES[$fieldname]['tmp_name']);
if($imageinfo && $imageinfo['mime'] == 'image/jpeg' && $imageinfo[] < && $imageinfo[] < ){
$newfile = imagecreatetruecolor($width, $height);
$srcfile = imagecreatefromjpeg($_FILES[$fieldname]['tmp_name']);
if($newfile && $srcfile){
imagecopyresampled($newfile, $srcfile, , , , , $width, $height, $imageinfo[], $imageinfo[]);
if(imagejpeg($newfile, $desturl, )){
imagedestroy($newfile);
imagedestroy($srcfile);
return ;
}
$errmsg .= '服务器错误.';
return -;
}else{
$errmsg .= '不正确的文件类型.';
return -;
}
}else{
$errmsg .= '不正确的文件类型;或者图片大小过大.';
return -;
}
}else {
return $_FILES[$fieldname]['error'];
}
}