Вот тут https://php.ru/forum/threads/kruzhok-ljubopytnyx-izvraschencev.19244/page-7#post-205590 --- Добавлено --- Для сохранения результата надо дополнить код такой строкой PHP: imagejpeg($sava, 'new.jpg');
@Sergey_php полный код получается таким PHP: // 1.JPG - исходное большое изображение $ava = imagecreatefromjpeg('1.JPG'); // размеры исходного изображения $x = imagesx($ava); // ширина $y = imagesy($ava); // высота /* Изображение будет уменьшено так, что бОльшая сторона не превысила 210 пикселей. Сначала изображение будет уменьшено до 420 пикс. без сглаживания - imagecopyresized() потом до 210 со сглаживанием - imagecopyresampled(). Для вычисления размеров используется арифметическая пропорция. */ $qr = ($x > $y ? $x : $y) / 420; // 420 - промежуточный размер. $nx = round($x / $qr); // рассчитывается промежуточная ширина $ny = round($y / $qr); // рассчитывается промежуточная высота $sava = imagecreatetruecolor($nx, $ny); // в этой строке создается пустой холст нужных размеров imagecopyresized($sava, $ava, 0, 0, 0, 0, $nx, $ny, $x, $y); // изображение копируется на холст $sava imagedestroy($ava); // удаление исходной картинки из оперативки $ava = $sava; // Сглаживаемое уменьшение - всё то же самое $x = imagesx($ava); $y = imagesy($ava); $qr = ($x > $y ? $x : $y) / 210; $nx = round($x / $qr); $ny = round($y / $qr); $sava = imagecreatetruecolor($nx, $ny); imagecopyresampled($sava, $ava, 0, 0, 0, 0, $nx, $ny, $x, $y); // сохранение в new.jpg imagejpeg($sava, 'new.jpg'); --- Добавлено --- Это не единственный способ, еще можно с помощью imagick PHP: $thumb = new Imagick('1.jpg'); $thumb->resizeImage(320,240,Imagick::FILTER_LANCZOS,1); $thumb->writeImage('new.jpg'); $thumb->destroy(); но эта библиотека реже доступна. Конечно, сюда нужно добавить вычисление пропорций (если не все картинки будут 4:3).
@Sergey_php, Серега, пользуйся официальной документацией. Строчка выше (твой копипаст) там даже ссылка есть на документацию, можешь почитать что делает эта строчка кода.
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