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]

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (2): « 1 [2]   

> Без описания
gregst
Отправлено: 14 Августа, 2014 - 15:10:51
Post Id


Новичок


Покинул форум
Сообщений всего: 12
Дата рег-ции: Авг. 2014  


Помог: 0 раз(а)




Sail пишет:
gregst пишет:
почитал описание и глаз ни за что не зацепился

Что возвращает функция mkdir?
Для чего используется $path далее?
Что после всего этого оказывается в $slides?
И сравните с названием каталога, в который копируете файлы из временной директории.



mkdir создает папку с заданным названием, соответственно $path хранит путь к нужной папке.

в $slides должен быть массив с перечнем файлов, которые лежат в папке $slides
массив перебирается поэлементно и с каждым элементом делается ресайз

я что-то упускаю, где-то чего-то не вижу или не понимаю?
 
 Top
Sail
Отправлено: 14 Августа, 2014 - 15:19:32
Post Id



Участник


Покинул форум
Сообщений всего: 1131
Дата рег-ции: Февр. 2014  


Помог: 57 раз(а)




gregst, mkdir создаёт папку. Но что эта функция возвращает? Значение типа bool, результат работы функции. Никак не путь до созданного каталога.
 
 Top
gregst
Отправлено: 14 Августа, 2014 - 15:46:34
Post Id


Новичок


Покинул форум
Сообщений всего: 12
Дата рег-ции: Авг. 2014  


Помог: 0 раз(а)




Sail пишет:
gregst, mkdir создаёт папку. Но что эта функция возвращает? Значение типа bool, результат работы функции. Никак не путь до созданного каталога.



вот теперь понятно)

прописываю жестко
PHP:
скопировать код в буфер обмена
  1. $resource_src = '123/preview';
  2. imagejpeg($resource, $resource_src);


При этом появляется ошибка
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
 
 Top
RickMan
Отправлено: 14 Августа, 2014 - 15:54:09
Post Id


Участник


Покинул форум
Сообщений всего: 1033
Дата рег-ции: Май 2012  


Помог: 30 раз(а)




Вы читать умеете?
Цитата:

Описание
int imagejpeg (resource image [, string filename [, int quality]])


Видите что написано на месте второго значения? filename а не директория. Да и ошибка говорит о том же. Что 123/preview это директория, а не файл. Мы вам должны помочь с php или с чтением?
 
 Top
Sail
Отправлено: 14 Августа, 2014 - 16:13:42
Post Id



Участник


Покинул форум
Сообщений всего: 1131
Дата рег-ции: Февр. 2014  


Помог: 57 раз(а)




Раз уж жёстко прописали $resource_src, то давайте вернёмся к:
PHP:
скопировать код в буфер обмена
  1. $slides = glob($path."/*.{jpg,png,gif}", GLOB_BRACE);

Тут тоже надо изменить параметр функции.
А затем уже для формирования filename, как любезно заметил RickMan, в цикле по $slides из $slide выделить имя файла и присоединить его к $resource_src.
С этим поможет справиться функция pathinfo
 
 Top
gregst
Отправлено: 14 Августа, 2014 - 17:53:56
Post Id


Новичок


Покинул форум
Сообщений всего: 12
Дата рег-ции: Авг. 2014  


Помог: 0 раз(а)




Sail пишет:
Раз уж жёстко прописали $resource_src, то давайте вернёмся к:
PHP:
скопировать код в буфер обмена
  1. $slides = glob($path."/*.{jpg,png,gif}", GLOB_BRACE);

Тут тоже надо изменить параметр функции.
А затем уже для формирования 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 со старым названием
}
}


Правильная логика?

