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 :: Уменьшенная копия загружаемого изображения

 PHP.SU

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


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

> Без описания
Extazy
Отправлено: 19 Мая, 2012 - 13:20:44
Post Id


Посетитель


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


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




Здравствуйте.
Имеется стандартный код для загрузки файлов на сервер, использую его для загрузки различных фотографий.
Но загружаемые картинки всегда разного размера, и при выводе их подряд на страничке выглядит не очень красиво... хотелось бы какой-то порядок..

Скажите какие используются программистами способы для создания уменьшенных копий загружаемых картинок? Код?
Если есть вариант на jquery, то можно и его привести, так как в планах в будущем сделать вывод картинок на jquery.
 
 Top
LIME
Отправлено: 19 Мая, 2012 - 14:07:36
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


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




 
 Top
Extazy
Отправлено: 30 Мая, 2012 - 06:13:19
Post Id


Посетитель


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


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




Нашёл нужный мне код, но увы не пойму как его прикрепить к моему.. очень прошу помочь Вас Огорчение

Мой код для загрузки картинок на сервер:

PHP:
скопировать код в буфер обмена
  1. $uploaddir = 'Z:/home/test1.ru/www/upload/fotos/';
  2.  
  3. preg_match('/(.+)?\.(.+)?$/', $_FILES['upload_foto']['name'], $output);
  4. $file = $output[1];
  5. $mime = $output[2];
  6. $new_filename = time().$file.".".$mime;
  7.  
  8. $destination = $uploaddir . $new_filename;
  9.  
  10. if (move_uploaded_file($_FILES['upload_foto']['tmp_name'], $destination))
  11.                         {
  12. ..............
  13. }


Код для автоматического уменьшения картинок:
PHP:
скопировать код в буфер обмена
  1. $filename = $_FILES['upload']['tmp_name'];
  2. $filetype = $_FILES['upload']['type'];
  3. $error = $_FILES['upload']['error'];
  4. $dir = '/var/www/images/'; //папка, куда грузится файл
  5. $finalname = 'имя_картинки.jpg'; //имя файла
  6.  
  7. switch($filetype) {
  8.         case "image/gif": $im = imagecreatefromgif($filename); break;
  9.         case "image/jpeg": $im = imagecreatefromjpeg($filename); break;
  10.         case "image/png": $im = imagecreatefrompng($filename); break;
  11.         case "image/pjpeg": $im = imagecreatefromjpeg($filename); break;
  12. }
  13.  
  14. list($w,$h) = getimagesize($filename);
  15.  
  16. if($error == 0) {
  17.         if($filetype == "image/gif" || $filetype == "image/jpeg" || $filetype == "image/pjpeg" || $filetype == "image/png") {
  18.                 if($w$h) {
  19.                         $koe=$w/200;
  20.                         $new_h=ceil($h/$koe);
  21.                         $im1 = imagecreatetruecolor(200, $new_h);
  22.                         imagecopyresampled($im1,$im,0,0,0,0,200,$new_h,imagesx($im),imagesy($im));
  23.                 } elseif($w==$h) {
  24.                         $im1 = imagecreatetruecolor(200, 200);
  25.                         imagecopyresampled($im1,$im,0,0,0,0,200,200,imagesx($im),imagesy($im));
  26.                 }
  27.                 imageconvolution($im1, array(array(-1,-1,-1),array(-1,16,-1),array(-1,-1,-1)), 8, 0);
  28.                 imagejpeg($im1, $dir.$finalname, 100);
  29.                 imagedestroy($im);
  30.                 imagedestroy($im1);
  31.         }
  32. }

(Добавление)
Я пробовал сделать такой вариант:

