Всем привет! Столкнулся с такой проблемой, задумался о написание ресайза загружаемых изображений на сервер. С загрузкой и ресайзом одного изображения особых проблем не возникло, получилось написать:
<input name="cover" type="file" />
<?php
if (empty($_FILES['cover']['name']))
{
$cover = "covers/no-cover.jpg";
}
else
{
$path_to_90_directory = '../covers/';//папка
$type_cover = 'covers/';
if(preg_match('/[.](JPG)|(jpg)|(gif)|(GIF)|(png)|(PNG)$/',$_FILES['cover']['name']))//проверка формата
{
$filename = $_FILES['cover']['name'];
$source = $_FILES['cover']['tmp_name'];
$target = $path_to_90_directory . $filename;
move_uploaded_file($source, $target);//загрузка оригинала в папку
if(preg_match('/[.](GIF)|(gif)$/', $filename))
{$src = imagecreatefromgif($path_to_90_directory.$filename);}
if(preg_match('/[.](PNG)|(png)$/', $filename))
{$src = imagecreatefrompng($path_to_90_directory.$filename);}
if(preg_match('/[.](JPG)|(jpg)|(jpeg)|(JPEG)$/', $filename))
{$src = imagecreatefromjpeg($path_to_90_directory.$filename);}
$w = 1000; // задаем нужную шириину
$w_src = imagesx($src);
$h_src = imagesy($src);
$ratio = $w_src/$w;
$w_dest = round($w_src/$ratio);
$h_dest = round($h_src/$ratio);
$dest = imagecreatetruecolor($w_dest,$h_dest);
imagecopyresized($dest, $src, 0, 0, 0, 0, $w_dest, $h_dest, $w_src, $h_src);
$date=time(); //вычисляем время в настоящий момент.
imagejpeg($dest, $path_to_90_directory.$date.".jpg");//сохраняем изображение формата jpg в нужную папку
$cover = $type_cover.$date.".jpg";//заносим в переменную путь до изображения.
$delfull = $path_to_90_directory.$filename;
unlink ($delfull);//удаляем оригинал загруженного изображения
}
else
{
exit ("Изображение должно быть в формате JPG,GIF или PNG");
}
}
echo $cover;
?>
Но дальше начал пробовать писать ресайз для массовой загрузки изображений с изменением имени файла и записью в бд, но встал в ступор - не могу понять как заставить ресайзить потоком фотки. (
<input name="max_file_size" type="hidden" value="5000000" /><!-- макс. размер -->
<input name='file[]' type='file' multiple='true' />
$arr=array();
//ширина и высота в пикселях
$pic_weight = 10000;
$pic_height = 10000;
if (isset($_FILES))
{
//пролистываем весь массив изображений по одному $_FILES['file']['name'] as $k=>$v
foreach ($_FILES['file']['name'] as $k=>$v)
{
//директория загрузки
$uploaddir = "../images/";
$url_files = "images/";
//новое имя изображения
$apend=date('YmdHis').rand(100,1000).'.png';
//путь к новому изображению
$uploadfile = "$uploaddir$apend";
$uploadss = "$url_files";
//Проверка расширений загружаемых изображений
if($_FILES['file']['type'][$k] == "image/gif" || $_FILES['file']['type'][$k] == "image/png" ||
$_FILES['file']['type'][$k] == "image/jpg" || $_FILES['file']['type'][$k] == "image/jpeg")
{
//черный список типов файлов
$blacklist = array(".php", ".phtml", ".php3", ".php4");
foreach ($blacklist as $item)
{
if(preg_match("/$item\$/i", $_FILES['file']['name'][$k]))
{
echo "Нельзя загружать скрипты.";
exit;
}
}
//перемещаем файл из временного хранилища
if (move_uploaded_file($_FILES['file']['tmp_name'][$k], $uploadfile))
{
//получаем размеры файла
$size = getimagesize($uploadfile);
//проверяем размеры файла, если они нам подходят, то оставляем файл
if ($size[0] < $pic_weight && $size[1] < $pic_height)
{
$arr[$apend] = "$uploadss$apend";//Запишем значение в массив с ключом по имени
echo "";
}
//если размеры файла нам не подходят, то удаляем файл unlink($uploadfile);
else
{
echo "Размер пикселей превышает допустимые нормы.";
unlink($uploadfile);
}
}
else
echo "Файл не загружен, вернитесь и попробуйте еще раз.";
}
else
echo "Можно загружать только изображения в форматах jpg, jpeg, gif и png";
}
$url = mysql_real_escape_string(implode(',',$arr));
echo $url;
}