@oneonepro

Как на php ajax iframe загрузить изображение с уменьшением размера?

<?php	// work.php
header("Content-Type:text/html;charset=UTF-8"); // Кодирока

if ($_SERVER['REQUEST_METHOD'] == 'POST'){
	if ($_FILES['picture']){
			
			$path = 'images/';
			$tmp_path = 'tmp/';		
			$types = array('image/gif', 'image/png', 'image/jpeg');			
			$size = 6024000;
			$timedate = time().rand(100,999); 

			function resize($file, $type = 2, $rotate = null, $quality = null)
			{
				global $tmp_path;
				
				// Ограничение по ширине в пикселях
				$max_width_size = 800;
				$max_height_size = 650;		
			
				// Качество изображения по умолчанию
				if ($quality == null)
					$quality = 100;

				// Cоздаём исходное изображение на основе исходного файла
				if ($file['type'] == 'image/jpeg')
					$source = imagecreatefromjpeg($file['tmp_name']);
				elseif ($file['type'] == 'image/png')
					$source = imagecreatefrompng($file['tmp_name']);
				elseif ($file['type'] == 'image/gif')
					$source = imagecreatefromgif($file['tmp_name']);
				else
					return false;
					
				// Поворачиваем изображение
				if ($rotate != null)
					$src = imagerotate($source, $rotate, 0);
				else
					$src = $source;

				// Определяем ширину и высоту изображения
				$w_src = imagesx($src); 
				$h_src = imagesy($src);

				//  Если большое изображение устанавливаем ограничение по ширине.
				if ($type == 2)
					$w = $max_width_size;
		                  
		        // Если большое изображение устанавливаем ограничение по высоте.
				if ($type == 2)
					$h = $max_height_size;
					

				// Если ширина больше заданной
				if ($h_src > $h)
				{
					// Вычисление пропорций
					$ratio = $h_src/$h;
					$w_dest = @round($w_src/$ratio);
					$h_dest = @round($h_src/$ratio);

					// Создаём пустую картинку
					$dest = @imagecreatetruecolor($w_dest, $h_dest);
					
					// Копируем старое изображение в новое с изменением параметров
					@imagecopyresampled($dest, $src, 0, 0, 0, 0, $w_dest, $h_dest, $w_src, $h_src);

					// Вывод картинки и очистка памяти
					@imagejpeg($dest, $tmp_path . $file['name'], $quality);
					
					@imagedestroy($dest);
					@imagedestroy($src);

					return $file['name'];
					
				} else {
					// Вывод картинки и очистка памяти
					@imagejpeg($src, $tmp_path . $file['name'], $quality);
					@imagedestroy($src);

					return $file['name'];
				}
			}
				
			$name = resize($_FILES['picture'], $_POST['file_type'], $_POST['file_rotate']);

			// Загрузка файла и вывод сообщения
			if (!@copy($tmp_path . $name, $path . $name)){
				echo '';
			} else {						
				echo '<script> window.top.work("' . $path . $_FILES['picture']['name'] . '"); </script>';
		    }
		    
			unlink($tmp_path . $name);
	}
}
?>
  • Вопрос задан
  • 278 просмотров
Пригласить эксперта
Ответы на вопрос 2
@seriogja
Думаю, мало кому будет интересно разбираться в вашей "простыне". Тем более, что вы даже не удосужились нормально описать суть вашей проблемы... А вообще, ajax на то и ajax, чтоб без iframe'ов все делать.
Ответ написан
Комментировать
@oneonepro Автор вопроса
Дело в том, что ajax не позволяет загружать изображения на сервер. Есть способ через iframe. Способ рабочий и меня устраивает. Изображение загружается на сервер, но я еще хотел бы добавить уменьшение размера загруженного изображения. Например: если изображение в ширину больше 1000px, то пропорционально уменьшается до 900px в ширину например. ниже приведу код формы и код jquery.
<div id="fullsize">
	<form method="post" enctype="multipart/form-data" action="work.php" target="imgframe" id="upload">
	   <input style="display: none;" type="file" id="picture" 
	   required="required" accept="image" name="picture" onchange="document.getElementById('upload').submit()">
	   <div id="trigger">выбрать</div>
	</form>
	<img id="image" src="" />
	<iframe style="visibility: hidden; display: none;" id="imgframe" name="imgframe">
	</iframe>	
</div>


function work(obj) {
    $("#image").attr("src", obj);
}
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы
28 нояб. 2024, в 05:21
2000 руб./за проект
28 нояб. 2024, в 05:18
500 руб./за проект
28 нояб. 2024, в 03:51
3500 руб./за проект