Делаем миниатюры на лету с использованием PHP

Здравствуйте. В сегодняшнем уроке мы будем делать небольшой PHP-скрипт, позволяющий нам из полноразмерных больших изображений делать миниатюры. Этот инструмент может пригодиться у Вас на сайте для создания аватаров или миниатюр к Вашим статьям. Для начала посмотрите демо получившейся формы и скачайте исходные файлы:

demosourse

Шаг 1. Конфигурация.

Нам понадобится в работе небольшой файл конфигурации. Для этого создаем файл config.php и прописываем туда нижеприведенный код, к которому я привожу комментарии для пояснения:

PHP:


<?
$final_width_of_image = 100; //Размер изображения которые Вы хотели бы получить (И ШИРИНА И ВЫСОТА)
$path_to_image_directory = 'images/full/'; //Папка, куда будут загружаться полноразмерные изображения
$path_to_thumbs_directory = 'images/thumbs/';//Папка, куда будут загружаться миниатюры
?>

Шаг 2. Конструкция окна загрузки.

Теперь создадим еще один файл - index.php и составим для него HTML-конструкцию для возможности загрузки файлов. Выглядеть код этой формы будет следующим образом:


<h1>Загрузка изображений:</h1>	
<form enctype="multipart/form-data" action="" method="post">		
<input type="file" name="fupload" />		
<input type="submit" value="Загрузить" />	
</form>

Шаг 3. Подготовка к загрузке.

Далее, как Вы уже поняли нам нужно будет подготовить нашу форму к отправке изображений на их сжатие, т. е. прописать те форматы, изображения которых мы собрались загружать и многое, многое другое... Ниже я привожу PHP-код, котрый Вы обязаны вставить в самом верху индексного файла, еще до тега <!DOCTYPE...>:



<?php 
  require 'config.php'; //Подключаем файл конфигурации
  require 'process.php'; //Подключаем файл-обработчик
if(isset($_FILES['fupload'])) {
    
  if(preg_match('/[.](jpg)|(gif)|(png)$/', //Ставим допустимые форматы изображений для загрузки
  $_FILES['fupload']['name'])) {
  
  $filename = $_FILES['fupload']['name'];
  $source = $_FILES['fupload']['tmp_name']; 
  $target = $path_to_image_directory . $filename;
  
  move_uploaded_file($source, $target);
  
  createThumbnail($filename); 
  }
  }
  ?>

Шаг 4. Скрипт сжатия фото.

На этом этапе мы должны создать файл process.php, занимающийся сжатием полноразмерных изображений и их выводом. Ниже я разместил код для этого файла с комментариями к нему:

PHP



<?
function createThumbnail($filename) {
    
  require 'config.php'; //Подключаем файл конфигурации
  
  if(preg_match('/[.](jpg)$/', $filename)) {
  $im = imagecreatefromjpeg($path_to_image_directory . $filename);
  } else if (preg_match('/[.](gif)$/', $filename)) {
  $im = imagecreatefromgif($path_to_image_directory . $filename);
  } else if (preg_match('/[.](png)$/', $filename)) {
  $im = imagecreatefrompng($path_to_image_directory . $filename);
  } //Определяем формат изображения
  
  $ox = imagesx($im);
  $oy = imagesy($im);
  
  $nx = $final_width_of_image;
  $ny = floor($oy * ($final_width_of_image / $ox));
  
  $nm = imagecreatetruecolor($nx, $ny);
  
  imagecopyresized($nm, $im, 0,0,0,0,$nx,$ny,$ox,$oy);
  
  if(!file_exists($path_to_thumbs_directory)) {
  if(!mkdir($path_to_thumbs_directory)) {
  die("Возникли проблемы! попробуйте снова!");
  } 
  }
 imagejpeg($nm, $path_to_thumbs_directory . $filename);
  $tn = '<img src="' . $path_to_thumbs_directory . $filename . '" alt="image" />';
  $tn .= '<br />Поздравляем! Ваше изображение успешно загружено и его миниатюра удачно выполнена. Выше Вы можете просмотреть результат:';
  echo $tn;
  }//Сжимаем изображение, если есть оишибки, то говорим о них, если их нет, то выводим получившуюся миниатюру

?>

Шаг 5. Подключение необходимых файлов.

Вот и последний шаг нашей славной работы... Теперь нам нужно в индексном файле подключить файл конфигурации и файл-обработчик изображений. Для этого в самом верху файла, сразу после открытия PHP вставляем следующие строки:


require 'config.php'; //Подключаем файл конфигурации
require 'process.php'; //Подключаем файл-обработчик

Также, не забываем о подключении конфигурационного файла к файлу-обработчику изображений. Ведь это очень важно! В файле process.php, также, вверху, сразу после открытия PHP вставляем следующий код:


require 'config.php'; //Подключаем файл конфигурации

Заключение.

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

С искренним уважением, Максим Курочкин

Данный урок подготовлен для вас командой сайта ruseller.com
Источник урока: www.nettuts.com
Перевел: Максим Курочкин
Урок создан: 18 Июня 2009
Просмотров: 62213
Правила перепечатки


