Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Не получается изменение картинки в цикле
 
 автор: dinya_1   (21.08.2011 в 20:55)   письмо автору
 
 

С базы вытаскиваются названия файлов.
Большие картинки лежат в папке big
Цель: Сделать маленькую копию и сохранить в папку small.
Скрипт делает только одну картинку, первую из списка, а нужно чтоб все..

Ошибку даёт такую:
Fatal error: Cannot redeclare img_resize() (previously declared in W:\home\pikasso\pikasso.ru\home\add_small_img.php:57) in W:\home\pikasso\pikasso.ru\home\add_small_img.php on line 57
<?

$result = mysql_query("SELECT * FROM pictures WHERE cat='$_POST[razdel]'",$db);
$myrow = mysql_fetch_array($result);
do
{
$folders = $myrow["folders"];
$name = $myrow["name"];
$src = "../images/img/".$folders."/big/".$name;
//img_resize - Не может выполниться повторно...
function img_resize($src, $dest, $width, $height, $rgb=0xFFFFFF, $quality=200)
{
if (!file_exists($src)) return false;
$size = getimagesize($src);
if ($size === false) return false;
// Определяем исходный формат по MIME-информации, предоставленной
// функцией getimagesize, и выбираем соответствующую формату
// imagecreatefrom-функцию.
$format = strtolower(substr($size['mime'], strpos($size['mime'], '/')+1));
$icfunc = "imagecreatefrom" . $format;
if (!function_exists($icfunc)) return false;
$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($src);
$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, $dest, $quality);
imagedestroy($isrc);
imagedestroy($idest);
return true;
}//
if (img_resize("../images/img/".$folders."/big/".$name, "../images/img/".$folders."/small/".$name, 200, 150))
echo 'Изображение добавленно ';
else
echo 'Ошибка, Фото не добавленно';
//Удаляем временную картинку из img_temp
/*if(file_exists($_FILES["foto"]["tmp_name"]))
{
unlink("img_temp/".$name);
}
*/

/*}*/
}
while ($myrow = mysql_fetch_array($result));

Подскажите пожалуйста кто сможет.

?>

  Ответить  
 
 автор: bab-nike   (21.08.2011 в 22:19)   письмо автору
 
   для: dinya_1   (21.08.2011 в 20:55)
 

на первый взгляд если честно не понятно вот это.
if (img_resize("../images/img/".$folders."/big/".$name, "../images/img/".$folders."/small/".$name, 200, 150))
 echo 'Изображение добавленно ';

вы по сути уменьшили фотку, но в бд не внесли запись, как это изображение добавлено?
дай те ка подумать ...

  Ответить  
 
 автор: Dinya_1   (22.08.2011 в 06:30)   письмо автору
 
   для: bab-nike   (21.08.2011 в 22:19)
 

Дело в том что в бд, хранятся только названия файлов, и они уже там есть.

Нужно только по ним сделать маленькие копии и в папке small

  Ответить  
 
 автор: sl1p   (22.08.2011 в 11:23)   письмо автору
 
   для: Dinya_1   (22.08.2011 в 06:30)
 

вынесите функцию img_resize() за пределы цикла

  Ответить  
 
 автор: bab-nike   (23.08.2011 в 19:20)   письмо автору
 
   для: dinya_1   (21.08.2011 в 20:55)
 

вот функция из книги ''Практика создания web-сайтов''

<?php
  
// Функция создающая уменьшенную копию фотографии $filename,
  // которая помещается в файл $smallimage
  // Уменьшенный вариант имеет ширину и высту равную
  // $w и $h пикселам, соответственн.
  
function resizeimg($filename$smallimage$w$h)
  {
    
// Имя файла с масштабируемым изображением
    
$filename $filename;
    
// Имя файла с уменьшенной копией.
    
$smallimage $smallimage;    
    
// определим коэффициент сжатия изображения, которое будем генерить
    
$ratio $w/$h;
    
// получим размеры исходного изображения
    
$size_img getimagesize($filename);
    
// получим коэффициент сжатия исходного изображения
    
$src_ratio=$size_img[0]/$size_img[1];

    
// Здесь вычисляем размеры уменьшенной копии, чтобы при масштабировании сохранились 
    // пропорции исходного изображения
    
if ($ratio<$src_ratio)
    {
      
$h $w/$src_ratio;
    }
    else
    {
      
$w $h*$src_ratio;
    }
    
// создадим пустое изображение по заданным размерам 
    
$dest_img imagecreatetruecolor($w$h);       
    
// создаем jpeg из файла
    
$src_img imagecreatefromjpeg($filename);                      

    
// масштабируем изображение     функцией imagecopyresampled()
    // $dest_img - уменьшенная копия
    // $src_img - исходной изображение
    // $w - ширина уменьшенной копии
    // $h - высота уменьшенной копии        
    // $size_img[0] - ширина исходного изображения
    // $size_img[1] - высота исходного изображения
    
imagecopyresampled($dest_img$src_img0000$w$h$size_img[0], $size_img[1]);                
    
// сохраняем уменьшенную копию в файл 
    
imagejpeg($dest_img$smallimage);             
    
// чистим память от созданных изображений
    
imagedestroy($dest_img);
    
imagedestroy($src_img);
    return 
true;         
  }  
?>

далее

<?php
do
 {
$folders $myrow["folders"];
$name $myrow["name"];
$filename="../images/img/".$folders."/big/".$name;
$smallimage="../images/img/".$folders."/small/".$name;
if(
resizeimg($filename$smallimage200150)) echo "Изображение".$smallimage."  добавленно<br>";
else echo 
"Ошибка, Фото не добавленно";
while (
$myrow mysql_fetch_array($result));
?>

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

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования