php изменить размер изображения после загрузки и обрезать его в центр

У меня есть профиль пользователя в php, и я хочу дать пользователям возможность изменить изображение своего профиля. Но когда они отправляют свою новую фотографию через $ _POST, я хочу, чтобы изображение было изменено на:

высота: 110px | ширина: соответствует высоте (если ширина больше высоты)

ширина: 110px | height: соответствует ширине (если высота больше ширины)

когда размер изменен, я хочу обрезать изображение, чтобы он стал 110px x 110px, но я хочу, чтобы он был центрирован.

Например, если пользователь загружает изображение с шириной 110px и высотой 200px (размеры после изменения размера), новое изображение после обрезки будет 110×110, отрезанное на 90px справа. То, что я хочу, – это обрезать 45px слева и еще 45px справа, чтобы он был центрирован

функция будет принимать изображения .png , .gif и .jpg и сохранит новое изображение только в формате jpg независимо от исходного формата.

Я много искал, чтобы создать такую ​​функцию, и я нашел ответ, но в любое время, когда я пытаюсь изменить некоторые мелкие детали, все перестает работать должным образом.

Мой код:

 <?php $userfile_name = $_FILES["sgnIMG"]["name"]; $userfile_tmp = $_FILES["sgnIMG"]["tmp_name"]; $userfile_size = $_FILES["sgnIMG"]["size"]; $filename = basename($_FILES["sgnIMG"]["name"]); $file_ext = substr($filename, strrpos($filename, ".") + 1); $large_image_location = $target_path . $filename; $ext = ''; if ($file_ext == 'jpg') { $ext = 1; } else if ($file_ext == 'gif') { $ext = 2; } else if ($file_ext == 'png') { $ext = 3; } else { $ext = 0; } $target = $target_path . basename($_FILES["sgnIMG"]["name"]); if (move_uploaded_file($userfile_tmp, $target)) { $newImg = resize110($target, $ext); if (isset($_POST['imupd']) && ($_POST['imupd'] == 'up')) { $sql = "UPDATE users SET avatar='" . str_replace('im/users/', '', $newImg) . "' WHERE id=" . $_SESSION['sesID'] . ""; $result = mysql_query($sql); if ($result) { echo '<img src="' . $newImg . '" width="110" title="' . $file_ext . '"/>'; } else { echo '<img src="im/avatars/px.png" width="110" title="' . $file_ext . '"/>'; } } } else { } function getHeight($image) { $sizes = getimagesize($image); $height = $sizes[1]; return $height; } function getWidth($image) { $sizes = getimagesize($image); $width = $sizes[0]; return $width; } function resize110($image, $ext) { chmod($image, 0777); $oldHeight = getHeight($image); $oldWidth = getWidth($image); if ($oldHeight < $oldWidth) { $newImageHeight = 110; $newImageWidth = ceil((110 * $oldWidth) / $oldHeight); imagecopyresampled($newImage, $source, -ceil(($newImageWidth - 110) / 2), 0, 0, 0, $newImageWidth, $newImageHeight, $oldWidth, $oldHeight); } else { $newImageHeight = ceil((110 * $oldHeight) / $oldWidth); $newImageWidth = 110; imagecopyresampled($newImage, $source, 0, -ceil(($newImageHeight - 110) / 2), 0, 0, $newImageWidth, $newImageHeight, $oldWidth, $oldHeight); } $newImage = imagecreatetruecolor(110, 110); chmod($image, 0777); return $image; switch ($ext) { case 1; $source = imagecreatefromjpeg($image); break; case 2; $source = imagecreatefromgif($image); break; case 3; $source = imagecreatefrompng($image); break; } imagejpeg($newImage, $image, 90); return $image; }