Скопируйте и измените размер изображения с помощью библиотеки php GD

Я хочу скопировать, изменить размер и (если это не слишком сложно) обрезать изображение.

Например: у меня есть изображение с размерами 1200 высота X 2300 ширина. Я хочу сделать его миниатюру размером 100x100 пикселей, и в этом случае, поскольку высота меньше ширины, высота должна быть на 100% видимой на новом изображении, а ширина должна сохранять пропорции изображения. Вот пример изображения.

Дополнительные детали:

Я использую wamp, я включил Gd 2 Я просто получаю неработающие изображения, когда пытаюсь переписать код из примера на этом сайте.

2 ответа

Попробуйте это из статьи " Изменение размера изображений с помощью PHP и библиотеки GD"

define('THUMBNAIL_IMAGE_MAX_WIDTH', 150);
define('THUMBNAIL_IMAGE_MAX_HEIGHT', 150);

function generate_image_thumbnail($source_image_path, $thumbnail_image_path)
{
    list($source_image_width, $source_image_height, $source_image_type) = getimagesize($source_image_path);
    switch ($source_image_type) {
        case IMAGETYPE_GIF:
            $source_gd_image = imagecreatefromgif($source_image_path);
            break;
        case IMAGETYPE_JPEG:
            $source_gd_image = imagecreatefromjpeg($source_image_path);
            break;
        case IMAGETYPE_PNG:
            $source_gd_image = imagecreatefrompng($source_image_path);
            break;
    }
    if ($source_gd_image === false) {
        return false;
    }
    $source_aspect_ratio = $source_image_width / $source_image_height;
    $thumbnail_aspect_ratio = THUMBNAIL_IMAGE_MAX_WIDTH / THUMBNAIL_IMAGE_MAX_HEIGHT;
    if ($source_image_width <= THUMBNAIL_IMAGE_MAX_WIDTH && $source_image_height <= THUMBNAIL_IMAGE_MAX_HEIGHT) {
        $thumbnail_image_width = $source_image_width;
        $thumbnail_image_height = $source_image_height;
    } elseif ($thumbnail_aspect_ratio > $source_aspect_ratio) {
        $thumbnail_image_width = (int) (THUMBNAIL_IMAGE_MAX_HEIGHT * $source_aspect_ratio);
        $thumbnail_image_height = THUMBNAIL_IMAGE_MAX_HEIGHT;
    } else {
        $thumbnail_image_width = THUMBNAIL_IMAGE_MAX_WIDTH;
        $thumbnail_image_height = (int) (THUMBNAIL_IMAGE_MAX_WIDTH / $source_aspect_ratio);
    }
    $thumbnail_gd_image = imagecreatetruecolor($thumbnail_image_width, $thumbnail_image_height);
    imagecopyresampled($thumbnail_gd_image, $source_gd_image, 0, 0, 0, 0, $thumbnail_image_width, $thumbnail_image_height, $source_image_width, $source_image_height);
    imagejpeg($thumbnail_gd_image, $thumbnail_image_path, 90);
    imagedestroy($source_gd_image);
    imagedestroy($thumbnail_gd_image);
    return true;
}
?>

Вы пытались использовать Timthumb? Это хороший маленький скрипт, который соответствует вашим требованиям. Если вы получили поврежденные файлы изображений, что-то с вашей установкой GD может быть неправильным, но без какого-либо кода трудно угадать. У вас есть какой-нибудь другой компьютер (возможно, веб-хост со стеком LAMP) для тестирования вашего кода?

Другие вопросы по тегам