如何在 PHP 中生成 300X200 尺寸的图像缩略图?

Posted

技术标签:

【中文标题】如何在 PHP 中生成 300X200 尺寸的图像缩略图?【英文标题】:How to generate image thumbnails in PHP in 300X200 dimensions? 【发布时间】:2014-04-18 13:41:14 【问题描述】:

我正在使用以下代码在 php 中生成图像缩略图。它生成与图像高度和宽度尺寸成比例的缩略图。

make_thumb('images/image.jpg', 'images-generated-thumbs/7.jpg', 300, 200);

function make_thumb($src, $dest, $desired_width, $desired_height) 

    /* read the source image */
    $source_image = imagecreatefromjpeg($src);
    $width = imagesx($source_image);
    $height = imagesy($source_image);

    /* find the "desired height" of this thumbnail, relative to the desired width  */
    $desired_height = floor($height*($desired_width/$width));
    $desired_width  = floor($width*($desired_height/$height));

    /* create a new, "virtual" image */
    $virtual_image = imagecreatetruecolor($desired_width, $desired_height);

    /* copy source image at a resized size */
    imagecopyresampled($virtual_image, $source_image, 0, 0, 0, 0, $desired_width, $desired_height, $width, $height);

    /* create the physical thumbnail image to its destination */
    imagejpeg($virtual_image, $dest);

对于上面的示例,它会生成大小为 299x187 的 7.jpg 缩略图。所以,我的问题是如何用白色填充其余像素((300-299)x(300-187))。 如果我们删除上面代码中的$desired_height变量,它会生成一个宽度为300的缩略图,所以只需要用白色填充剩余的高度。

【问题讨论】:

为什么这些缩略图的大小必须严格为 300*200? 【参考方案1】:

在修改宽度/高度之前,先存储它们:

$actual_width = $desired_width;
$actual_height = $desired_height;
$desired_height = floor($height*($desired_width/$width));
$desired_width  = floor($width*($desired_height/$height));

当你在画布时:

/* create a new, "virtual" image */
$virtual_image = imagecreatetruecolor($actual_width, $actual_height);

此时虚拟图像为黑色,用白色填充:

$white = imagecolorallocate($virtual_image, 255, 255, 255);
imagefill($virtual_image, 0, 0, $white );

【讨论】:

以上是关于如何在 PHP 中生成 300X200 尺寸的图像缩略图?的主要内容,如果未能解决你的问题,请参考以下文章

如何在php中生成自定义图像?

如何使用 PHP GD 从散列信息中生成唯一图像?

在 PHP 中生成带有动态图像的 ODT 文档

3gs 或 3g 手机上的视网膜图像

HTML 图像不调整大小

任何用于在文档中生成布局的算法?