PHP:
скопировать код в буфер обмена
  1. $uploaddir = 'Z:/home/test1.ru/www/upload/fotos/';
  2.  
  3.                         preg_match('/(.+)?\.(.+)?$/', $_FILES['upload_foto']['name'], $output);
  4.             $file = $output[1];
  5.             $mime = $output[2];
  6.             $new_filename = time().$file.".".$mime;
  7.  
  8.             $destination = $uploaddir . $new_filename;
  9.  
  10.                         if (move_uploaded_file($_FILES['upload_foto']['tmp_name'], $destination))
  11.                         {
  12.             $filename = $_FILES['upload_foto']['tmp_name'];
  13.             $filetype = $_FILES['upload_foto']['type'];
  14.             $error = $_FILES['upload_foto']['error'];
  15.             $dir = 'Z:/home/test1.ru/www/upload/fotos/thumbs'; //папка, куда грузится файл
  16.             $finalname = '$new_filename_thumb.jpg'; //имя файла
  17.  
  18.             switch($filetype) {
  19.         case "image/gif": $im = imagecreatefromgif($filename); break;
  20.         case "image/jpeg": $im = imagecreatefromjpeg($filename); break;
  21.         case "image/png": $im = imagecreatefrompng($filename); break;
  22.         case "image/pjpeg": $im = imagecreatefromjpeg($filename); break;
  23. }
  24.  
  25. list($w,$h) = getimagesize($filename);
  26.  
  27.         if($filetype == "image/gif" || $filetype == "image/jpeg" || $filetype == "image/pjpeg" || $filetype == "image/png") {
  28.                 if($w$h) {
  29.                         $koe=$w/200;
  30.                         $new_h=ceil($h/$koe);
  31.                         $im1 = imagecreatetruecolor(200, $new_h);
  32.                         imagecopyresampled($im1,$im,0,0,0,0,200,$new_h,imagesx($im),imagesy($im));
  33.                 } elseif($w==$h) {
  34.                         $im1 = imagecreatetruecolor(200, 200);
  35.                         imagecopyresampled($im1,$im,0,0,0,0,200,200,imagesx($im),imagesy($im));
  36.                 }
  37.                 imageconvolution($im1, array(array(-1,-1,-1),array(-1,16,-1),array(-1,-1,-1)), 8, 0);
  38.                 imagejpeg($im1, $dir.$finalname, 100);
  39.                 imagedestroy($im);
  40.                 imagedestroy($im1);
  41.         }


Однако выдаёт ошибку:
PHP:
скопировать код в буфер обмена
  1. Parse error: syntax error, unexpected T_VARIABLE in Z:\home\test1.ru\www\engine\modules\myfotos.php on line 55

это строка:


помогите, пожалуйста..

(Отредактировано автором: 30 Мая, 2012 - 06:20:11)

 
 Top
EuGen Администратор
Отправлено: 30 Мая, 2012 - 09:01:05
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


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






-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Viper
Отправлено: 30 Мая, 2012 - 09:09:08
Post Id



Активный участник


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


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




Extazy пишет:
это строка:
объясните что вы этим пытаетесь проверить? Положение Юпитера в 3 часа ночи по восточному времени?


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
Extazy
Отправлено: 30 Мая, 2012 - 13:08:08
Post Id


Посетитель


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


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




это не мой код, не знаю чо хотят в этой строке Улыбка
тут какаято ошибка... наверное эти 2 переменные надо сравнить
if($w > $h)

или нет?
(Добавление)
но я их сравниванию и там все равно множество ошибок других вылазит:
PHP:
скопировать код в буфер обмена
  1. Warning: imagecreatefrompng(2012-05-26_030151.png) [function.imagecreatefrompng]: failed to open stream: No such file or directory in Z:\home\test1.ru\www\engine\modules\myfotos.php on line 49
  2.  
  3. Warning: getimagesize(2012-05-26_030151.png) [function.getimagesize]: failed to open stream: No such file or directory in Z:\home\test1.ru\www\engine\modules\myfotos.php on line 53
  4.  
  5. Warning: imagesx(): supplied argument is not a valid Image resource in Z:\home\test1.ru\www\engine\modules\myfotos.php on line 63
  6.  
  7. Warning: imagesy(): supplied argument is not a valid Image resource in Z:\home\test1.ru\www\engine\modules\myfotos.php on line 63
  8.  
  9. Warning: imagecopyresampled(): supplied argument is not a valid Image resource in Z:\home\test1.ru\www\engine\modules\myfotos.php on line 63
  10.  
  11. Warning: imagedestroy(): supplied argument is not a valid Image resource in Z:\home\test1.ru\www\engine\modules\myfotos.php on line 67
 
 Top
DlTA
Отправлено: 30 Мая, 2012 - 14:13:34
Post Id



Постоянный участник


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


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




если не понятно что написано на буржуйском пользуйтесь переводчиком
а вообще в ошибках написано: первые 2 не найден необходимый файл (изображение)
ну а далее соответственно не правильный аргумент в параметрах, скорее всего из за того же
 
 Top
Extazy
Отправлено: 30 Мая, 2012 - 14:17:56
Post Id


Посетитель


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


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




буржуйский понимаю.. не понимаю как файл, который я загружаю с компа, может быть не найден.. Растерялся
 
 Top
DlTA
Отправлено: 30 Мая, 2012 - 14:23:10
Post Id



Постоянный участник


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


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




очень просто обращение идет не к тому файлу который вы залили
 
 Top
Extazy
Отправлено: 30 Мая, 2012 - 14:51:51
Post Id


Посетитель


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


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




действительно...

исправил код, получился рабочий вариант:
PHP:
скопировать код в буфер обмена
  1. $uploaddir = 'Z:/home/test1.ru/www/upload/fotos/';
  2.  
  3.                         preg_match('/(.+)?\.(.+)?$/', $_FILES['upload_foto']['name'], $output);
  4.             $file = $output[1];
  5.             $mime = $output[2];
  6.             $new_filename = time().$file.".".$mime;
  7.  
  8.             $destination = $uploaddir . $new_filename;
  9.             print_r($_FILES);
  10.  
  11.                         if (move_uploaded_file($_FILES['upload_foto']['tmp_name'], $destination))
  12.                         {
  13.             $filename = $uploaddir . $new_filename;
  14.             $filetype = $_FILES['upload_foto']['type'];
  15.             $error = $_FILES['upload_foto']['error'];
  16.             $dir = 'Z:/home/test1.ru/www/upload/fotos/thumbs/'; //папка, куда грузится файл
  17.             $finalname = time().$file."small_."."jpg"; //имя файла
  18.  
  19.             switch($filetype) {
  20.                     case "image/gif": $im = imagecreatefromgif($filename); break;
  21.                 case "image/jpeg": $im = imagecreatefromjpeg($filename); break;
  22.                     case "image/png": $im = imagecreatefrompng($filename); break;
  23.                 case "image/pjpeg": $im = imagecreatefromjpeg($filename); break;
  24.             }
  25.  
  26.             list($w,$h) = getimagesize($filename);
  27.  
  28.                 if($filetype == "image/gif" || $filetype == "image/jpeg" || $filetype == "image/pjpeg" || $filetype == "image/png") {
  29.                         if($w > $h) {
  30.                                 $koe=$w/200;
  31.                                 $new_h=ceil($h/$koe);
  32.                                 $im1 = imagecreatetruecolor(200, $new_h);
  33.                                 imagecopyresampled($im1,$im,0,0,0,0,200,$new_h,imagesx($im),imagesy($im));
  34.                         } elseif($w==$h) {
  35.                                 $im1 = imagecreatetruecolor(200, 200);
  36.                                 imagecopyresampled($im1,$im,0,0,0,0,200,200,imagesx($im),imagesy($im));
  37.                         }
  38.                         imageconvolution($im1, array(array(-1,-1,-1),array(-1,16,-1),array(-1,-1,-1)), 8, 0);
  39.                         imagejpeg($im1, $dir.$finalname, 100);
  40.                         imagedestroy($im);
  41.                         imagedestroy($im1);
  42.                 }


Только данный код тупо сжимает фотографии до 200 px в ширину, а длину оставляет прежней - фотография растягивается Растерялся

Подскажите ето я просто код сжатия фотографий нашёл неправильный или просто тут надо изменить какие строки и всё будет хорошо пропорционально сжиматься?

(Отредактировано автором: 30 Мая, 2012 - 15:04:51)

 
 Top
kat69
Отправлено: 30 Мая, 2012 - 15:12:23
Post Id


Новичок


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


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




Попробуйте этот код
PHP:
скопировать код в буфер обмена
  1.     $uploaddir = 'Z:/home/test1.ru/www/upload/fotos/';
  2.     $widthThumb = 200; // Ширина превью
  3.  
  4.     preg_match('/(.+)?\.(.+)?$/', $_FILES['upload_foto']['name'], $output);
  5.     $file = $output[1];
  6.     $mime = $output[2];
  7.     $new_filename = time() . $file . "." . $mime;
  8.  
  9.     $destination = $uploaddir . $new_filename;
  10.     print_r($_FILES);
  11.      
  12.     if (move_uploaded_file($_FILES['upload_foto']['tmp_name'], $destination))
  13.      {
  14.          $filename = $uploaddir . $new_filename;
  15.          $filetype = $_FILES['upload_foto']['type'];
  16.          $error = $_FILES['upload_foto']['error'];
  17.          $dir = 'Z:/home/test1.ru/www/upload/fotos/thumbs/'; //папка, куда грузится файл
  18.          $finalname = time() . $file . "small_." . "jpg"; //имя файла
  19.  
  20.          switch ($filetype) {
  21.              case "image/gif":
  22.                  $im = imagecreatefromgif($filename);
  23.                  break;
  24.              case "image/jpeg":
  25.                  $im = imagecreatefromjpeg($filename);
  26.                  break;
  27.              case "image/png":
  28.                  $im = imagecreatefrompng($filename);
  29.                  break;
  30.              case "image/pjpeg":
  31.                  $im = imagecreatefromjpeg($filename);
  32.                  break;
  33.          }
  34.  
  35.          list($w, $h) = getimagesize($filename);
  36.  
  37.          if ($filetype == "image/gif" || $filetype == "image/jpeg" || $filetype == "image/pjpeg" || $filetype == "image/png") {
  38.              $ratio = $widthThumb / $w;
  39.              $heightThumb = $h * $ratio;
  40.              $im1 = imagecreatetruecolor($widthThumb, $heightThumb);
  41.              imagecopyresampled($im1, $im, 0, 0, 0, 0, $widthThumb, $heightThumb, imagesx($im), imagesy($im));
  42.  
  43.              imageconvolution($im1, array(array(-1, -1, -1), array(-1, 16, -1), array(-1, -1, -1)), 8, 0);
  44.              imagejpeg($im1, $dir . $finalname, 100);
  45.              imagedestroy($im);
  46.              imagedestroy($im1);
  47.          }  
  48.      }
 
 Top
Extazy
Отправлено: 30 Мая, 2012 - 15:36:01
Post Id


Посетитель


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


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




kat69, Ваш код успешно пропорционально сжимает по ширине картинки..
но если ширина картинки меньше указанной величины, то картинка наоборот растягивается Не понял
(Добавление)
помогите с кодом, который будет задавать максимальные значения ширины и высоты картинок, чтобы закачиваемые изображения автоматически уменьшались менее указанных высоты и ширины пропорционально! Растерялся
 
 Top
kat69
Отправлено: 30 Мая, 2012 - 16:41:57
Post Id


Новичок


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


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




Если ширина картинки меньше ширины превью, сохранена будет картика в исходном размере.
PHP:
скопировать код в буфер обмена
  1. $uploaddir = 'Z:/home/test1.ru/www/upload/fotos/';
  2. $widthThumb = 200; // Ширина превью
  3.  
  4. preg_match('/(.+)?\.(.+)?$/', $_FILES['upload_foto']['name'], $output);
  5. $file = $output[1];
  6. $mime = $output[2];
  7. $new_filename = time() . $file . "." . $mime;
  8.  
  9. $destination = $uploaddir . $new_filename;
  10. print_r($_FILES);
  11.  
  12. if (move_uploaded_file($_FILES['upload_foto']['tmp_name'], $destination)) {
  13.     $filename = $uploaddir . $new_filename;
  14.     $filetype = $_FILES['upload_foto']['type'];
  15.     $error = $_FILES['upload_foto']['error'];
  16.     $dir = 'Z:/home/test1.ru/www/upload/fotos/thumbs/'; //папка, куда грузится файл
  17.     $finalname = time() . $file . "small_." . "jpg"; //имя файла
  18.  
  19.     switch ($filetype) {
  20.         case "image/gif":
  21.             $im = imagecreatefromgif($filename);
  22.             break;
  23.         case "image/jpeg":
  24.             $im = imagecreatefromjpeg($filename);
  25.             break;
  26.         case "image/png":
  27.             $im = imagecreatefrompng($filename);
  28.             break;
  29.         case "image/pjpeg":
  30.             $im = imagecreatefromjpeg($filename);
  31.             break;
  32.     }
  33.  
  34.     list($w, $h) = getimagesize($filename);
  35.  
  36.     if ($filetype == "image/gif" || $filetype == "image/jpeg" || $filetype == "image/pjpeg" || $filetype == "image/png") {
  37.         if ($w <= $widthThumb) {
  38.             $widthThumb=$w;
  39.             $heightThumb=$h;
  40.         } else {
  41.             $ratio = $widthThumb / $w;
  42.             $heightThumb = $h * $ratio;
  43.         }
  44.         $im1 = imagecreatetruecolor($widthThumb, $heightThumb);
  45.         imagecopyresampled($im1, $im, 0, 0, 0, 0, $widthThumb, $heightThumb, imagesx($im), imagesy($im));
  46.  
  47.         imageconvolution($im1, array(array(-1, -1, -1), array(-1, 16, -1), array(-1, -1, -1)), 8, 0);
  48.         imagejpeg($im1, $dir . $finalname, 100);
  49.         imagedestroy($im);
  50.         imagedestroy($im1);
  51.     }
  52. }


Но если вы хотите все же уменьшать, то нужно знать, насколько меньше картинка должна быть.

(Отредактировано автором: 30 Мая, 2012 - 16:43:56)

 
 Top
Extazy
Отправлено: 30 Мая, 2012 - 17:33:48
Post Id


Посетитель


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


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




kat69, а если зальют картинку меньше указанной ширины, но очень большую по высоте - тоже не дело. Надо какое-то и для этого иметь условие.. поможете?
 
 Top
kat69
Отправлено: 30 Мая, 2012 - 18:16:34
Post Id


Новичок


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


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




Если конечная высота более $maxHeight, тогда высота изображения становится $maxHeight, а ширина пересчитывается.
PHP:
скопировать код в буфер обмена
  1. $uploaddir = 'Z:/home/test1.ru/www/upload/fotos/';
  2. $widthThumb = 200; // Ширина превью
  3. $maxHeight = 200; //максимальная высота превью
  4.  
  5. preg_match('/(.+)?\.(.+)?$/', $_FILES['upload_foto']['name'], $output);
  6. $file = $output[1];
  7. $mime = $output[2];
  8. $new_filename = time() . $file . "." . $mime;
  9.  
  10. $destination = $uploaddir . $new_filename;
  11. print_r($_FILES);
  12.  
  13. if (move_uploaded_file($_FILES['upload_foto']['tmp_name'], $destination)) {
  14.     $filename = $uploaddir . $new_filename;
  15.     $filetype = $_FILES['upload_foto']['type'];
  16.     $error = $_FILES['upload_foto']['error'];
  17.     $dir = 'Z:/home/test1.ru/www/upload/fotos/thumbs/'; //папка, куда грузится файл
  18.     $finalname = time() . $file . "small_." . "jpg"; //имя файла
  19.  
  20.     switch ($filetype) {
  21.         case "image/gif":
  22.             $im = imagecreatefromgif($filename);
  23.             break;
  24.         case "image/jpeg":
  25.             $im = imagecreatefromjpeg($filename);
  26.             break;
  27.         case "image/png":
  28.             $im = imagecreatefrompng($filename);
  29.             break;
  30.         case "image/pjpeg":
  31.             $im = imagecreatefromjpeg($filename);
  32.             break;
  33.     }
  34.  
  35.     list($w, $h) = getimagesize($filename);
  36.  
  37.     if ($filetype == "image/gif" || $filetype == "image/jpeg" || $filetype == "image/pjpeg" || $filetype == "image/png") {
  38.         if ($w <= $widthThumb) {
  39.             $widthThumb=$w;
  40.             $heightThumb=$h;
  41.         } else {
  42.             $ratio = $widthThumb / $w;
  43.             $heightThumb = $h * $ratio;
  44.         }
  45.         if($maxHeight<$heightThumb){
  46.             $ratio = $maxHeight / $h;
  47.             $widthThumb = $w * $ratio;
  48.             $heightThumb=$maxHeight;
  49.         }
  50.         $im1 = imagecreatetruecolor($widthThumb, $heightThumb);
  51.         imagecopyresampled($im1, $im, 0, 0, 0, 0, $widthThumb, $heightThumb, imagesx($im), imagesy($im));
  52.  
  53.         imageconvolution($im1, array(array(-1, -1, -1), array(-1, 16, -1), array(-1, -1, -1)), 8, 0);
  54.         imagejpeg($im1, $dir . $finalname, 100);
  55.         imagedestroy($im);
  56.         imagedestroy($im1);
  57.     }
  58. }

(Отредактировано автором: 30 Мая, 2012 - 18:17:33)

 
 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