[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Не удается добавить в файл картинку,уменьшенную с
mmmoi09
Не удается добавить в файл картинку,уменьшенную с помощью imagecopyresampled и сохраненную с помощью imagejpeg()
Сделал форму для загрузки картинок на сервер в заданную дирректорию и соответствующую функцию.
Так же понадобилось делать уменьшенные копии фото для вывода в фотогалерее.
Делал все стандартными методами
//$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 и может поэтому не сохраняется уменьшенная картинка ????




Спустя 41 минута, 54 секунды (26.06.2012 - 16:48) fdr написал(а):
Цитата
Что за Resource id #7 и может поэтому не сохраняется уменьшенная картинка ????

так и должно быть.
return imagejpeg($newSizeImg,$dir_to_save, $quality);

imagejpeg- второй параметр должен быть имя файла!!!!


Спустя 18 минут, 45 секунд (26.06.2012 - 17:06) mmmoi09 написал(а):
Цитата (fdr @ 26.06.2012 - 13:48)
Цитата
Что за Resource id #7 и может поэтому не сохраняется уменьшенная картинка ????

так и должно быть.
return imagejpeg($newSizeImg,$dir_to_save, $quality);

imagejpeg- второй параметр должен быть имя файла!!!!


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

Спустя 36 минут, 31 секунда (26.06.2012 - 17:43) fdr написал(а):
Цитата
Warning: imagejpeg() [function.imagejpeg]: Unable to open ....for writing: Permission denied in ....

можно полный код! Если он такой же...
Цитата
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

Здесь говорится : не могу открыть 'img_small/' для записи, ошибка в
C:\Users\Public\www\htdocs\photogalery\form.php стока 45
imagejpeg($newSizeImg,$dir_to_save, $quality);

$dir_to_save - передается имя директории, без указание имени файла! img_small/

Спустя 1 час, 40 минут, 4 секунды (26.06.2012 - 19:23) mmmoi09 написал(а):
Не могу понять,почему я присваиваю переменной путь
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

Как так путь переданный в функцию приображается?

Спустя 18 минут, 55 секунд (26.06.2012 - 19:42) fdr написал(а):
Цитата
C:/Users/Public/www/htdocs/photogalery/img/IMG_1696.JPG

c чего вы это решили!?
что бы это проверить, добавляем
var_dump($this_save_img,$dir_to_save_img_small)

перед
resizeImg($this_save_img,$dir_to_save_img_small);


и еще...
$basename = basename($_FILES['uploadimg']['name']);

basename($_FILES['uploadimg']['name']); - не обязателен, $_FILES['uploadimg']['name'] и так хранит имя изображения!

и еще...
$newWidth = $w;

переменная $w - недоступна в функции, ее нужно или явно указать внутри функции, или объявить Глобальной!

Спустя 1 час, 33 минуты, 55 секунд (26.06.2012 - 21:16) mmmoi09 написал(а):
Спасибо большое.
Я разобрался с Вашей помощью . smile.gif
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.