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 :: Не удается добавить в файл картинку,уменьшенную с помощью imagecopyresampled

 PHP.SU

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


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

> Описание: Решил сделать уменьшенные копии загружаемых картинок .Выдает ошибку Warning: imagejpeg() [function.imagejpeg]: Unable to open 'img_small/' for writing
mmmoi09
Отправлено: 26 Июня, 2012 - 15:51:58
Post Id


Новичок


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


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




Сделал форму для загрузки картинок на сервер в заданную дирректорию и соответствующую функцию.
Так же понадобилось делать уменьшенные копии фото для вывода в фотогалерее.
Делал все стандартными методами
//$filename -путь к исходному изображению
//$dir_to_save - путь к папке,в которую будет помещаться уменьшенная копия //изображения
//$w = 200 - ширина уменьшаемой копии
//$quality = 100 - качество для jpeg
function resizeImg($filename,$dir_to_save,$w = 200,$quality = 100){


list($width,$height,$type) = getimagesize($filename);
if (!$width || !$height) {
echo 'Невозможно получить длину и ширину изображения';
return;
}
//проверяем тип изображения создаем новое изображение из старого
$types = array('','gif','jpeg','png');
$ext = $types[$type];
if ($ext) {
$func = 'imagecreatefrom'.$ext;
$scr_img = $func($filename);
} else {
echo 'Некорректный формат файла';
return;
}

//получаем размер оригинального изображения
$newWidth = $w;
$koefficient = $width/$w ;
$newHeight = $height/$koefficient ;

//создаем пустое изображение с новыми шириной и высотой
$newSizeImg = imagecreatetruecolor($newWidth, $newHeight);

//копируем исходное изображение в новое с заданными шириной и высотой без потери качества
imagecopyresampled($newSizeImg, $scr_img, 0, 0, 0, 0, $newWidth, $newHeight, $width, $height);


if(!file_exists($dir_to_save)){
mkdir("$dir_to_save", 777,true);}

//Создаем изображение

if ($type == 2) {
return imagejpeg($newSizeImg,$dir_to_save, $quality);
} else {
$func = 'image'.$ext;
return $func($newSizeImg,$dir_to_save);
}


// Освобождаем память
imagedestroy($scr_img);
}


В браузере выдает ошобку
Warning: imagejpeg() [function.imagejpeg]: Unable to open 'img_small/' for writing: Permission denied in C:\Users\Public\www\htdocs\photogalery\form.php on line 45

Попробовал посмотреть,что приходит в функцию imagejpeg($newSizeImg,$dir_to_save, $quality); в переменную $newSizeImg,в которой должен быть файл для сохранения
Туда приходит echo $newSizeImg ;// Resource id #7

Ниндзя
Что за Resource id #7 и может поэтому не сохраняется уменьшенная картиинка ????
 
 Top
fdr21
Отправлено: 26 Июня, 2012 - 16:44:27
Post Id



Гость


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


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




Цитата:
Что за Resource id #7 и может поэтому не сохраняется уменьшенная картиинка ????

так и должно быть.
Цитата:
PHP:
скопировать код в буфер обмена
  1. return imagejpeg($newSizeImg,$dir_to_save, $quality);

imagejpeg - второй параметр должен быть имя файла, а не папки!
 
 Top
mmmoi09
Отправлено: 26 Июня, 2012 - 17:00:13
Post Id


Новичок


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


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




Путь для сохранения файла
Никакие манипуляции с написанием этого пути не помогают .
Все равно возникает ошибка
Warning: imagejpeg() [function.imagejpeg]: Unable to open ....for writing: Permission denied in ....

(Отредактировано автором: 26 Июня, 2012 - 17:02:45)

 
 Top
fdr21
Отправлено: 26 Июня, 2012 - 17:07:01
Post Id



Гость


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


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




пропешите туда для отладки просто, - image.jpg.
проверти права доступа скрипта на запись!!!
 
 Top
Alho
Отправлено: 26 Июня, 2012 - 17:08:40
Post Id



Посетитель


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


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




Права на папку должны быть 777.
 
 Top
mmmoi09
Отправлено: 26 Июня, 2012 - 17:12:37
Post Id


Новичок


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


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




Alho пишет:
Права на папку должны быть 777.

А как их проверить,права то?
Я работаю на локальной машине под виндовс7 ?

(Отредактировано автором: 26 Июня, 2012 - 17:13:06)

 
 Top
fdr21
Отправлено: 26 Июня, 2012 - 17:30:02
Post Id



Гость


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


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




попробуйте убрать вот это все, так по мне не должно быть.
PHP:
скопировать код в буфер обмена
  1. if(!file_exists($dir_to_save)){
  2.  mkdir("$dir_to_save", 777,true);}
  3.  
  4.  //Создаем изображение
  5.  
  6.  if ($type == 2) {
  7.  return imagejpeg($newSizeImg,$dir_to_save, $quality);
  8.  } else {
  9.  $func = 'image'.$ext;
  10.  return $func($newSizeImg,$dir_to_save);
  11.  }


на ...
PHP:
скопировать код в буфер обмена
  1. imagejpeg($newSizeImg,'image_' . uniqid() . '.jpg');
  2. imagedestroy($scr_img);
  3. imagedestroy($newSizeImg);
  4.  
 
 Top
mmmoi09
Отправлено: 26 Июня, 2012 - 18:01:01
Post Id


Новичок


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


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




fdr21 пишет:
на ...
PHP:
скопировать код в буфер обмена

imagejpeg($newSizeImg,'image_' . uniqid() . '.jpg');
imagedestroy($scr_img);
imagedestroy($newSizeImg);


Спасибо большое.
Такой способ решает проблему.Ключевым фактором ,наверное,тут послужила функция uniqid()
Единственное ,что не ясно,почему же не работают стандартные записи путей вида photogalery/img_small/ .Ведь в интернете полно подобных примеров.
И еще проблема в том,что хотелось,чтобы имя уменьшенного изображения копировалось с оригинала (только,естественно,сохранялось в другой папке)
(Добавление)
fdr21

большое спасибо,что нашли время и желание помоч Улыбка
Все-таки не правильно я прописывал путь и имя для сохранения файла в функции imagejpeg()
(Добавление)
Не могу понять,почему я присваиваю переменной путь
if($_FILES){
$basename = basename($_FILES['uploadimg']['name']);
$dir_to_save_img_small = "img_small/" .$basename;
//передаю путь для сохранения уменьшенного файла в функцию
resizeImg($this_save_img,$dir_to_save_img_small);

но в функцию попадает другой путь C:/Users/Public/www/htdocs/photogalery/img/IMG_1696.JPG

а вне функции $dir_to_save_img_small выводим и получается img_small/IMG_1696.JPG

Как так путь переданный в функцию приображается?
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Работа с файловой системой и файлами »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB