【问题标题】:Copy and resize image with php GD library使用 php GD 库复制和调整图像大小
【发布时间】:2012-09-24 19:09:23
【问题描述】:

我想复制、调整大小并(如果不太难的话)裁剪图像。

例如:我有一个尺寸为 1200 高 X 2300 宽的图像。我想制作一个 100x100 像素的缩略图,在这种情况下,因为高度小于宽度,所以高度应该在新图像上 100% 可见,并且宽度应该保持图像的纵横比。 Here is an example image.

其他细节:

我正在使用 wamp,我启用了 Gd 2 当我尝试从 example on this site 重写代码时,我只是得到损坏的图像。

【问题讨论】:

    标签: php php-gd


    【解决方案1】:

    试试这个来自Resize Images Using PHP and GD Library 文章

    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;
    }
    ?>
    

    【讨论】:

    • 这东西需要重构……拼命
    【解决方案2】:

    您是否尝试过使用Timthumb?这是一个很好的小脚本,符合您的要求。 如果您的图像文件损坏,您的 GD 安装可能有问题,但没有看到任何代码就很难猜到。你有任何其他机器(可能是带有 LAMP 堆栈的网络主机)来测试你的代码吗?

    【讨论】:

      猜你喜欢
      • 2012-08-12
      • 1970-01-01
      • 2010-11-03
      • 2012-12-27
      • 1970-01-01
      • 2013-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多