За последние 24 часа нас посетили 18577 программистов и 1612 роботов. Сейчас ищут 1710 программистов ...

Сжатие нескольких фото при загрузке

Тема в разделе "Сделайте за меня", создана пользователем jonathan-grinn, 7 мар 2016.

  1. jonathan-grinn

    jonathan-grinn Новичок

    С нами с:
    6 фев 2016
    Сообщения:
    71
    Симпатии:
    0
    Объясните, пожалуйста, как можно сжать фотографии файлового массива file[].
    Все скрипты которые находил работают только для одного фото. Циклы не помогают :(
     
  2. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    В том массиве просто пути к файлу.
    Попробуй ImageMagick или обёртки над ним.
     
  3. jonathan-grinn

    jonathan-grinn Новичок

    С нами с:
    6 фев 2016
    Сообщения:
    71
    Симпатии:
    0
    Я понимаю, но скрипт обрабатывает изображения в цикле. По типу $_FILES['file']['name'][$i]. $i увеличивается на '1' в цикле, в котором обрабатываются фото
     
  4. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Потренируйся на одном фото, которое уже лежит в папке, потом в цикле на несколько фото, потом уже на $_FILES.
    Использовал ImageMagick? Хоть что-то можешь показать?
     
  5. jonathan-grinn

    jonathan-grinn Новичок

    С нами с:
    6 фев 2016
    Сообщения:
    71
    Симпатии:
    0
    В том то и дело что на одной картинке все получается. И не просто лежит, а во время загрузки; она копируется в папку с маленькими изображениями и в папку с несжатыми. Код пока показать не т.к. не с компа. ImageMagick не использовал
     
  6. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
  7. jonathan-grinn

    jonathan-grinn Новичок

    С нами с:
    6 фев 2016
    Сообщения:
    71
    Симпатии:
    0
    Хорошо, спасибо!!
     
  8. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.589
    Симпатии:
    1.763
    denis01, какая разница, кем он будет сжимать, если, он, по видимому, циклами неправильно пользуется?
     
  9. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    mkramer такое тоже возможно, по этому и ждём код, так как ТС не за компьютером.
     
  10. jonathan-grinn

    jonathan-grinn Новичок

    С нами с:
    6 фев 2016
    Сообщения:
    71
    Симпатии:
    0
    index.php
    Код (PHP):
    1.   <meta charset="utf-8">
    2. <table>
    3.   <tr>
    4.     <td valign=top width=600px;>
    5.  
    6. <link href="../../../styles/main.css" rel="stylesheet">
    7. <div style="margin:20px;">
    8. <form method=POST action=index.php enctype=multipart/form-data>
    9. <p><input type="file" min="1" max="99" name="file[]" multiple="true" accept='image/*' /></p>
    10. <p><input type=submit name=add value='Добавить'> </p>
    11. </form>
    12. </div>
    13.  
    14. <?php  
    15. if ($_POST['add']) {
    16. $host="";
    17. $user="";
    18. $pass="";
    19. $db_name="";
    20. $link=mysql_connect($host,$user,$pass);
    21. mysql_select_db($db_name,$link);
    22.   
    23. $filesize = count($_FILES['file']['name']);
    24.   
    25.   for ($i=0; $i<$filesize; $i++) {
    26.     
    27.   require 'config.php'; 
    28.     
    29.   if(preg_match('/[.](jpg)|(gif)|(png)$/', //Ставим допустимые форматы изображений для загрузки
    30.    $_FILES['file']['name'][$i])) {
    31.     
    32.     $filename = $_FILES['file']['name'][$i];
    33.     $source = $_FILES['file']['tmp_name'][$i];  
    34.     $target = $path_to_image_directory . $filename;
    35.     
    36.     move_uploaded_file($source, $target);
    37.   
    38.  
    39. function createThumbnail($filename) {
    40.   
    41.   if(preg_match('/[.](jpg)$/', $filename)) {
    42.     $im = imagecreatefromjpeg($path_to_image_directory . $filename);
    43.   } else if (preg_match('/[.](gif)$/', $filename)) {
    44.     $im = imagecreatefromgif($path_to_image_directory . $filename);
    45.   } else if (preg_match('/[.](png)$/', $filename)) {
    46.     $im = imagecreatefrompng($path_to_image_directory . $filename);
    47.   } 
    48.   
    49.   $ox = imagesx($im);
    50.   $oy = imagesy($im);
    51.   
    52.   $nx = $final_width_of_image;
    53.   $ny = floor($oy * ($final_width_of_image / $ox));
    54.   
    55.   $nm = imagecreatetruecolor($nx, $ny);
    56.   
    57.   imagecopyresized($nm, $im, 0,0,0,0,$nx,$ny,$ox,$oy);
    58.   
    59.   if(!file_exists($path_to_thumbs_directory)) {
    60.     if(!mkdir($path_to_thumbs_directory)) {
    61.            die("!");
    62.     } 
    63.        }
    64.  
    65.   imagejpeg($nm, $path_to_thumbs_directory . $filename);
    66.  
    67. }
    68.  
    69.     createThumbnail($filename);    
    70. }  
    71.     
    72. $sstr = "INSERT INTO `photos`(`name`,`autor`,`category`,`date`) VALUES (
    73.   \"{$_FILES['file']['name'][$i]}\"
    74.   )";   
    75.   
    76. $rez=mysql_query($sstr,$link);
    77.     
    78.                  };
    79.   };
    80.   ?>
    81. </td></tr>
    82. </table>
    config.php
    Код (PHP):
    1. <?php
    2. $final_width_of_image = 300;
    3. $path_to_image_directory = '../../../img/photo/photos/';
    4. $path_to_thumbs_directory = '../../../img/photo/photos/min/';
    5. ?>
    p.s. На основе скрипта, который нашёл в гугле

    Подсказка от модератора:
    Любой код или текст конфигурации пишите между тегом [code=php] и [/code].
    Используйте отступы в коде для форматирования текста.
    Это помогает быстрее понять вас, увеличивает шанс на получение ответа.
    Что выделять? Например: PHP, HTML, CSS, JavaScript, SQL, XML, .htaccess, ini, регулярные выражения, код шаблонизаторов, любая другая разметка, результаты array/object dump и т. д.
     
  11. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    mysql удалили в PHP7, лучше использовать mysqli или PDO.
    for заменить на foreach, он переберёт массив.

    надо делать отладку скрипта, нужно перепроверить каждую строку, какие данные и куда идут, надо перепроверить все пути, что возвращает move_uploaded_file и другие функции, чтобы знать всё ли идёт нормально.

    Инструкции по отладке:
    http://phpfaq.ru/debug
    https://netbeans.org/kb/docs/php/debugging_ru.html
     
  12. jonathan-grinn

    jonathan-grinn Новичок

    С нами с:
    6 фев 2016
    Сообщения:
    71
    Симпатии:
    0
    denis01, не могу разобраться как использовать (точнее, устанавливать) ImageMagick.
     
  13. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Ты используешь хостинг на котором нет ImageMagick? Можно вызвать phpinfo(); и посмотреть, есть он или нет.
     
  14. jonathan-grinn

    jonathan-grinn Новичок

    С нами с:
    6 фев 2016
    Сообщения:
    71
    Симпатии:
    0
    IM на хостинге (1gb) нет
     
  15. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
  16. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.589
    Симпатии:
    1.763
    Ну ладно - перемешан HTML и php, но зачем же функцию в цикле объявлять? Вы же себе жизнь осложняете, цикл становится трудновоспроизводимым при чтении. А так, очевидных ошибок нету, надо искать ошибки в логике с помощью отладки, как описал denis01

    Добавлено спустя 4 минуты 43 секунды:
    Кстати, даже проверил. Это вообще не должно работать, должно ошибку выдавать Cannot redeclare
     
  17. jonathan-grinn

    jonathan-grinn Новичок

    С нами с:
    6 фев 2016
    Сообщения:
    71
    Симпатии:
    0
    Но вот у меня работает и сжимает из массива только первое фото, а потом выдает ошибку
     
  18. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    jonathan-grinn исправь ошибку, я же дал ссылки как их найти, спрашивай если там что-то не понятно.
     
  19. jonathan-grinn

    jonathan-grinn Новичок

    С нами с:
    6 фев 2016
    Сообщения:
    71
    Симпатии:
    0
    По поводу Image Magick. Поддержка хостинга дала мне ссылку на страницу по настройке (http://www.1gb.ru/1252), содержание которой я понимаю, мягко говоря, смутно.
     
  20. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Ты просто ждёшь готовый код? Тут многое насоветовали, чтобы ты собрал код для решения своей задачи, но ты ничего не сделал.
     
  21. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.589
    Симпатии:
    1.763
    Ну так я же написал, почему.
    Это - это объявление функции в цикле
     
  22. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Перенёс тему в другой раздел.
     
  23. jonathan-grinn

    jonathan-grinn Новичок

    С нами с:
    6 фев 2016
    Сообщения:
    71
    Симпатии:
    0
    Очень смешно! П*здц вы тут все умные!
     
  24. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Это специальный раздел, тут если кто-то захочет то всё за тебя сделает.
     
  25. jonathan-grinn

    jonathan-grinn Новичок

    С нами с:
    6 фев 2016
    Сообщения:
    71
    Симпатии:
    0
    Где же я сказал, что хочу, что бы кто-то за меня это сделал???!!!