Я думаю, что проблема в том, что вы используете GD, чтобы открыть временный файл изображения:
$newImg = imagecreatefromgif($_FILES['avatar']['tmp_name']);
$newImg = imagecopyresized($imgResized, $newImg, 0, 0, 0, 0, $newWidth, $newHeight, $width, $height);
И затем вы пытаетесь переместить временный файл аватара с помощью move_uploaded_file
, не освобождая ресурс GD, а также отбрасывая всю работу, проделанную с GD (я имею в виду изменение размера, и я могу добавить, что вы должны использовать resample вместо изменить размер метод).
if (!$error && move_uploaded_file($newImg, $target)) {
Код перемещает временно загруженный файл (в настоящее время открытый GD и, тем не менее, физически не измененный вашей работой GD, поэтому без изменения размера ) в путь $target
.
Редактировать . Теперь я вижу больше ошибок с вашим кодом. Вы не можете сделать:
$newImg = imagecopyresized($imgResized, $newImg, 0, 0, 0, 0, $newWidth, $newHeight, $width, $height);
Потому что imagecopyresized
не возвращает ничего, кроме true
или false
. Он просто копирует одну часть исходного изображения в другой целевой ресурс. Он не возвращает сам ресурс!
Наконец . Правильный рабочий процесс к тому, что вы хотите сделать:
- Проверьте загруженный файл, если он подходит вам (и, кажется, вы делаете это хорошо).
- Создание ресурса
$img
GD, открывающего загруженный файл с imagecopyresized
.
- Создать пустой ресурс назначения
$newImg
с imagecreatetruecolor
.
- Измените или измените размер, используя
imagecopyresized
или imagecopyresampled
, чтобы скопировать исходное изображение на целевой ресурс.
- Сохранить целевой ресурс в GIF-файл, используя
imagegif
.
- Удалить временный источник загруженного изображения.
Вы можете узнать больше о поиске в Google, например, php gd изменить размер загруженных изображений . Тонны учебника будут в одном клике от вас.