Mahay
@Mahay

Как осуществить на php resize картинок с изменением названия и записью в mysql?

Всем привет! Столкнулся с такой проблемой, задумался о написание ресайза загружаемых изображений на сервер. С загрузкой и ресайзом одного изображения особых проблем не возникло, получилось написать:

<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;
		}
  • Вопрос задан
  • 1341 просмотр
Решения вопроса 1
@Silm
O▃O

95% кода в топку

image.intervention.io/getting_started/introduction

PS
  • Зачем регулярками находит расширение из имени, если 1 в имени может быть неверное расширение, 2 есть встроенная функция определения типа файла.
  • Вы не пробовали писать функции?
  • date('YmdHis').rand(100,1000) шо?
  • $blacklist = array(".php", ".phtml", ".php3", ".php4");
    а если расширение jpg, но в файле php? А файлы с другими расширениями, но не изображения вас устраивают?
  • php.net/function.mysql_real_escape_string читаем что написано в красном прямоугольнике
  • ...
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Mowsar
@Mowsar
Web™brothers
Вообще эта тема с изображениями на php полный п... по нормальному crop'ать нужно руками или на JS скрипт искать подгонять и потом на сервер заливать ... зачем серверу мучиться с картинками...=) возможно я неправ.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы