Изменение размера изображения в php?Не могу заставить его работать - PullRequest
0 голосов
/ 29 декабря 2011

У меня есть этот код, который я пытался создать, и я не знаю, что я делаю неправильно.

    // SET ERROR FLAG
    $error = false;
    // MAKE SURE FILE IS AN IMAGE
    if (!list($width, $height) = getimagesize($_FILES['avatar']['tmp_name'])) {
        $error = true;
    } 
    // MAKE SURE FILE COMES FROM FORM
    if (!is_uploaded_file($_FILES['avatar']['tmp_name'])) {
        $error = true;
    }
    // MAKE SURE FILESIZE IS NOT OVER 1MB
    if (filesize($_FILES['avatar']['tmp_name']) > 1048576) {
        $error = true;
    }
    // TARGER TO SAVE FILE AND CHANGE FILENAME AND FILE TYPE
    $target = 'images/avatars/' . md5($user['id']) . '.gif';
    // IMAGE RATIO AND RESIZING
    $imgRatio = $width / $height;
    if ($imgRatio > 1) {
        $newWidth = 200;
        $newHeight = 200 / $imgRatio;
    } else {
        $newWidth = 200 * $imgRatio;
        $newHeight = 200;
    }
    $imgResized = imagecreatetruecolor($newWidth, $newHeight);
    $newImg = imagecreatefromgif($_FILES['avatar']['tmp_name']);
    $newImg = imagecopyresized($imgResized, $newImg, 0, 0, 0, 0, $newWidth, $newHeight, $width, $height);
    // SUCCESSFULL IMAGE UPLOAD
    if (!$error && move_uploaded_file($newImg, $target)) {
        echo '<p>Your avatar was uploaded successfully.</p>';
        // ERROR UPLOADING IMAGE
    } else {
        echo '<p>There was an error uploading your avatar.</p>';
    }

Он всегда терпит неудачу, я не могу заставить работать изменение размера, даже ссылку на хороший учебникхватит,

С новым годом !!

Ответы [ 2 ]

1 голос
/ 29 декабря 2011

Я думаю, что проблема в том, что вы используете 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 изменить размер загруженных изображений . Тонны учебника будут в одном клике от вас.

0 голосов
/ 29 декабря 2011

Сам код выглядит хорошо, однако может быть несколько причин, по которым он не работает. Некоторый отладочный вывод был бы полезен. Некоторые общие указатели:

  • убедитесь, что путь для tmp_name установлен и доступен для чтения
  • проверьте настройки php для post_max_size, возможно, он установлен на очень низкое значение или совсем не установлен.
  • в вашем коде вы обрабатываете только изображения в формате gif (imagecreatefromgif), вам может потребоваться проверить тип файла перед чтением из ресурса изображения
  • проверьте, правильно ли установлен GD в вашей установке php (phpinfo(); в сценарии php или php -i из командной строки должен отображать его как активированный)

Как это ни печально, добавьте несколько сообщений об ошибках в ваш вывод, чтобы мы могли помочь вам в дальнейшем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...