За последние 24 часа нас посетили 25026 программистов и 1737 роботов. Сейчас ищут 846 программистов ...

Resize image in php

Тема в разделе "PHP для новичков", создана пользователем Sergey_php, 19 окт 2016.

  1. Sergey_php

    Sergey_php Новичок

    С нами с:
    16 сен 2016
    Сообщения:
    50
    Симпатии:
    2
    Кто может кинуть ссылку для понимание ресайза в php.. смотрел несколько но были непонятными
     
  2. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Sergey_php нравится это.
  3. Sergey_php

    Sergey_php Новичок

    С нами с:
    16 сен 2016
    Сообщения:
    50
    Симпатии:
    2
  4. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    @Sergey_php полный код получается таким
    PHP:
    1. // 1.JPG - исходное большое изображение
    2. $ava = imagecreatefromjpeg('1.JPG');
    3.  
    4. // размеры исходного изображения
    5. $x = imagesx($ava); // ширина
    6. $y = imagesy($ava); // высота
    7. /*
    8. Изображение будет уменьшено так, что бОльшая сторона не превысила 210 пикселей.
    9. Сначала изображение будет уменьшено до 420 пикс. без сглаживания - imagecopyresized()
    10. потом до 210 со сглаживанием - imagecopyresampled().
    11.  
    12. Для вычисления размеров используется арифметическая пропорция.
    13. */
    14. $qr = ($x > $y ? $x : $y) / 420; // 420 - промежуточный размер.
    15. $nx = round($x / $qr); // рассчитывается промежуточная ширина
    16. $ny = round($y / $qr); // рассчитывается промежуточная высота
    17. $sava = imagecreatetruecolor($nx, $ny); // в этой строке создается пустой холст нужных размеров
    18. imagecopyresized($sava, $ava, 0, 0, 0, 0, $nx, $ny, $x, $y); // изображение копируется на холст $sava
    19. imagedestroy($ava); // удаление исходной картинки из оперативки
    20.  
    21. $ava = $sava;
    22. // Сглаживаемое уменьшение - всё то же самое
    23. $x = imagesx($ava);
    24. $y = imagesy($ava);
    25. $qr = ($x > $y ? $x : $y) / 210;
    26. $nx = round($x / $qr);
    27. $ny = round($y / $qr);
    28. $sava = imagecreatetruecolor($nx, $ny);
    29. imagecopyresampled($sava, $ava, 0, 0, 0, 0, $nx, $ny, $x, $y);
    30.  
    31. // сохранение в new.jpg
    32. imagejpeg($sava, 'new.jpg');
    --- Добавлено ---
    Это не единственный способ, еще можно с помощью imagick
    PHP:
    1. $thumb = new Imagick('1.jpg');
    2. $thumb->resizeImage(320,240,Imagick::FILTER_LANCZOS,1);
    3. $thumb->writeImage('new.jpg');
    4. $thumb->destroy();
    но эта библиотека реже доступна. Конечно, сюда нужно добавить вычисление пропорций (если не все картинки будут 4:3).
     
    mahmuzar и Sergey_php нравится это.
  5. Sergey_php

    Sergey_php Новичок

    С нами с:
    16 сен 2016
    Сообщения:
    50
    Симпатии:
    2
  6. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    @Sergey_php, Серега, пользуйся официальной документацией. Строчка выше (твой копипаст) там даже ссылка есть на документацию, можешь почитать что делает эта строчка кода.
     
  7. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    @Sergey_php это способ засечь время работы скрипта
     
  8. Sergey_php

    Sergey_php Новичок

    С нами с:
    16 сен 2016
    Сообщения:
    50
    Симпатии:
    2
    Warning: imagecreatefromjpeg(1.jpeg): failed to open stream: No such file or directory in C:\xampp\htdocs\php\img\index.php on line 16
    ??
    Warning: imagesx() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\php\img\index.php on line 19

    Warning: imagesy() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\php\img\index.php on line 20

    Warning: Division by zero in C:\xampp\htdocs\php\img\index.php on line 23

    Warning: Division by zero in C:\xampp\htdocs\php\img\index.php on line 24

    Warning: imagecreatetruecolor() expects parameter 1 to be integer, float given in C:\xampp\htdocs\php\img\index.php on line 26

    Warning: imagecopyresized() expects parameter 1 to be resource, null given in C:\xampp\htdocs\php\img\index.php on line 27

    Warning: imagedestroy() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\php\img\index.php on line 28

    Warning: imagesx() expects parameter 1 to be resource, null given in C:\xampp\htdocs\php\img\index.php on line 30

    Warning: imagesy() expects parameter 1 to be resource, null given in C:\xampp\htdocs\php\img\index.php on line 31

    Warning: Division by zero in C:\xampp\htdocs\php\img\index.php on line 33

    Warning: Division by zero in C:\xampp\htdocs\php\img\index.php on line 34

    Warning: imagecreatetruecolor() expects parameter 1 to be integer, float given in C:\xampp\htdocs\php\img\index.php on line 36

    Warning: imagecopyresampled() expects parameter 1 to be resource, null given in C:\xampp\htdocs\php\img\index.php on line 37

    Warning: imagejpeg() expects parameter 1 to be resource, null given in C:\xampp\htdocs\php\img\index.php on line 38
     
  9. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    нет файла картинки
    http://phpfaq.ru/debug
     
    Sergey_php нравится это.