Только у меня так ничего вообще не работает=(
 
 Top
tato
Отправлено: 15 Августа, 2014 - 00:54:08
Post Id



Посетитель


Покинул форум
Сообщений всего: 468
Дата рег-ции: Сент. 2011  
Откуда: Владивосток


Помог: 8 раз(а)




if(count($slides) != 0 ) // проверяем нашли ли мы изображения

gregst, сделайте так
PHP:
скопировать код в буфер обмена
  1.  
  2. if( count($slides) != 0 )
  3. {
  4.     foreach( $slides as $slide )
  5.     {
  6.         ...
  7.     }
  8. }
  9. else
  10. {
  11.     die( 'NO pictures for resize!' );
  12. }
  13.  

(Отредактировано автором: 15 Августа, 2014 - 00:55:13)



-----
просто ?: сложно
 
 Top
Sail
Отправлено: 15 Августа, 2014 - 08:27:46
Post Id



Участник


Покинул форум
Сообщений всего: 1131
Дата рег-ции: Февр. 2014  


Помог: 57 раз(а)




И в этом фрагменте
gregst пишет:
PHP:
скопировать код в буфер обмена
  1. imagejpeg($resource, "preview/".$resource_src); #сохраняем файл в папку preview со старым названием

при таком подходе наверняка придётся "123/" добавить к "preview/".

(Отредактировано автором: 15 Августа, 2014 - 08:48:27)

 
 Top
tato
Отправлено: 15 Августа, 2014 - 08:46:51
Post Id



Посетитель


Покинул форум
Сообщений всего: 468
Дата рег-ции: Сент. 2011  
Откуда: Владивосток


Помог: 8 раз(а)





Sail, что-то вы с цитированием попутали (=


-----
просто ?: сложно
 
 Top
Sail
Отправлено: 15 Августа, 2014 - 08:53:02
Post Id



Участник


Покинул форум
Сообщений всего: 1131
Дата рег-ции: Февр. 2014  


Помог: 57 раз(а)




tato пишет:

Sail, что-то вы с цитированием попутали (=

Тысяча извинений! На ближайшую кнопочку, видать, нажал... а она оказалась, как оказалось... Однако...
Улыбка
 
 Top
gregst
Отправлено: 15 Августа, 2014 - 08:57:07
Post Id


Новичок


Покинул форум
Сообщений всего: 12
Дата рег-ции: Авг. 2014  


Помог: 0 раз(а)




PHP:
скопировать код в буфер обмена
  1. $slides = glob("123/*.jpg");  #открываем заданную папку, получаем массив с названиями файлов
  2.  
  3.         if(count($slides) != 0 ) #начинаем с нулевого элемента и движемся дальше по единице в цикле пока все элементы не кончатся
  4.  
  5.                 {
  6.                        foreach($slides as $slide)
  7.  
  8.                                 {
  9.                                 $path_parts = pathinfo('$slide'); #получаем массив с данными о файле - название, расширение, папка...
  10.  
  11.                                 $source = imagecreatefromjpeg($slide);#создаем новое изображение и кладем его в переменную source
  12.  
  13.                                 $params = getimagesize($slide); #получаем массив с размерами исходного изображения
  14.  
  15.                                 $resource_width = 100; #задаем размеры нового изображения
  16.  
  17.                                 $resource_height = 100;
  18.  
  19.                                 $resource = imagecreatetruecolor($resource_width, $resource_height); #создаем холст нового изображения
  20.  
  21.                                 imagecopyresampled($resource, $source, 0, 0, 0, 0,$resource_width, $resource_height, $params[0], $params[1]); #копируем на холст старое изображение с новыми размерами
  22.  
  23.                                 $resource_src = $path_parts['basename']; #определяем название файла
  24.  
  25.                                 imagejpeg($resource, "123/preview/1.jpg"); #сохраняем файл в папку preview со старым названием
  26.  
  27.                                 }
  28.                                        
  29.                 }


Если делать так, то создаются обе папки, в папку 123 складывается оригинал, создается ресайзная картинка, в папку 123/preview складывается превьющка 100*100 с называием 1.jpg

Как оригинальное название передать?

imagejpeg($resource, "123/preview/".$resource_src);

так создается просто файл с названием $slide


$path_parts = pathinfo('$slide');

вот эта телега не перехватывает файл =(
 
 Top
tato
Отправлено: 15 Августа, 2014 - 09:01:55
Post Id



Посетитель


Покинул форум
Сообщений всего: 468
Дата рег-ции: Сент. 2011  
Откуда: Владивосток


Помог: 8 раз(а)




gregst пишет:
$path_parts = pathinfo('$slide');

вот эта телега не перехватывает файл =(


И не будет. В одинарных кавычках же, надо так:


-----
просто ?: сложно
 
 Top
gregst
Отправлено: 15 Августа, 2014 - 09:06:39
Post Id


Новичок


Покинул форум
Сообщений всего: 12
Дата рег-ции: Авг. 2014  


Помог: 0 раз(а)




tato пишет:
gregst пишет:
$path_parts = pathinfo('$slide');

вот эта телега не перехватывает файл =(


И не будет. В одинарных кавычках же, надо так:



ОГРОМНОЕ СПАСИБО!)

наконец, все стало так работать, как надо!


Всем, кто помого и проконсультировал - спасибы и респект)
 
 Top
tato
Отправлено: 15 Августа, 2014 - 09:14:26
Post Id



Посетитель


Покинул форум
Сообщений всего: 468
Дата рег-ции: Сент. 2011  
Откуда: Владивосток


Помог: 8 раз(а)




gregst, чуть внимательнее и все получится (=


-----
просто ?: сложно
 
 Top
Страниц (2): « 1 [2]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB