Перейти к содержимому



  • Закрытая тема Тема закрыта

Загрузка картинки с последющим тройным изменением размера

#21 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8
0

Отправлено 24 Март 2011 - 01:05

lesli007, С удалением это я намудрил - нужно писать:
	// Удаляем временный файл загруженного оригинала
unlink($file['tmp_name']);

И покажите исправленный код, пока сказать ничего не могу.
  • 0

#22 lesli007

lesli007
    Topic Starter
  • Пользователь
  • 108 сообщений
  • Репутация: -4

Отправлено 24 Март 2011 - 01:12

Ошибки исчезли. Картинки не создаются.
		  <?php 
/**
*
* $file - массив с данными (именем файла, временным именем файла, типом и т.д.)
* $dim_resize - размер, до которого будем изменять изображение (увеличивать или уменьшать)
* $side - на какую из сторон будем смотреть - ширина ("w") или высота "h"
* $save_file - имя файла с расширением, под которым хотим сохранить картинку
* $rotate - поворот картинки
* $quality - качество выходной картинки (для привьюшек можно и поменьше от 1 до 100)
*
*/

function resize($file, $dim_resize, $side = "w", $save_file="", $rotate = null, $quality = null)
{
// Если указано имя для сохранения, то изменяем стандартное
$file['name'] = ( $save_file != "" ) ? $save_file : $file['name'];

// Качество изображения по умолчанию
if ($quality == null)
$quality = 1000;

// 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;

// Поворачиваем изображение
$src = ( $rotate != null ) ? imagerotate($source, 0, 0) : $source;

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

// определяем коэффициент сжатия/растяжения
$ratio = ( $side == "w" ) ? $w_src / $dim_resize : $h_src / $dim_resize;

$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, $file['path_save'].$file['name'], $quality);
imagedestroy($dest);
imagedestroy($src);

return $file['path_save'].$file['name'];
}
// Пути загрузки файлов
$path = 'i/';
$tmp_path = 'tmp/';

// Массив допустимых значений типа файла
$types = array('image/gif', 'image/png', 'image/jpeg');

// Максимальный размер файла
$size = 4096000;

// Обработка запроса
if ($_SERVER['REQUEST_METHOD'] == 'POST')
{
// Проверяем тип файла
if (!in_array($_FILES['picture']['type'], $types))
die('<p>Запрещённый тип файла. <a href="?">Попробовать другой файл?</a></p>');

// Проверяем размер файла
if ($_FILES['picture']['size'] > $size)
die('<p>Слишком большой размер файла. <a href="?">Попробовать другой файл?</a></p>');

$file = $_FILES['picture']; // копируем параметры картинки в переменную $file
$file['path_save'] = $tmp_path; // добавляем к ним путь для сохранения resize-картинок

$files_resized = array(); // здесь будут храниться путь+имя resize-файлов

// Высчитываем id и создаем названия
$new_id = $myrow['id']+1;
$pic1="big_img".$new_id.".jpg";
$pic2="small_img".$new_id.".jpg";
$pic3="img".$new_id."_pic.jpg";
$pic4="img".$new_id."_ramka.jpg";
// сжимаем/увеличиваем по ширине картинку до 2056px, ширина - по пропорциям
$files_resized['big_img'] = resize($file, 2560, "w", $pic1, 0);
// сжимаем/увеличиваем по ширине картинку до 613px, ширина - по пропорциям
$files_resized['small_img'] = resize($file, 613, "w", $pic2, 0);
// сжимаем/увеличиваем по ширине картинку до 114px, высота - по пропорциям
$files_resized['img_pic'] = resize($file, 114, "w", $pic3, 0);
// сжимаем/увеличиваем по ширине картинку до 500px, высота - по пропорциям
$files_resized['img_ramka'] = resize($file, 105, "w", $pic4, 0);

// Удаляем временный файл загруженного оригинала
unlink($file['tmp_name']);

foreach($files_resized as $catalog => $name)
{
@copy($name, 'files/{$catalog}/' . basename($name)); // копируем картинки
unlink($name); // удаляем временные картинки
}

}

?>
<form method="post" enctype="multipart/form-data">
<input type="file" name="picture">
<br>
<input type="submit" value="Загрузить">
</form>

  • 0

#23 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 24 Март 2011 - 01:56

lesli007, да, что-то я не посмотрел. Конструкция {$catalog} сработает только при двойных кавычках. То есть:
	   @copy($name, "files/{$catalog}/" . basename($name)); // копируем картинки

Проверил все на локалке - работает.
  • 0

#24 lesli007

lesli007
    Topic Starter
  • Пользователь
  • 108 сообщений
  • Репутация: -4

Отправлено 24 Март 2011 - 02:02

ZiTosS, вы бог программирования!Без вас я бы не смог преобразовать первичный код. Спасибо за всё, тема закрыта
  • 0


Оформление форума – IPBSkins.ru