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

Форум PHP

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

 

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

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Создание уменьшенной копии изображения

Сообщения:  [1-10] 

 
 автор: TetRiska   (01.10.2009 в 15:09)   письмо автору
 
   для: Киналь   (01.10.2009 в 13:47)
 

да так и задумано...должно залить и перезаписать уменьшенной по размеру...дело было в том что по ХТТП нельзя так делать, нужно было полный путь указать. Вот сейчас очередную задачку поставил это наложить ватермарку, либо текстовую, либо картинкой..пробовал текстом, не вышло :( приложу код доработанный, но без прорисовки ватермарки...прошу указать куда и что вписать..Заранее благодарен.
<?php
list($date,$time) = explode(" ",date("Y-m-d H:i:s"));
list(
$Y,$m,$d) = explode("-",$date);
list(
$H,$i,$s) = explode(":",$time);
if(
$_FILES["uploads"]["error"] == 1)
    
$err "Размер файла превышает 2 мегабайта";
//if($_FILES["uploads"]["type"] != "image/jpeg" || $_FILES["uploads"]["type"] != "image/jpg")
//    $err = "Тип файла запрещен к загрузке";
$image $_POST['select_cat']."_".$Y.$m.$d.$H.$i.$s.rand(100,300).".jpg";
copy($_FILES["uploads"]["tmp_name"], "uploads/photos/".$image);

function 
resizeimg($filename$smallimage$w$h)
  {
    
// Имя файла с масштабируемым изображением
   // $filename = "../".$filename;
    // Имя файла с уменьшенной копией.
   // $smallimage = "../".$smallimage;    
    // определим коэффициент сжатия изображения, которое будем генерить
    
$ratio $w/$h;
    
// получим размеры исходного изображения
    
$size_img getimagesize($filename);
    
// Если размеры меньше, то масштабирования не нужно
    
if (($size_img[0]<$w) && ($size_img[1]<$h)) return true;
    
// получим коэффициент сжатия исходного изображения
    
$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);  
    
$white imagecolorallocate($dest_img255255255);       
    if (
$size_img[2]==2)      $src_img imagecreatefromjpeg($filename);                      
    else if (
$size_img[2]==1$src_img imagecreatefromgif($filename);                      
    else if (
$size_img[2]==3$src_img imagecreatefrompng($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]);                
    
// сохраняем уменьшенную копию в файл 
    
if ($size_img[2]==2)  imagejpeg($dest_img$smallimage);                      
    else if (
$size_img[2]==1imagegif($dest_img$smallimage);                      
    else if (
$size_img[2]==3imagepng($dest_img$smallimage); 
    
// чистим память от созданных изображений
    
imagedestroy($dest_img);
    
imagedestroy($src_img);
    return 
true;       
      
  }   
      
//sata1/home/users/furmani/www/www.furmani.dp.ua/uploads/photos/
      
$bigimage "K:/home/10.100.20.227/www/uploads/photos/".$image;
      
$smallimage "K:/home/10.100.20.227/www/uploads/photos/".$image
    
resizeimg($bigimage$smallimage800600);
    
    
$bigimage2 "K:/home/10.100.20.227/www/uploads/photos/".$image;
      
$smallimage2 "K:/home/10.100.20.227/www/uploads/photos/thumbs/".$image;
    
resizeimg($bigimage2$smallimage2151235);
?>

  Ответить  
 
 автор: Киналь   (01.10.2009 в 13:47)   письмо автору
 
   для: TetRiska   (30.09.2009 в 22:39)
 

У вас совпадают $bigimage и $smallimage.Так и задумано?

  Ответить  
 
 автор: TetRiska   (30.09.2009 в 22:39)   письмо автору
 
   для: TetRiska   (30.09.2009 в 00:26)
 

Емм сделал пока упрощенную загрузку файла, но после загрузки он должен уменьшится, но почему-то не хочет, где я ошибся в коде?
<?php
//print_r($_POST); 
//print_r($_FILES);
list($date,$time) = explode(" ",date("Y-m-d H:i:s"));
list(
$Y,$m,$d) = explode("-",$date);
list(
$H,$i,$s) = explode(":",$time);
if(
$_FILES["uploads"]["error"] == 1)
    
$err "Размер файла превышает 2 мегабайта";
$image $_POST['select_cat']."_".$Y.$m.$d.$H.$i.$s.rand(100,300).".jpg"//формируем название картинки
copy($_FILES["uploads"]["tmp_name"], "uploads/photos/".$image);

function 
resizeimg($filename$smallimage$w$h)
  {
    
// Имя файла с масштабируемым изображением
   // $filename = "../".$filename;
    // Имя файла с уменьшенной копией.
   // $smallimage = "../".$smallimage;    
    // определим коэффициент сжатия изображения, которое будем генерить
    
$ratio $w/$h;
    
// получим размеры исходного изображения
    
$size_img getimagesize($filename);
    
// Если размеры меньше, то масштабирования не нужно
    
if (($size_img[0]<$w) && ($size_img[1]<$h)) return true;
    
// получим коэффициент сжатия исходного изображения
    
$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);  
    
$white imagecolorallocate($dest_img255255255);       
    if (
$size_img[2]==2)  $src_img imagecreatefromjpeg($filename);                      
    else if (
$size_img[2]==1$src_img imagecreatefromgif($filename);                      
    else if (
$size_img[2]==3$src_img imagecreatefrompng($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]);                
    
// сохраняем уменьшенную копию в файл 
    
if ($size_img[2]==2)  imagejpeg($dest_img$smallimage);        //63 строка              
    
else if ($size_img[2]==1imagegif($dest_img$smallimage);                      
    else if (
$size_img[2]==3imagepng($dest_img$smallimage); 
    
// чистим память от созданных изображений
    
imagedestroy($dest_img);
    
imagedestroy($src_img);
    return 
true;       
      
  }   
      
$bigimage DOMEN."/uploads/photos/".$image;
      
$smallimage DOMEN."/uploads/photos/".$image;
        
resizeimg($bigimage$smallimage800600);
?>

Файл заливается, копируется из временной папки, но не уменьшается, выдает такую ошибку:
Warning: imagejpeg() [function.imagejpeg]: Unable to open 'http://10.100.20.227/uploads/photos/1_20090930213529262.jpg' for writing: Invalid argument in K:\home\10.100.20.227\www\dmn\modules\adminpanel\index.php on line 63. Я в коде пометил 63-ю строку. Прошу помощи.

  Ответить  
 
 автор: TetRiska   (30.09.2009 в 00:26)   письмо автору
 
   для: neadekvat   (30.09.2009 в 00:11)
 

Приношу извинения, я подумал то фиксированном размере речь шла, а то оказывается максимальное значение превьюшки..спс всем за помощь насчет ресайза...далее буду смотреть загрузку файлов )))

  Ответить  
 
 автор: neadekvat   (30.09.2009 в 00:11)   письмо автору
 
   для: TetRiska   (30.09.2009 в 00:06)
 

> там если не ошибаюсь жёстко указывается ширина и высота конечного рисунка
Откуда такое взяли?
    // здесь вычисляем размеры, чтобы при масштабировании сохранились  
    // 1. Пропорции исходного изображения 
    // 2. Исходное изображение полностью помещалось на маленькой копии  
    // (не обрезалось)

Взято из того кода. Читайте внимательнее

  Ответить  
 
 автор: TetRiska   (30.09.2009 в 00:06)   письмо автору
47.9 Кб
 
   для: cheops   (29.09.2009 в 22:50)
 

Благодарю за ссылку, но сперва я опробовал этот метод:
<?php
$filename 
'img.jpg';
$percent 151// Ширина изображения привью

header('Content-type: image/jpeg');

list(
$width$height) = getimagesize($filename); // Получаем ширину и высоту большого изображения
$newheight $height $percent// Перемножаем
$newwidth $newheight $width// Делим 

$thumb imagecreatetruecolor($percent$newwidth); // Цветное изображение
$source imagecreatefromjpeg($filename); // JPEG

imagecopyresized($thumb$source0000$percent$newwidth$width$height); // Создаем привью в во временный файл
imagejpeg($thumb,"imag.jpg","100"); 

?> 

Могу сказать что при конечном качестве в 100 уменьшенная копия скриптом хуже смотрится чем уменьшенная копия сделанная фотошопом...приложу в архиве 2 картинки, первая - скрипт поработал, вторая - шоп. Взглянул на предложенный скрипт по ссылке, там если не ошибаюсь жёстко указывается ширина и высота конечного рисунка, что не особо подходит, нужно по ширине регулировать, как видно с рассмотренного скрипта, что выше. Прошу помощи разобраться почему так дефектно приведенный скрипт изменил картинку :(

  Ответить  
 
 автор: cheops   (29.09.2009 в 22:50)   письмо автору
 
   для: TetRiska   (29.09.2009 в 22:39)
 

Ясно, возможно вас тогда заинтересует тема http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=145, где как раз описывается создание уменьшенной копии изображения.

  Ответить  
 
 автор: TetRiska   (29.09.2009 в 22:39)   письмо автору
 
   для: cheops   (29.09.2009 в 08:14)
 

я немного упустил...насчет загрузки 2-х фото я перегнул...нужно грузить 1 фотку и делать ее же копию, чтобы копия была уменьшенная автоматически..алгоритм такой как бы хотелось бы видеть:
1 - вбиваем данные, выбираем фотку
2 - жмем записать, фотка1 (большая) заливается в одну папку, а уменьшенная копия заливается в другую
3 - все данные и пути к картинкам заливаются в базу
вот чтобы хотелось получить, сейчас начну строить если не выйдет отпишу сюда :)

  Ответить  
 
 автор: cheops   (29.09.2009 в 08:14)   письмо автору
 
   для: TetRiska   (29.09.2009 в 02:29)
 

Немного не так, дело в том, что изображения передаются при помощи специального глобального массива $_FILES, поэтому извлекать их нужно именно из него. Возможно вас заинтересует пример по ссылке http://www.softtime.ru/scripts/upload.php.

  Ответить  
 
 автор: TetRiska   (29.09.2009 в 02:29)   письмо автору
19.4 Кб
 
 

Всем привет. На скрине я прикрепил форму добавления изделия в базу. На форме, как видите, 2 поля для загрузки файлов. Значит так юзер вбивает данные и выбирает 2 файла и жмет Записать, что произойдет? Как именно должно быть? Я думаю так - файлы запишутся на сервер, произойдет проверка их на соответствие типу, потом пути к этим файлам будут хранится в переменных $_POST['file1'] и $_POST['file2'] после чего произойдет добавление данных по сформированному запросу? Правильно ли я описал? И можно приблизительный пример реализации? Смотрел в поиске, куча вариантов, но везде идет спор о правильности реализации. Заранее благодарен за все возможные виды помощи.

  Ответить  

Сообщения:  [1-10] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

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