php生成缩略图填充白边(等比缩略图方案)

时间:2024-06-05 09:50:16 

网站上传图片后生成缩略图应该是非常常用的功能了,通常来讲为了网站显示美观,缩略图会是同样尺寸,比如最近笔者做的一个站点,缩略图规格要求都是160×120。但是如果上传的图片比例和缩略图不一致,直接缩放的话就会导致图片变形,这样体验肯定就不好了。于是笔者想了一个折中的办法,就是缩小后添加白边的方法。

源图,尺寸是600×366:

php生成缩略图填充白边(等比缩略图方案)

最终生成的效果图:

php生成缩略图填充白边(等比缩略图方案)

代码相对比较长些,下面简单说下思路:

先将源图按比例生成缩略图,并且宽不大于160、高不大于120。例如上图会先生成160×98的缩略图。
新建一个160×120的白色背景图片,将上一步生成的缩略图居中放置到这张图片上就OK了。
最终代码如下:


//源图的路径,可以是本地文件,也可以是远程图片
$src_path = '1.jpg';
//最终保存图片的宽
$width = 160;
//最终保存图片的高
$height = 120;

//源图对象
$src_image = imagecreatefromstring(file_get_contents($src_path));
$src_width = imagesx($src_image);
$src_height = imagesy($src_image);

//生成等比例的缩略图
$tmp_image_width = 0;
$tmp_image_height = 0;
if ($src_width / $src_height >= $width / $height) {
    $tmp_image_width = $width;
    $tmp_image_height = round($tmp_image_width * $src_height / $src_width);
} else {
    $tmp_image_height = $height;
    $tmp_image_width = round($tmp_image_height * $src_width / $src_height);
}

$tmpImage = imagecreatetruecolor($tmp_image_width, $tmp_image_height);
imagecopyresampled($tmpImage, $src_image, 0, 0, 0, 0, $tmp_image_width, $tmp_image_height, $src_width, $src_height);

//添加白边
$final_image = imagecreatetruecolor($width, $height);
$color = imagecolorallocate($final_image, 255, 255, 255);
imagefill($final_image, 0, 0, $color);

$x = round(($width - $tmp_image_width) / 2);
$y = round(($height - $tmp_image_height) / 2);

imagecopy($final_image, $tmpImage, $x, $y, 0, 0, $tmp_image_width, $tmp_image_height);

//输出图片
header('Content-Type: image/jpeg');
imagejpeg($final_image);

标签:php生成缩略图,等比缩略图
0
投稿

猜你喜欢

  • 如何使用ADO.NET连接数据库?

    2010-06-03 10:52:00
  • MySQL时间格式化date_format使用语法

    2024-01-23 07:31:36
  • pytorch 获取层权重,对特定层注入hook, 提取中间层输出的方法

    2021-05-20 07:01:01
  • Pytorch实现WGAN用于动漫头像生成

    2023-07-24 22:31:26
  • 将MySQL的作为文件系统使用

    2011-12-14 18:34:26
  • Python Websocket服务端通信的使用示例

    2021-09-16 15:03:19
  • PHP实现PDF转图片的方法详解

    2023-05-26 19:59:51
  • 如何用SQL语句来建表?

    2010-06-13 14:38:00
  • Python趣味爬虫之用Python实现智慧校园一键评教

    2022-02-07 17:53:52
  • python实现的读取网页并分词功能示例

    2022-05-08 07:06:38
  • Sanic框架请求与响应实例分析

    2023-05-26 00:07:00
  • Go语言反射reflect.Value实现方法的调用

    2023-07-22 15:50:11
  • python发送伪造的arp请求

    2022-11-24 00:47:35
  • JS常见错误(Error)及处理方案详解

    2024-04-22 22:24:34
  • Python下载手机小视频的操作方法

    2022-11-16 02:40:55
  • Django使用中间件解决前后端同源策略问题

    2022-09-05 10:33:32
  • 常用SQL语句查询分享

    2024-01-12 16:13:11
  • python广度搜索解决八数码难题

    2023-01-26 18:12:43
  • 使用python检查yaml配置文件是否符合要求

    2021-06-23 05:27:53
  • Python实现网络端口转发和重定向的方法

    2023-09-23 10:19:59
  • asp之家 网络编程 m.aspxhome.com