5 последних уроков рубрики "PHP"

  • Фильтрация данных с помощью zend-filter

    Когда речь идёт о безопасности веб-сайта, то фраза "фильтруйте всё, экранируйте всё" всегда будет актуальна. Сегодня поговорим о фильтрации данных.

  • Контекстное экранирование с помощью zend-escaper

    Обеспечение безопасности веб-сайта — это не только защита от SQL инъекций, но и протекция от межсайтового скриптинга (XSS), межсайтовой подделки запросов (CSRF) и от других видов атак. В частности, вам нужно очень осторожно подходить к формированию HTML, CSS и JavaScript кода.

  • Подключение Zend модулей к Expressive

    Expressive 2 поддерживает возможность подключения других ZF компонент по специальной схеме. Не всем нравится данное решение. В этой статье мы расскажем как улучшили процесс подключение нескольких модулей.

  • Совет: отправка информации в Google Analytics через API

    Предположим, что вам необходимо отправить какую-то информацию в Google Analytics из серверного скрипта. Как это сделать. Ответ в этой заметке.

  • Подборка PHP песочниц

    Подборка из нескольких видов PHP песочниц. На некоторых вы в режиме online сможете потестить свой код, но есть так же решения, которые можно внедрить на свой сайт.

или авторизуйтесь, чтобы добавлять комментарии, оценивать уроки и сохранять их в личном кабинете
  • 18 Июня 2009 23:36
    Arnold
    А че-то не найден пишет:(
  • 18 Июня 2009 23:43
    МаксимКурочкин
    Извините... Все, я все исправил! Можете тестировать!
  • 18 Июня 2009 23:57
    Aleshka
    Демо у меня не работает. Урок думаю очень полезный.
  • 19 Июня 2009 00:02
    Viktor
    Да действительно урок очень полезный, но демо почемуто не работает ))
  • 19 Июня 2009 01:30
    Алекс
    Спасибо за урок!
  • 19 Июня 2009 02:01
    МаксимКурочкин
    Ребят исходники нормально работают можете скачивать и ставить у себя, демо утром будет готово!
  • 19 Июня 2009 02:08
    МаксимКурочкин
    Все готово, демо исправлено! Можете тестировать. По умолчанию допускаются файлы любых размеров с форматами- .jpg, .gif, .png P. S. Aleshka, Viktor : Спасибо Вам, что вовремя сообщили! ;-)
    • 2 Ноября 2011 22:57
      grego94
      у меня все равно ошибку выдает.... мне кажется что что-то с базой не то
  • 19 Июня 2009 07:47
    Евгений
    Надо проверить можно ли в этом скрипте выставлять уровень качества. А то при уменьшении качество картинки сильно ухудшается.
    • 21 Марта 2016 15:47
      harut01harut
      Простите Евгений у меня 1 такой вопрос, а можно это сделать так, чтобы картинки били круглими или такими какие у Вас на сайте.Заранее спасибо.
  • 19 Июня 2009 07:50
    ajan
    пасиб оч хороший урок
  • 19 Июня 2009 08:35
    МаксимКурочкин
    Евгений, я проверил, на счет качества ничего не нашел. Проверял у себя на локальном компьютере. Только у немногих фото качество ухудшалось, у многих же полноразмерных изображений, ькачество высокое, вообще супер получалось.
  • 19 Июня 2009 09:59
    Dimka
    Огромное спасиба :)
  • 19 Июня 2009 10:03
    Dimka
    А можно как то зделать чтобы на сервер грузилась только миниатюра? А чтобы полноразмерные изображения удалялись или вобще негрузились
  • 19 Июня 2009 10:18
    Виталий
    Браво! Классный урок. Так держать!
  • 19 Июня 2009 11:30
    Aleshka
    Так хорошо получилось с маленькими пикселями, а тут стоит ограничение на закачку? Гружу 2500x2000 ни чего не выводит.
  • 19 Июня 2009 11:30
    Сергей
    Отличный урок! Сразу же пригодился!!! На его основе попробовал организовать загрузку mp3 файлов, а не картинок..... Не получилось. я ведь ещё только учусь. Если можно, пожалуйста, сделайте подобный урок для загрузки музыки и песен. СПАСИБО!!!!!!! Вы лучшие!!!!!!!!
  • 19 Июня 2009 13:34
    МаксимКурочкин
    Aleshka, слишком большой размер изображения попробуйте взять поменьше! Сергей, такого, как Вы хотите не существует в природе=) Да, конечно была бы нужна эта вещица, однако и увы, только пожимаю плечами...
  • 19 Июня 2009 14:11
    positive
    Я уже третий день пытаюсь это смастерить сам! Спасибо!
  • 19 Июня 2009 15:13
    Серега
    а в чем смысл этого демо? я загружаю фото, ничего не происходит!?
  • 19 Июня 2009 15:16
    МаксимКурочкин
    фото какого формата и каких размеров? опишите его пожалуйста...
  • 19 Июня 2009 15:30
    Сергей
    Возвращаясь к загрузке mp3 файлов, интересно знать, почему такого не существует в природе? В Интернете существует! Например, на сайте Realmusic http://www.realmusic.ru/avilov/ Там любой желающий может загружать свои mp3. Тоже ведь PHP. Объясните, если я не прав.
  • 19 Июня 2009 16:14
    positive
    Загружать то можно, но сжимать и вырезать фрагменты скорее всего нельзя...ну с пхп....
  • 19 Июня 2009 16:36
    Сергей
    Значит всё таки можно?!!!!!! Классно! Будет шикарно, если изображения, да ещё и музыку посетители смогут выкладывать самостоятельно!!! А в mp3 ничего и не надо сжимать и вырезать, можно в инструкции сообщить о максимальном размере файлов. Например, сжатие не выше 128 кбит/сек и размер - до 3 МБ. Спасибо!!! Буду ждать нового урока на эту тему, и другим это непременно пригодится!
  • 19 Июня 2009 16:41
    Aleshka
    ну так максимальный размер можно увиличить?
  • 19 Июня 2009 17:09
    Сергей
    Главное, чтобы PHP-скрипт работал корректно, а с размерами можно будет поколдовать по-ходу... Я очень надеюсь на скорое появление очередного урока на данную тему.
  • 19 Июня 2009 18:47
    МаксимКурочкин
    Dimka: ДА, можно! Просто нужно еще один php-код прописать, но об этом уже не здесь...Может позже в подобном уроке сделаю! Сергей: Я думал, что еще мелодию и обрезать нужно, а так, конечно можно загружать мелодии и это очень легко. Если будет свободное время, постараюсь сделать такой урок!=) Aleshka: Советую Вам загружать размеры не более 1024x768!=) Всем удачи! Если еще что-нибудь непонятно, задавайте свои вопросы здесь!
  • 19 Июня 2009 20:43
    Сергей
    Спасибо, Максим! Вы меня обнадёжили, буду ждать урока!!!
  • 19 Июня 2009 22:24
    Dimka
    Максим, ок рас нездесь я задал вопрос в тех подержке. Вы или другие учасники проекта смогут мне там помочь и ответить?
  • 20 Июня 2009 15:34
    Илья
    Здравствуйте Евгений! Расскажите, пожалуйста, в рамках отдельного урока (на основе данного) как создать миниатюру, вырезав только необходимый кусок изображения. Поясню: например, нужен превью для галереи размером 120 на 120 - квадрат, а исходное изображение прямоугольное, так вот нужно уменьшить изображение и вырезать из него кусок 120 на 120 отталкиваясь от начальных координат, чтобы получилась красивая квадратная превью. Очень нужен такой код.
  • 20 Июня 2009 15:53
    Илья
    P.S. По предыдущему посту прошу прощения, не заметил, что автор статьи Максим Курочкин. Значит, моя просьба обращена к Максиму, впрочем как и ко всей команде Ruseller.com включая Евгения.
  • 21 Июня 2009 03:19
    Александр
    Максим! Подскажите. пожалуйста как можно применить этот урок к сайту созданном на joomla.
  • 21 Июня 2009 16:22
    ЕвгенийСтыценков
    Dimka, насчет твоего вопроса. Чтобы грузилась только миниатюра нельзя. В этом скрипте, как и в любом другом аналогичном, файл сначла загружается весь на сервер,и только потом над ним можно проводить какие-либо оперции. Нет файла на сервере, не с чем колдовать.
  • 22 Июня 2009 18:43
    Dimka
    Здраствуйте Максим еще раз) Евгений в ТП сказал чтобы я обратился тут к вам. немоглибы вы мне дать этот код ? пожалуста очень нужно если можите пришлите пожалуста сюда dimasrap5@gmail.com и инструкцию куда его всунуть или сразу готоый скрипт. За рание огромное спасибо. С уважением Дмитрий
  • 22 Июня 2009 23:32
    Dimka
    Евгений Стыценков Ну так реализовать же както можно чтобы большой файл потом удалился.
  • 23 Июня 2009 03:01
    Илья
    Насчет своего вопроса разобрался - оказалось проще некуда. Просто изменил параметры функции imagecopyresized и все :) Таким образом, можно налету создавать миниатюры изображений не искажая их пропорции. Теперь ответ на вопрос Евгения: чтобы качество не ухудшалось, вместо imagecopyresized следует использовать imagecopyresampled с теми же параметрами. Попробуйте и почувствуйте разницу.
  • 23 Июня 2009 06:59
    Евгений
    Илья, спасибо за полезный совет! надо будет, чтобы Максим дописал его в конце урока.
  • 23 Июня 2009 10:11
    Илья
    2 Евгений: пожалуйста...всегда рад помочь) Есть соображения сделать урок по моей проблеме - делать квадратные миниатюры из прямоугольных изображений, обрезая излишки по краям. Точнее проблему я уже решил, а урок сделать можно для остальных. Если интересно, пусть Максим со мной свяжется по мылу.
  • 23 Июня 2009 10:53
    МаксимКурочкин
    Здравствуйте! У всех прошу прощения за мое долгое отсутствие. Просто у меня были дела в другом городе и сейчас есть. На счет разработки урока по загрузке мелодии не сейчас. У меня совсем мало времени для разработки своих уроков. На счет того, чтобы грузилась одна миниатюра на сервер точно также. Илья можете написать мне на kurochkinmax@mail.com !(я еще раз прошу у всех прощения, просто нет сейчас совсем времени...)
  • 24 Июня 2009 15:53
    МихаилГорюнов
    Dimka, Удаляй полноразмерные фотки командой unlink(), только серв не удали =)
  • 25 Июня 2009 22:04
    Сергей
    Спасибо, Максим, что помните про загрузку мелодий!!! Честно говоря, я уж думал - забыли о моей просьбе... Буду ждать, торопить не смею. Ещё раз, спасибо!!!
  • 29 Июля 2009 22:43
    Настя
    Здравствуйте Максим! Спасибо огромное за урок!!! Только не могу понять как загружать картинки размером 2-5 мегабайт? Если я правильно понимаю, нужно прописать еще один код в php? Помогите пожалуйста. Заранее огромное спасибочки!!!
  • 30 Июля 2009 19:38
    user
    Как же это адаптировать в 2 файла (upload.php и add.php), и чтобы имя фотки и минифотки заносилось в БД? Help! =) Самостоятельно неполучаться ....
  • 8 Августа 2009 01:26
    Александр
    Я новечок в этом деле, но вот небольшую модификацию сделал для загрузки картинок не стандартных размеров в определенном диапазоне. Добавить в config.php: $final_width_of_image = 174; //Максимальная ширина изображения которые Вы хотели бы получить $final_height_of_image = 130; //Максимальная высота изображения которые Вы хотели бы получить Добавить в process.php: $ox = imagesx($im); $oy = imagesy($im); if ($ox > $oy) { $nx = $final_width_of_image; $ny = floor($oy * ($final_width_of_image / $ox)); if($ny > $final_height_of_image) { $ny = $final_height_of_image; $nx = floor($ox * ($final_height_of_image / $oy)); } } if ($ox < $oy) { $ny = $final_height_of_image; $nx = floor($ox * ($final_height_of_image / $oy)); if($nx > $final_width_of_image) { $nx = $final_width_of_image; $ny = floor($oy * ($final_width_of_image / $ox)); } } $nm = imagecreatetruecolor($nx, $ny); Простите, если зря...
  • 28 Августа 2009 00:15
    asim
    Всем привет. Вот моя проблемка. Скачал ваш скрипт, впроцесе тестирование при загрузке выдает такое:Warning: imagecreatefromjpeg(images/full/b5a2.jpg) [function.imagecreatefromjpeg]: failed to open stream: No such file or directory in Z:\home\localhost\www\thumbnails\process.php on line 8 Warning: imagecreatetruecolor() [function.imagecreatetruecolor]: Invalid image dimensions in Z:\home\localhost\www\thumbnails\process.php on line 21 Поздравляем! Ваше изображение успешно загружено и его миниатюра удачно выполнена. Выше Вы можете просмотреть результат: Вопрос к автору,что это такое и как от этого избавится?
  • 31 Августа 2009 14:13
    karas
    Доброго времени суток. Подскажите, пожалуйста, как сделать чтобы скрипт загружал картинки не только с раширениями jpg, jpeg, png а и понимал JPG, JPEG, PNG? Попробывал несколько вариантов - не помогает. Может у кого есть какие-то идеи?
    • 27 Июля 2011 02:00
      maxim2011
      Эту проблему можно частично решить правкой кода у двой файлах: - у index.php земенить
      (jpg)|(gif)|(png)
      на
      (jpg)|(JPG)|(gif)|(GIF)|(png)|(PNG)
      - у process.php заменить
      	if(preg_match('/[.](jpg)$/', $filename))	{	$im = imagecreatefromjpeg($path_to_image_directory . $filename);	}	else if (preg_match('/[.](gif)$/', $filename))	{	$im = imagecreatefromgif($path_to_image_directory . $filename);	}	else if (preg_match('/[.](png)$/', $filename))	{	$im = imagecreatefrompng($path_to_image_directory . $filename);	}
      на
      	if(preg_match('/[.](jpg)$/', $filename))	{	$im = imagecreatefromjpeg($path_to_image_directory . $filename);	}	else if (preg_match('/[.](JPG)$/', $filename))	{	$im = imagecreatefromjpeg($path_to_image_directory . $filename);	}	else if (preg_match('/[.](gif)$/', $filename))	{	$im = imagecreatefromgif($path_to_image_directory . $filename);	}	else if (preg_match('/[.](GIF)$/', $filename))	{	$im = imagecreatefromgif($path_to_image_directory . $filename);	}	else if (preg_match('/[.](png)$/', $filename))	{	$im = imagecreatefrompng($path_to_image_directory . $filename);	}	else if (preg_match('/[.](PNG)$/', $filename))	{	$im = imagecreatefrompng($path_to_image_directory . $filename);	}
  • 26 Сентября 2009 16:22
    Ян
    Цитата: Автор: user (2009-07-30 19:38:36) Как же это адаптировать в 2 файла (upload.php и add.php), и чтобы имя фотки и минифотки заносилось в БД? Help! =) Самостоятельно неполучаться .... Тоже хотел это реализовать, но самому не удается. Просим Евгения (Максима) о новом уроке!
  • 1 Октября 2009 01:04
    asim
    Ян я хоть и не автор этого но разобрался. У нас есть $filename тута хронится имя картинки, а если есть переменая и БД значит мы эту переменую занесем в БД в нужное поле например filename. И зачем 2а файла, я в один вложился.
  • 1 Октября 2009 02:23
    Paramoun
    Я переробив скріпт тепер він робить дві фотографії ону шиоиною 800 другу шириною 100пх; можна добавляти скільки завгодно фотографій! karas:preg_match ('/[.](jpg)|(JPG)$/', $filename) і так для трьох типів і preg_match ('/[.](jpg)|(gif)|(png)|(JPG)|(GIF)|(PNG)$/'.....
  • 1 Октября 2009 02:30
    Paramoun
    asim: в мене була така ж проблема є декілька варіантів: 1) переіменуйте папку full ; 2) перевірти чи павельний шлях до папки; 3)якщо в вас стоїть max_file_size=2M а ви загружаєте більший файл; Але скоріш за все перший варіант повинин допомогти!
  • 20 Октября 2009 18:50
    brain_brain
    Добрый день! У меня такая проблема: на локальном хосте всё работает нормально, а вот на хостинге не работает. Когда нажимаешь загрузить сверху появляется надпись "image" а миниатюры нет
  • 20 Ноября 2009 23:56
    rikost
    Здравствуйте, а можно поподробнее как создать с одной картинки 2 миниатюры разных размеров...заранее благодарен..
  • 23 Ноября 2009 13:41
    виктор
    Уважаемый Максим! Великолепный скрипт! Работает как швейцарские часы, но одно непонятно - зачем в скрипте две функции: file_exists($path_to_thumbs_directory) !mkdir($path_to_thumbs_directory)
  • 25 Ноября 2009 15:19
    brand
    Качество задается imagejpeg третьим параметром, но дело не в качестве а в неравномерных пропорциях при уменьшении. Хотел кинуть сюда код, но ругается на превышение кол-ва символов. Кидаю остаток в сл посте: function createThumbnail($filename, $date) { $width = 200; //Размер изображения которые Вы хотели бы получить (И ШИРИНА И ВЫСОТА) $height = 160; $path_to_image_directory = '../content/photo/full/'; //Папка, куда будут загружаться полноразмерные изображения $path_to_thumbs_directory = '../content/photo/thumbs/';//Папка, куда буду тзгружать миниатюры $rgb=0xffffff; if (!file_exists($path_to_image_directory . $date . "_" . $filename)) return false; $size = getimagesize($path_to_image_directory . $date . "_" . $filename); if ($size === false) return false; $format = strtolower(substr($size['mime'], strpos($size['mime'], '/')+1)); $icfunc = "imagecreatefrom" . $format; if (!function_exists($icfunc)) return false;
  • 25 Ноября 2009 15:20
    brand
    вторая часть: $x_ratio = $width / $size[0]; $y_ratio = $height / $size[1]; $ratio = min($x_ratio, $y_ratio); $use_x_ratio = ($x_ratio == $ratio); $new_width = $use_x_ratio ? $width : floor($size[0] * $ratio); $new_height = !$use_x_ratio ? $height : floor($size[1] * $ratio); $new_left = $use_x_ratio ? 0 : floor(($width - $new_width) / 2); $new_top = !$use_x_ratio ? 0 : floor(($height - $new_height) / 2); $isrc = $icfunc($path_to_image_directory . $date . "_" . $filename); $idest = imagecreatetruecolor($width, $height); imagefill($idest, 0, 0, $rgb); imagecopyresampled($idest, $isrc, $new_left, $new_top, 0, 0, $new_width, $new_height, $size[0], $size[1]); imagejpeg($idest, $path_to_thumbs_directory . $date . "_" . $filename, 100); imagedestroy($isrc); imagedestroy($idest); return true;}
  • 14 Января 2010 11:02
    Cheiz
    ДЕМО НЕ РАБОТАЕТ, ВСЕ В ОШИБКАХ
  • 29 Января 2010 20:55
    fishunya
    Присоединяюсь к Cheiz: ДЕМО НЕ РАБОТАЕТ, ВСЕ В ОШИБКАХ, открывал в Opera и в IE. Исправьте пожалуйста.
  • 1 Февраля 2010 20:15
    Hector
    Может кому пригодится написал все в классе, отдельной функцией, есть учет как максимальной ширины и высоты, внимание переменные различаются от работы автора <?php class IMG { //функция для сжатия картинки, задается путь к файлу (sourse) максимальный х и максимальный у public function zoomimg($sourse_scr,$mx,$my) { //узнать информацию о картинке $param= getimagesize($sourse_scr); //в зависимости от типо картинке создаем переменную switch($param[2]) { case 1: $sourse=imagecreatefromgif($sourse_scr); break; case 2: $sourse=imagecreatefromjpeg($sourse_scr); break; case 3: $sourse=imagecreatefrompng($sourse_scr); break; } //определяем размер исходящей картнки
  • 1 Февраля 2010 20:15
    Hector
    часть 2я //а надо ли вообще что нибудь изменять $param[0 ] - x $param[1] - y if($param[0]>$mx || $param[1]>$my) { $rx=$mx; $ry=$my; //получаем коофицент разности сторон $imgcon=$param[0]/$param[1]; //если х>y и пропорционально уменьшенный у, меньше чем допустимый лимит, то х остается максимальным а у находим в соотношении кофицента if($imgcon>1 && $mx/$imgcon<$my) $ry=floor ($mx/$imgcon); //значит у равно максимальный, а х находим в соответсвии пропроций else $rx=floor ($imgcon*$my); //создание файла подкладки, куда бует помещаться готовая картика $r=imagecreatetruecolor($rx,$ry); //копируем изображение со старого на новый! при этом уменьшаем его! imagecopyresampled ($r,$sourse,0,0,0,0,$rx,$ry,$param[0],$param[1]); }else $r=$sourse; //запись ресунка, адрес выберети свой imagepng($r,'/test2.png'); } } ?>
  • 8 Февраля 2010 19:58
    FireSleet
    Плиз! Когда демо исправят?
  • 10 Февраля 2010 00:06
    BIGGERST
    Здраствуйте Все! Вот увидел этот урок,вроде то что мне надо,но не получается! Мне нужно при добавлении товара добавить картинку (через такую же кнопку обзор),чтоб она добавлялась в базу! Подскажите как сделать!!!!!! Могу скинуть код,куда хочу вставить это поле ...!
  • 10 Февраля 2010 00:08
    BIGGERST
    Мне даже не обязательно что бы он изменял размер,главное чтоб закачал через обзор,и подставил путь до этой картинки! Помогите пожалуста!
  • 10 Февраля 2010 08:25
    Valik
    Ребята! Ну неужели впадлу было прокоментировать каждую строку! Новички совсем запутаются! Например то что "require ' '; //Подключение файла" это и ежу понятно! А вот что "imagecopyresized($nm, $im, 0,0,0,0,$nx,$ny,$ox,$oy);" делает так и остаеться для них загадкой!
  • 2 Марта 2010 17:52
    migalo
    да, очень хотелось бы поподробнее, не могу разобраться какие части кода и куда стоит добавить в существующие страницы(new и add) с занесением в базу данных адреса картинки.
  • 15 Марта 2010 02:52
    Alex_V
    Для того, чтобы улучшить качество миниатюры, нужно в файле process.php заменить стоку imagejpeg($nm, $path_to_thumbs_directory . $filename); на imagejpeg($nm, $path_to_thumbs_directory . $filename, 100);
  • 27 Марта 2010 00:34
    wader
    Как по мне то универсальней так. function create_small($name_big,$name_small,$max_x, $max_y) { list($x, $y, $t, $attr) = getimagesize($name_big); if ($t == IMAGETYPE_GIF) $big=imagecreatefromgif($name_big); else if ($t == IMAGETYPE_JPEG) $big=imagecreatefromjpeg($name_big); else if ($t == IMAGETYPE_PNG) $big=imagecreatefrompng($name_big); else return; if ($x > $y) { $xs=$max_x; $ys=$max_x/($x/$y); } else { $ys=$max_y; $xs=$max_y/($y/$x); } $small=imagecreatetruecolor ($xs,$ys); $res = imagecopyresampled($small,$big,0,0,0,0,$xs,$ys,$x,$y); imagedestroy($big); imagejpeg($small,$name_small); imagedestroy($small); }
  • 27 Марта 2010 00:34
    wader
    // $name_big имя исходного изображения ( если брать за пример из урока то это $filename ШАГ 3) //$name_small Имя конечного файла // $max_x, $max_y думаю понятно. // пример использования функции create_small("$filename","upload/$filename",120,90); ?> //Преимущество в том что функцию можно использовать много раз с разными параметрами.
  • 25 Апреля 2010 00:49
    Espando
    ЗдОрово! Замечательный пример! А возможно ли занести результат в xml файл? Я пытаюсь таким образом добавить изображения в Flash-галерею. Стоит ли мне дальше изобретать велосипед?)
  • 27 Апреля 2010 21:02
    Денисов
    демо не работает
  • 2 Мая 2010 21:37
    bloger
    Скачал исходник попробовал загрузить анимацию, анимационные эффекты пропадают. Можно ли что нибудь с этим сделать???
  • 11 Мая 2010 09:49
    Wildcdu
    <?php function ImageResizeAndSave($Inc,$Out,$maxW) { $params=GetImageSize($Inc); $imageW=$params['0']; $imageH=$params['1']; switch ( $params[2] ) { case 1: $source = imagecreatefromgif($Inc); break; case 2: $source = imagecreatefromjpeg($Inc); break; case 3: $source = imagecreatefrompng($Inc); break; } $maxH=floor($maxW*$imageH/$imageW); $new_resource = imagecreatetruecolor($maxW, $maxH); imagecopyresampled($new_resource, $source, 0, 0, 0, 0, $maxW, $maxH, $imageW, $imageH); switch ( $params[2] ) { case 1: $source = ImageGif($new_resource,$Out); break; case 2: $source = ImageJpeg($new_resource,$Out); break; case 3: $source = ImagePng($new_resource,$Out); break; } } ?> вот конструкция щас дам пример реализации
  • 11 Мая 2010 09:51
    Wildcdu
    $ps_folder= $zserver.'main/eskiz/'; $ps_folder_mini= $zserver.'main/eskiz_mini/'; $ps_folder_mini_2= $zserver.'main/eskiz_mini_2/'; $ps_filename="m_".rndwindow(). '_'.rndwindow().'.'.$ps_ext; while (file_exists($ps_folder.$ps_filename)= =true) { $ps_filename="m_".rndwindow( ).'_'.rndwindow().'.'.$ps_ext; } $pb1=0; $ps1=copy($_FILES["ps_file"] ["tmp_name"],$ps_folder.$ps_filename); if ($_FILES["ps_file"]["name"]<>'') { ImageResizeAndSave ($ps_folder.$ps_filename,$ps_folder_mini.$ps_filename,120); ImageResizeAndSave ($ps_folder.$ps_filename,$ps_folder_mini_2.$ps_filename,80); } вот пример реализации навтыкал пробелов иначе не давало написать
  • 10 Сентября 2010 00:25
    goplit
    Не работает демо!
    • 11 Января 2011 18:38
      baxxab
      Привет всем! Прошу сильно не пинять я токо учусь а хочу задать такой вопрос: у меня есть сайт которого я создал по урокам Евгения Попова (классные уроки делает Попов) вот собственно такая задача: в поле для добавления миниатюры путь к файлу нужно прописать вручную что очень неудобно, как сделать что-б рядом с поле было кнопка "Обзор" что-б при её нажатие можно было бы выбрать файл? Может есть что почитать на эту тему заранее спасибо!
  • 7 Февраля 2011 01:10
    cemen_1980
    Warning: move_uploaded_file(images/full/1258829680.jpg) [function.move-uploaded-file]: failed to open stream: Permission denied in /home/www/ruseller.com/public_html/lessons/les294/example/index.php on line 14 Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move '/tmp/phpmENmXO' to 'images/full/1258829680.jpg' in /home/www/ruseller.com/public_html/lessons/les294/example/index.php on line 14 Warning: imagecreatefromjpeg(images/full/1258829680.jpg) [function.imagecreatefromjpeg]: failed to open stream: No such file or directory in /home/www/ruseller.com/public_html/lessons/les294/example/process.php on line 8 Warning: imagesx(): supplied argument is not a valid Image resource in /home/www/ruseller.com/public_html/lessons/les294/example/process.php on line 15 Warning: imagesy(): supplied argument is not a valid Image resource in /home/www/ruseller.com/public_html/lessons/les294/example/process.php on line 16 Warning: Division by zero in /home/www/ruseller.com/public_html/lessons/les294/example/process.php on line 19 Warning: imagecreatetruecolor() [function.imagecreatetruecolor]: Invalid image dimensions in /home/www/ruseller.com/public_html/lessons/les294/example/process.php on line 21 Warning: imagecopyresized(): supplied argument is not a valid Image resource in /home/www/ruseller.com/public_html/lessons/les294/example/process.php on line 23 Warning: imagejpeg(): supplied argument is not a valid Image resource in /home/www/ruseller.com/public_html/lessons/les294/example/process.php on line 31 image Поздравляем! Ваше изображение успешно загружено и его миниатюра удачно выполнена. Выше Вы можете просмотреть результат: Вот такие пироги, млин...
  • 8 Февраля 2011 14:46
    Perfecthus
    Почему-то демо не работает
  • 21 Июня 2011 14:14
    muha10
    Проблема с PNG файломи, не обрабатываются, ошибку дывает ..., с jpg все норм, и еще в скрипте не учитан формат JPG, у кого-то он может быть заглавными буквами, и тога не пройдет обработку фото .. И еще 1 момент, смысл та скрипта в чем ? сжатие для уменьшения размера, для экономии места на сервере, а если остается оригинал на серве смысл сжатия ? можно было просто из него в миниатюне кинуть на аву, в прочем для тех кто не знает как удалять оригинал после обработки: В конце скрипта добавляем (перед закрытием предпоследней фигурной скобки unlink ($target); if(isset($_FILES['fupload'])) { ... move_uploaded_file($source, $target); createThumbnail($filename); --> unlink ($target); <-- } } В прочем скрипт хороший, давно искал подобный, спасибо автору!
  • 12 Июля 2011 08:40
    ArJero
    Warning: move_uploaded_file(images/full/Wallpapers-room_com___N_O_V_A_by_ladyrapid_1680x1050.jpg) [function.move-uploaded-file]: failed to open stream: Permission denied in /home/www/ruseller.com/public_html/lessons/les294/example/index.php on line 14
    Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move '/tmp/phpCppILI' to 'images/full/Wallpapers-room_com___N_O_V_A_by_ladyrapid_1680x1050.jpg' in /home/www/ruseller.com/public_html/lessons/les294/example/index.php on line 14
    Warning: imagecreatefromjpeg(images/full/Wallpapers-room_com___N_O_V_A_by_ladyrapid_1680x1050.jpg) [function.imagecreatefromjpeg]: failed to open stream: No such file or directory in /home/www/ruseller.com/public_html/lessons/les294/example/process.php on line 8
    Warning: imagesx(): supplied argument is not a valid Image resource in /home/www/ruseller.com/public_html/lessons/les294/example/process.php on line 15
    Warning: imagesy(): supplied argument is not a valid Image resource in /home/www/ruseller.com/public_html/lessons/les294/example/process.php on line 16
    Warning: Division by zero in /home/www/ruseller.com/public_html/lessons/les294/example/process.php on line 19
    Warning: imagecreatetruecolor() [function.imagecreatetruecolor]: Invalid image dimensions in /home/www/ruseller.com/public_html/lessons/les294/example/process.php on line 21
    Warning: imagecopyresized(): supplied argument is not a valid Image resource in /home/www/ruseller.com/public_html/lessons/les294/example/process.php on line 23
    Warning: imagejpeg(): supplied argument is not a valid Image resource in /home/www/ruseller.com/public_html/lessons/les294/example/process.php on line 31
    image
    ???????????! ???? ??????????? ??????? ????????? ? ??? ????????? ?????? ?????????. ???? ?? ?????? ??????????? ?????????: 
    Хз у меня не пашет, демо выдаёт кучу ошибок(
    • 17 Июля 2011 23:46
      bazilio100lei
      Да, демка слетела...
  • 31 Июля 2011 22:27
    sergeywww
    Не подскажите? Если загружаемый файл на сайте больше 2мб. А на сервере upload_max_filesize=2 мб. Возможно ли его уменьшить до загрузки на сервер?
  • 2 Августа 2011 19:47
    Dmitri_Ambaloff
    Ошибочка в файле демо!
  • 23 Августа 2011 11:50
    KuleshD
    Warning: move_uploaded_file(images/full/image_124464677078972900_1.jpg) [function.move-uploaded-file]: failed to open stream: Permission denied in /home/www/ruseller.com/public_html/lessons/les294/example/index.php on line 14 Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move '/tmp/phpYxgcT4' to 'images/full/image_124464677078972900_1.jpg' in /home/www/ruseller.com/public_html/lessons/les294/example/index.php on line 14 Warning: imagecreatefromjpeg(images/full/image_124464677078972900_1.jpg) [function.imagecreatefromjpeg]: failed to open stream: No such file or directory in /home/www/ruseller.com/public_html/lessons/les294/example/process.php on line 8 Warning: imagesx(): supplied argument is not a valid Image resource in /home/www/ruseller.com/public_html/lessons/les294/example/process.php on line 15 Warning: imagesy(): supplied argument is not a valid Image resource in /home/www/ruseller.com/public_html/lessons/les294/example/process.php on line 16 Warning: Division by zero in /home/www/ruseller.com/public_html/lessons/les294/example/process.php on line 19 Warning: imagecreatetruecolor() [function.imagecreatetruecolor]: Invalid image dimensions in /home/www/ruseller.com/public_html/lessons/les294/example/process.php on line 21 Warning: imagecopyresized(): supplied argument is not a valid Image resource in /home/www/ruseller.com/public_html/lessons/les294/example/process.php on line 23 Warning: imagejpeg(): supplied argument is not a valid Image resource in /home/www/ruseller.com/public_html/lessons/les294/example/process.php on line 31 image ???????????! ???? ??????????? ??????? ????????? ? ??? ????????? ?????? ?????????. ???? ?? ?????? ??????????? ?????????: ???????? ???????????: Это вышло вместо загрузки картинки, не думаю, что так должно быть ....
    • 29 Августа 2011 15:44
      zorka
      проверте начальный и конечный теги PHP во всех трёх файлах ;)
      <?php
      ...
      ?>
      и тогда всё работает:)
  • 28 Октября 2011 21:42
    Access116
    отличная вещь, спасибо. и в комментариях нашел много полезного, вам тоже спасибо)) и свое наблюдение, если вам большое изображение не требуется, то не обязательно его удалять, можно просто указать одну и ту же папку исходного и конечного файла, тогда конечный файл просто будет заменять исходный.
  • 25 Марта 2012 18:05
    Рамазан Ибрагимов
    МаксимКурочкин, а как сделать чтобы размер изображения менялся по высоте и по ширине? мне как бы нужно не 100х100, а 126х180. Заранее спасибо!
  • 27 Января 2014 00:04
    big_eugen
    Очень полезная штука. Вот только миниатюры больших изображений не делает. Подскажите пожалуйста, как исправить?
  • 11 Октября 2014 01:55
    justice_kg
    Здравствуйте. А как сделать так чтобы у первой загруженной картинки было имя 1.jpg, у второй 2.jpg, у третьей 3.jpg и т.д. ?
  • 20 Октября 2015 23:13
    bairon
    а как сделать нужный мне размер миниатюры?
^ Наверх ^