За последние 24 часа нас посетили 22873 программиста и 1264 робота. Сейчас ищут 752 программиста ...

пропорциональное изменение размера картинок при загрузке в PHP

Тема в разделе "PHP для новичков", создана пользователем Kela, 25 фев 2017.

  1. Kela

    Kela Активный пользователь

    С нами с:
    20 дек 2014
    Сообщения:
    84
    Симпатии:
    1
    Сабж. Как сделать пропорциональное изменение размера картинок при загрузке в PHP?
    Нашел код.
    PHP:
    1. $file_name = $_FILES['upload']['tmp_name'];
    2. switch($_FILES['upload']['type']) { // узнаем тип картинки
    3. case "image/gif": $im = imagecreatefromgif($file_name); break;
    4. case "image/jpeg": $im = imagecreatefromjpeg($file_name); break;
    5. case "image/png": $im = imagecreatefrompng($file_name); break;
    6. case "image/pjpeg": $im = imagecreatefromjpeg($file_name); break;
    7. }    
    8. list($w,$h) = getimagesize($file_name); // берем высоту и ширину
    9. $koe=$w/200; // вычисляем коэффициент 200 это ширина которая должна быть
    10. $new_h=ceil($h/$koe); // с помощью коэффициента вычисляем высоту
    11. $im1 = imagecreatetruecolor(200, $new_h); // создаем картинку imagecopyresampled($im1,$im,0,0,0,0,200,$new_h,imagesx($im),imagesy($im));
    12. imageconvolution($im1, array( // улучшаем четкость
    13. array(-1,-1,-1),
    14. array(-1,16,-1),
    15. array(-1,-1,-1) ),
    16. 8, 0);
    17. imagejpeg($im1, $file_name, 100); // переводим в jpg
    18. imagedestroy($im1);
    HTML:
    1. <form enctype="multipart/form-data" method="post" action="tests.php">
    2. <table class="table_user" border="1">
    3.   <tr>
    4.    <td><b>Выберите картинку:</b></td>
    5.   </tr>
    6.   <tr>
    7.    <td><input type="file" name="upload"></td>
    8.   </tr>
    9. <br>
    10. <center><input type="submit" value="Загрузить"></center>
    11. </form>
    Но после загрузки картинку не выводит.. Просто белая страница. Не знаю что делать.
     
  2. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.230
    Симпатии:
    1.715
    Адрес:
    Молдова, г.Кишинёв
    Попробуй с этой https://github.com/avalanche123/Imagine библиотекой

    https://secure.php.net/imagejpeg
    По идее белый экран это нормально, картинка просто сохраниться по пути из переменной $file_name
     
  3. Kela

    Kela Активный пользователь

    С нами с:
    20 дек 2014
    Сообщения:
    84
    Симпатии:
    1
    По такому методу - Черная картинка.
    http://zoomcraft.ru/uploads/files/Kela.jpg - Пример.
    Код
    PHP:
    1. <?php
    2. $file_name = $_FILES['upload']['tmp_name'];
    3. switch($_FILES['upload']['type']) { // узнаем тип картинки
    4. case "image/gif": $im = imagecreatefromgif($file_name); break;
    5. case "image/jpeg": $im = imagecreatefromjpeg($file_name); break;
    6. case "image/png": $im = imagecreatefrompng($file_name); break;
    7. case "image/pjpeg": $im = imagecreatefromjpeg($file_name); break;
    8. }    
    9. list($w,$h) = getimagesize($file_name); // берем высоту и ширину
    10. $koe=$w/200; // вычисляем коэффициент 200 это ширина которая должна быть
    11. $new_h=ceil($h/$koe); // с помощью коэффициента вычисляем высоту
    12. $im1 = imagecreatetruecolor(200, $new_h); // создаем картинку imagecopyresampled($im1,$im,0,0,0,0,200,$new_h,imagesx($im),imagesy($im));
    13. imageconvolution($im1, array( // улучшаем четкость
    14. array(-1,-1,-1),
    15. array(-1,16,-1),
    16. array(-1,-1,-1) ),
    17. 8, 0);
    18. imagejpeg($im1, $file_name, 100); // переводим в jpg
    19. move_uploaded_file ($file_name, "uploads/files/Kela.jpg");
    20. ?>
     
  4. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.230
    Симпатии:
    1.715
    Адрес:
    Молдова, г.Кишинёв
    @Kela придётся весь код перепроверять, все ли функции отрабатывают как надо возвращают нужный результат, читай по ним документацию, по принимаемым и возвращаемым данным и делай отладку

    отладка/debug
    http://phpfaq.ru/debug
    https://netbeans.org/kb/docs/php/debugging_ru.html
    https://php.ru/forum/threads/howto-...i-po-shagam-i-s-kartinkami.58974/#post-474550
     
  5. Kela

    Kela Активный пользователь

    С нами с:
    20 дек 2014
    Сообщения:
    84
    Симпатии:
    1
    Уже лучше
    imagecopyresampled($im1,$im,0,0,0,0,200,$new_h,imagesx($im),imagesy($im)); - Переместил в значение появилась картинка. Но как ограничить ширину тоже? А то картинка уменьшилась до 200x264 а мне надо макс 200x200
     
  6. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.230
    Симпатии:
    1.715
    Адрес:
    Молдова, г.Кишинёв
    Вроде нормальное изображение по ссылки
    --- Добавлено ---
    Почитай какие аргументы относятся к размерам изображения и переделай алгоритм под свою задачу
     
  7. Kela

    Kela Активный пользователь

    С нами с:
    20 дек 2014
    Сообщения:
    84
    Симпатии:
    1
    Вопросик есть
    PHP:
    1. function delete_avatart($user_id)
    2.         {
    3. КОД
    4. }
    Как вызвать в нее функцию
    PHP:
    1. function TEST($user_id)
    2.         {
    3. Код
    4. }
     
  8. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.230
    Симпатии:
    1.715
    Адрес:
    Молдова, г.Кишинёв
    PHP:
    1. function delete_avatart($user_id)
    2. {
    3.     function TEST($user_id)
    4.     {
    5.  
    6.     }
    7. }
    правильно понял?
     
  9. Kela

    Kela Активный пользователь

    С нами с:
    20 дек 2014
    Сообщения:
    84
    Симпатии:
    1
    Нет. Смотри. У меня есть функция TEST - в ней есть код. Мне надо когда вызывается функция delete_avatart - она вызывает дополнительно TEST
     
  10. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.230
    Симпатии:
    1.715
    Адрес:
    Молдова, г.Кишинёв
    PHP:
    1. function TEST($user_id)
    2. {
    3. }
    4.  
    5. function delete_avatart($user_id)
    6. {
    7.  
    8.     TEST($user_id);
    9. }
     
  11. Kela

    Kela Активный пользователь

    С нами с:
    20 дек 2014
    Сообщения:
    84
    Симпатии:
    1
    пропорциональное изменение размера картинок при загрузке в PHP.
    нашел код - и подстроил под свой скрипт. Но суть что если большое изображение тогда ширина больше чем надо.(Максимум 200 высота 200 ширина.) Как поставить ограничение?
    Код (Text):
    1. if($_POST['action'] == 'avatar_upload'){
    2. $image = $_FILES['file']['tmp_name'];
    3. switch($_FILES['file']['type']) { // узнаем тип картинки
    4. case "image/gif": $im = imagecreatefromgif($image); break;
    5. case "image/jpeg": $im = imagecreatefromjpeg($image); break;
    6. case "image/png": $im = imagecreatefrompng($image); break;
    7. }  
    8. list($w,$h) = getimagesize($image); // берем высоту и ширину
    9. $koe=$w/200; // вычисляем коэффициент 200 это ширина которая должна быть
    10. $new_h=ceil($h/$koe); // с помощью коэффициента вычисляем высоту
    11. $im1 = imagecreatetruecolor(200, $new_h); // создаем картинку
    12. imagecopyresampled($im1,$im,0,0,0,0,200,$new_h,imagesx($im),imagesy($im));
    13. imageconvolution($im1, array( // улучшаем четкость
    14. array(-1,-1,-1),
    15. array(-1,16,-1),
    16. array(-1,-1,-1) ),
    17. 8, 0);
    18. imagejpeg($im1, $image, 80); // переводим в jpg
    19. imagedestroy($im);
    20. imagedestroy($im1);
    21.     $url = 'avatar_'.$userid.'.'.mt_rand(100, 1000).'.jpg';
    22.     if(move_uploaded_file($image, $_SERVER['DOCUMENT_ROOT'].'/uploads/fotos/'.$url)) {
    23.         $dle_api->change_avatart($userid,$url);
    24.         echo('{"success":"Аватар обновлён", "avatar_url": "/uploads/fotos/'.$url.'"}');
    25.     }
    26.     else exit('{"error":"Ошибка загрузки аватара!"}');
    27.     }
    28.  
    29.  
    30.    
     
  12. Kela

    Kela Активный пользователь

    С нами с:
    20 дек 2014
    Сообщения:
    84
    Симпатии:
    1