Я пытался извлечь файл из формы HTML, а затем создать новый и использовать «imagecopyresampled», чтобы получить из него центральный квадрат, подходящий либо на X, либо Y, в зависимости от того, что меньше.PHP GD изменить размер/обрезать изображение перед загрузкой
К сожалению, я немного запутался в обработке большого количества изображений и временных имен, и у меня возникли проблемы с копированием файла в файл пользователя в системе. код выглядит следующим образом:
if($_FILES){
$valid = validate_image("avatar");
if ($valid){
list($width, $height, $type) = getimagesize($_FILES['avatar']['tmp_name']);
$scale = $width/$height;
$pixels = 150;
$tmp_name = $_FILES['avatar']['tmp_name'];
switch ($type) {
case IMAGETYPE_GIF:
$source = imagecreatefromgif($tmp_name);
break;
case IMAGETYPE_JPEG:
case IMAGETYPE_JPG:
$source = imagecreatefromjpeg($tmp_name);
break;
case IMAGETYPE_PNG:
$source = imagecreatefrompng($tmp_name);
break;
}
$upload = imagecreatetruecolor($pixels, $pixels);
//sketchy image math: Get whichever coordinate is smaller and that will be 150 on the thumbnail from top to bottom (or left to right).
//Then for the other one you know the size will be 150, but only for the part starting at (Coordinate/2)-SMALLERCOORD/2 to (coord/2)+SMALLERCOORD/2
if ($width>$height){
imagecopyresampled ($upload, $source, 0, 0, 0, ($width-$height/2), 150, 150, $height, $height);
} else if ($width<=$height){
imagecopyresampled ($upload, $source, 0, 0, 0, ($height-$width/2), 150, 150, $width, $width);
}
$name = "./users/$id/avatar.png";
imagepng($upload, $tmp_name);
if (!(move_uploaded_file($tmp_name, $name))) $fail .= "<h3>ERROR UPLOADING AVATAR. TRY AGAIN LATER OR CONTACT US.</h3><br>";
}
}
Прежде всего позвольте мне увидеть, если я понимаю, как код работает правильно: я получаю файл, проверьте, если она действует с моей функции. Затем я получаю размер и тип его. Я проверяю тип и создаю образ из памяти серверов из него, а другой - пустой размер, который я хочу. Затем я фактически копирую измененное и обрезанное изображение на загружаемом изображении, которое я создал. Там, если бы я хотел, я мог удалить временное «исходное» изображение с imagedestroy, не так ли? Далее я пытаюсь сделать png-файл из «загружаемого» изображения из памяти сервера. Вот где я думаю, что я ошибся, я не могу перезаписать временный файл, не так ли? И затем я пытаюсь поместить изображение временного изображения, где оно должно быть загружено, но это не работает.
Имею ли я это право? Как я могу исправить этот код? Благодарим за внимание.
Моя ошибка. это не было «/users/$id/avatar.png». Я удалил слишком много при редактировании кода, это должен был быть путь относительно файла PHP. "./users/$id/avatar.png". Таким образом, папка пользователей в том же каталоге является кодом PHP. –