После заполнения элементов формы, изображение передается на сервер в переменной pURL. Проверка корректности заполнениия формы на стороне клиента удалена для упрощения примера. Примеры проверки Вы найдете в разделе примеров javascript. После проверки типа изображения оно сохраняется из временного файла в указанную папку с привязкой к записи в базе. Для упрощения примера работа с базой исключена из рассмотрения. Дальше с помощью функции Resize изображение уменьшается с сохранением пропорций и приводится к формату jpeg.
<?php
// определяю папку, куда буду складывать полученные изображения
define("path_image",'/pic/');
if(isset($_REQUEST['name'])){
// сохраняю в базу и получаю $id записи, для привязки изображения к этой записи
if($fil=SaveFile('pURL','p'.$id)){
// $fil - имя файла изображения
// 320 - максимальный размер в пикселях
Resize($fil,'p'.$id,320);
}
}
?>
// не использую "ACTION=", т.к. передаю изображение текущему файлу-обработчику
<FORM enctype='multipart/form-data' METHOD="POST" onSubmit="return validator(this);">
Ф.И.О.: <input style="WIDTH: 99%" name="name" /><br>
Фото: <input type='file' name='pURL' size=60 /><br>
<center><input style="WIDTH: 100px" type=submit value="Отправить!"></center>
</form>
<script language="javascript">
// проверка правильности заполнения формы
function validator(theForm) {return true;}
</script>
<?
// сохранение фото
function SaveFile($purl,$filename){
if(isset($_FILES[$purl]['name'])){
$pURL =$_FILES[$purl]['tmp_name'];
$pURL_type =$_FILES[$purl]['type'];
$pURL_name =$_FILES[$purl]['name'];
//print"<br>".$purl." ".$filename;print_r($_FILES);
if (!empty($pURL_name)&&$_FILES[$purl]['error'])
print "Ошибка(<b>".$_FILES[$purl]['error']."</b>) загрузки файла <b>".$pURL_name."</b> на сервер!";
elseif (isset($pURL_type) && ($pURL_type!=''))
{if ($pURL_type=='image/gif'||$pURL_type=='image/jpeg'||$pURL_type=='image/pjpeg'||$pURL_type=='image/png')
{$nname=$_SERVER['DOCUMENT_ROOT'].path_image.$filename.'.'.GetExt($pURL_name);
if ( move_uploaded_file($pURL, $nname) )
print "Сохранил в ".$nname; return $nname;
else print "Не смог сохранить ".$pURL." в ".$nname;
}
elseif ($pURL!='') print "Неверный тип $pURL_type";
}
}
function GetExt($file){ // возвращает расширение файла
$ext=strtolower(substr(strrchr(basename($file), '.'),1));
switch ( $ext ){
case 'jpeg': case 'jpg':
return 'jpg';
case 'gif':
return $ext;
case 'png':
return $ext;
default:
return false;
}}
// изменение размера с сохранением пропорций изображения
function Resize($img,$target,$max){
// $img - с полным путем, $target без пути, $max - максим. размер
$width=$max;
$height=$max;
switch ( $ext=GetExt($img) ){
case 'jpg':
$srcImage = @ImageCreateFromJPEG($img);
break;
case 'gif':
$srcImage = @ImageCreateFromGIF($img);
break;
case 'png':
$srcImage = @ImageCreateFromPNG($img);
break;
default:
die('Неверный формат файла изображения!');
}
$srcWidth = ImageSX($srcImage);
$srcHeight = ImageSY($srcImage);
if(($width < $srcWidth) || ($height > $srcHeight))
{
$ratioWidth = $srcWidth/$width;
$ratioHeight = $srcHeight/$height;
if($ratioWidth < $ratioHeight)
{
$destWidth = intval($srcWidth/$ratioHeight);
$destHeight = $height;
}
else
{
$destWidth = $width;
$destHeight = intval($srcHeight/$ratioWidth);
}
// на этапе отладки вывожу получившийся размер
echo "Width=".$destWidth." Height=". $destHeight;
$resImage = ImageCreateTrueColor($destWidth, $destHeight);
ImageCopyResampled($resImage, $srcImage, 0, 0, 0, 0, $destWidth, $destHeight, $srcWidth, $srcHeight);
$target=$_SERVER['DOCUMENT_ROOT'].path_image.$target.'.jpg';
ImageJPEG($resImage, $target, 100); // 100 - максимальное качество
ImageDestroy($srcImage);
ImageDestroy($resImage);
}}
?>Скопировать в буфер
© Copyright 2008-2012 by KDG