@pevxiw
Вэб

Как при добавлении картинки уменьшить её?

Здравствуйте, вот собственно код
<?php
  // ограничение размера файла
  $limit_size = 1*1024*1024; // 1 Mb
  // корректные форматы файлов
  $valid_format = array("jpeg", "jpg", "gif", "png");
  // путь до нового файла
  $path_file = "resource/img/avatars/";
  // имя нового файла
  $rand_name = md5(time() . mt_rand(0, 9999));

  if($_FILES){
    if($_FILES["avatar"]["size"] > $limit_size){
      echo  '<div class="inform"><div class="alert alert-danger alert-dismissable"><button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button><strong>Ошибка!</strong> Убедитесь что картинка не больше 1мб.</div></div>';
    }else{
      $format = end(explode(".", $_FILES["avatar"]["name"]));
      if(!in_array($format, $valid_format)){
        echo '<div class="inform"><div class="alert alert-danger alert-dismissable"><button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button><strong>Ошибка!</strong> Убедитесь что картинка формата (png,jpg,jpeg,png).</div></div>';
      }else{
        if(is_uploaded_file($_FILES["avatar"]["tmp_name"])){
          echo '<div class="inform"><div class="alert alert-success alert-dismissable"><button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button><strong>Супер!</strong> Теперь у вас новый аватар.</div></div>';
          move_uploaded_file($_FILES["avatar"]["tmp_name"], $path_file . $rand_name . ".$format");
          mysqli_query($link,"UPDATE `users` SET `avatar`= '/$path_file$rand_name.$format' WHERE id=$server");
        }else{
          echo '<div class="inform"><div class="alert alert-danger alert-dismissable"><button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button><strong>Ошибка!</strong> Ошибка загрузки.</div></div>';
        }
      }
    }
  }
?>


Можете его передалать чтобы фото сжималось при добавлении
или скиньте инфу или готовый код только чтобы было ("jpeg", "jpg", "gif", "png")
  • Вопрос задан
  • 63 просмотра
Пригласить эксперта
Ответы на вопрос 2
Комментировать
Ну а если ручками, то можно как-то так:
$src_path = $_FILES["avatar"]["tmp_name"];
$dest_path = $path_file . $rand_name . ".$format";
// загружаем картинку
$type = exif_imagetype($src_path);
switch ($type) {
	case IMAGETYPE_JPEG:
		$src_img = imagecreatefromjpeg($src_path);
		break;
	case IMAGETYPE_PNG:
		$src_img = imagecreatefrompng($src_path);
		break;
	case IMAGETYPE_GIF:
		$src_img = imagecreatefromgif($src_path);
		break;
	case IMAGETYPE_BMP:
		$src_img = imagecreatefrombmp($src_path);
		break;
	default:
		// ???
		// throw new \Exception("Unknown image type $type of file '$src_path'", 1);
		break;
}
// уменьшаем в рзамер 200х200 (для правильного масштабирования нужно ещё учесть соотношение сторон)
$dest_img = imagescale($src_img, 200, 200, -1, IMG_BICUBIC_FIXED);
// сохраняем результат в JPEG
if (!imagejpeg($dest_img, $dest_path, 85)) {
	// ???
	// throw new \Exception("Can't save JPEG image '$dest_path'", 1);
}
// освобождаем память
imagedestroy($src_img);
imagedestroy($dest_img);

Выдрал из реального проекта. Этот код вместо строки с move_uploaded()
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы