Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Загрузка фото и их ресайз [2]
Покинул форум
Сообщений всего: 12
Дата рег-ции: Авг. 2014
Помог: 0 раз(а)
Sail пишет:
gregst пишет:
почитал описание и глаз ни за что не зацепился
Что возвращает функция mkdir?
Для чего используется $path далее?
Что после всего этого оказывается в $slides?
И сравните с названием каталога, в который копируете файлы из временной директории.
mkdir создает папку с заданным названием, соответственно $path хранит путь к нужной папке.
в $slides должен быть массив с перечнем файлов, которые лежат в папке $slides
массив перебирается поэлементно и с каждым элементом делается ресайз
я что-то упускаю, где-то чего-то не вижу или не понимаю?
Sail
Отправлено: 14 Августа, 2014 - 15:19:32
Участник
Покинул форум
Сообщений всего: 1131
Дата рег-ции: Февр. 2014
Помог: 57 раз(а)
gregst, mkdir создаёт папку. Но что эта функция возвращает? Значение типа bool, результат работы функции. Никак не путь до созданного каталога.
gregst
Отправлено: 14 Августа, 2014 - 15:46:34
Новичок
Покинул форум
Сообщений всего: 12
Дата рег-ции: Авг. 2014
Помог: 0 раз(а)
Sail пишет:
gregst, mkdir создаёт папку. Но что эта функция возвращает? Значение типа bool, результат работы функции. Никак не путь до созданного каталога.
При этом появляется ошибка
Warning: imagejpeg() [function.imagejpeg]: Unable to open '123/preview' for writing: Is a directory in /home/a/*****/public_html/test/function.php on line 40
Хотя 1. $subdir=mkdir('123/preview', 0777);
2. руками проверил - права 777
RickMan
Отправлено: 14 Августа, 2014 - 15:54:09
Участник
Покинул форум
Сообщений всего: 1033
Дата рег-ции: Май 2012
Помог: 30 раз(а)
Вы читать умеете?
Цитата:
Описание
int imagejpeg (resource image [, string filename [, int quality]])
Видите что написано на месте второго значения? filename а не директория. Да и ошибка говорит о том же. Что 123/preview это директория, а не файл. Мы вам должны помочь с php или с чтением?
Sail
Отправлено: 14 Августа, 2014 - 16:13:42
Участник
Покинул форум
Сообщений всего: 1131
Дата рег-ции: Февр. 2014
Помог: 57 раз(а)
Раз уж жёстко прописали $resource_src, то давайте вернёмся к:
Тут тоже надо изменить параметр функции.
А затем уже для формирования filename, как любезно заметил RickMan, в цикле по $slides из $slide выделить имя файла и присоединить его к $resource_src.
С этим поможет справиться функция pathinfo
gregst
Отправлено: 14 Августа, 2014 - 17:53:56
Новичок
Покинул форум
Сообщений всего: 12
Дата рег-ции: Авг. 2014
Помог: 0 раз(а)
Sail пишет:
Раз уж жёстко прописали $resource_src, то давайте вернёмся к:
Тут тоже надо изменить параметр функции.
А затем уже для формирования filename, как любезно заметил RickMan, в цикле по $slides из $slide выделить имя файла и присоединить его к $resource_src.
С этим поможет справиться функция pathinfo
поправьте меня, пожалуйста:
$slides = glob("123/*.jpg") #открываем заданную папку, получаем массив с названиями файлов
if(count($slides) != 0 ) #начинаем с нулевого элемента и движемся дальше по единице в цикле пока все элементы не кончатся
{
foreach($slides as $slide)
{
$path_parts = pathinfo('$slide'); #получаем массив с данными о файле - название, расширение, папка...
$source = imagecreatefromjpeg($slide); imagecreatefromjpegсоздаем новое изображение и кладем его в переменную source
$params = getimagesize($slide); #получаем массив с размерами исходного изображения
$resource_width = 100; #задаем размеры нового изображения
$resource_height = 100;
$resource = imagecreatetruecolor($resource_width, $resource_height); #создаем холст нового изображения
imagecopyresampled($resource, $source, 0, 0, 0, 0,$resource_width, $resource_height, $params[0], $params[1]); #копируем на холст старое изображение с новыми размерами
$resource_src = $path_parts['basename']; #определяем название файла
imagejpeg($resource, "preview/".$resource_src); #сохраняем файл в папку preview со старым названием
}
}
Правильная логика?
Только у меня так ничего вообще не работает=(
tato
Отправлено: 15 Августа, 2014 - 00:54:08
Посетитель
Покинул форум
Сообщений всего: 468
Дата рег-ции: Сент. 2011 Откуда: Владивосток
Помог: 8 раз(а)
if(count($slides) != 0 ) // проверяем нашли ли мы изображения
$slides=glob("123/*.jpg");#открываем заданную папку, получаем массив с названиями файлов
if(count($slides)!=0)#начинаем с нулевого элемента и движемся дальше по единице в цикле пока все элементы не кончатся
{
foreach($slidesas$slide)
{
$path_parts=pathinfo('$slide');#получаем массив с данными о файле - название, расширение, папка...
$source=imagecreatefromjpeg($slide);#создаем новое изображение и кладем его в переменную source
$params=getimagesize($slide);#получаем массив с размерами исходного изображения
$resource_width=100;#задаем размеры нового изображения
$resource_height=100;
$resource=imagecreatetruecolor($resource_width,$resource_height);#создаем холст нового изображения
imagecopyresampled($resource,$source, 0, 0, 0, 0,$resource_width,$resource_height,$params[0],$params[1]);#копируем на холст старое изображение с новыми размерами
$resource_src=$path_parts['basename'];#определяем название файла
imagejpeg($resource,"123/preview/1.jpg");#сохраняем файл в папку preview со старым названием
}
}
Если делать так, то создаются обе папки, в папку 123 складывается оригинал, создается ресайзная картинка, в папку 123/preview складывается превьющка 100*100 с называием 1.jpg
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.