Регистрация Войти
Войти через VK Войти через FB Войти через Google Войти через Яндекс
Войти через VK Войти через FB Войти через Google Войти через Яндекс
Поиск по сайту
Передача изображения на сервер через форму, изменение его размера и сохранение на диск
После заполнения элементов формы изображение передается на сервер в переменной pURL. Проверка корректности заполнениия формы на стороне клиента удалена для упрощения примера. Примеры проверки Вы найдете в разделе примеров javascript. После проверки типа изображения оно сохраняется из временного файла в указанную папку с привязкой к записи в базе. Для упрощения примера работа с базой исключена из рассмотрения. Дальше с помощью функции Resize изображение уменьшается с сохранением пропорций и приводится к формату jpeg.
<?
// определяю папку, куда буду складывать полученные изображения
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>
<input style="WIDTH: 100px" type=submit value="Отправить!">
</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);
}}
.
Прокомментировать/Отблагодарить