Разрешить пользователям загружать фото для своего профиля - PullRequest
2 голосов
/ 05 декабря 2010

Как ни странно, я не могу найти информацию по этой теме: фотографии профиля пользователя.

Есть ли PHP-решение для следующего?

  • Позволяет пользователям загружать фотографии с их жесткого диска для хранения на нашем сервере
  • Уменьшает изображение, если оно слишком большое; расширяет его, если он слишком маленький (высота / ширина)

Это легко построить самому? Или для него уже есть библиотека?

Ответы [ 3 ]

3 голосов
/ 05 декабря 2010

Чтобы загрузить и сохранить изображение, я бы порекомендовал создать случайное имя файла для изображения вместо сохранения исходного имени файла.Это предотвратит конфликты, а также добавит меры безопасности.Я бы предложил довольно длинное имя;только случайные числа и буквы.

Затем сохраните случайное имя файла в записи базы данных вместе с информацией о пользователе.Таким образом, вам не придется беспокоиться о том, что имена файлов и имена пользователей не синхронизируются, и, как я уже говорил ранее, кто-то не сможет догадаться, что изображение профиля Джо Шмоэ сохраняется как JoeSchmoe.jpg.

Когда вы доберетесь до части изменения размера изображения, используйте эту функцию, которую я модифицировал ниже (из комментариев пользователя PHP).В вашем случае "images/smallerpicture.jpeg", вероятно, будет заменен на "images/<some random name here>.jpeg".

Пример:

scaleImage("images/bigpicture.jpeg", 100, 100, "images/smallerpicture.jpeg");

Функция:

function scaleImage($source, $max_width, $max_height, $destination) {
    list($width, $height) = getimagesize($source);
    if ($width > 150 || $height > 150) {
        $ratioh = $max_height / $height;
        $ratiow = $max_width / $width;
        $ratio = min($ratioh, $ratiow);
        // New dimensions
        $newwidth = intval($ratio * $width);
        $newheight = intval($ratio * $height);

        $newImage = imagecreatetruecolor($newwidth, $newheight);

        $exts = array("gif", "jpg", "jpeg", "png");
        $pathInfo = pathinfo($source);
        $ext = trim(strtolower($pathInfo["extension"]));

        $sourceImage = null;

        // Generate source image depending on file type
        switch ($ext) {
        case "jpg":
        case "jpeg":
            $sourceImage = imagecreatefromjpeg($source);
            break;
        case "gif":
            $sourceImage = imagecreatefromgif($source);
            break;
        case "png":
            $sourceImage = imagecreatefrompng($source);
            break;
        }

        imagecopyresampled($newImage, $sourceImage, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);

        // Output file depending on type
        switch ($ext) {
        case "jpg":
        case "jpeg":
            imagejpeg($newImage, $destination);
            break;
        case "gif":
            imagegif($newImage, $destination);
            break;
        case "png":
            imagepng($newImage, $destination);
            break;
        }
    }
}

Поддерживает GIF, JPG и PNG.

1 голос
/ 05 декабря 2010

Трудно ответить на это, потому что «легкий» - это очень относительный термин. Для опытного php-кодера это легко, для начинающего это не так просто. Да, есть библиотеки для изменения размера изображения. Вам, вероятно, придется самостоятельно обрабатывать загрузку, это действительно легко Для изменения размера вы можете взглянуть на библиотеку груши здесь

1 голос
/ 05 декабря 2010

Может быть, этот базовый подход поможет вам:

Создание собственного учебного CMS

Для работы с изображениями с помощью php очень просто:

PHP: GD 1 Удачи

...