一个简单但功能比较完善的自动生成缩略图的函数,可以按需要对图片进行缩放、裁切、锁定宽或高、使用空白填充

以下为源码,比较简单,相信很容易看明白,记得打开 GD 库的支持哦:

/**

* 生成缩略图

* @param string 源图绝对完整地址{带文件名及后缀名}

* @param string 目标图绝对完整地址{带文件名及后缀名}

* @param int 缩略图宽{值设为0时目标高度不能为0,目标宽度为源图宽*(目标高度/源图高)}

* @param int 缩略图高{值设为0时目标宽度不能为0,目标高度为源图高*(目标宽度/源图宽)}

* @param int 是否裁切{宽,高必须非0}

* @param int/float 缩放{0:不缩放, 0

* @return boolean

*/

function img2thumb($src_img, $dst_img, $width = 75, $height = 75, $cut = 0, $proportion = 0)

{

if(!is_file($src_img))

{

return false;

}

$ot = fileext($dst_img);

$otfunc = 'image' . ($ot == 'jpg' ? 'jpeg' : $ot);

$srcinfo = getimagesize($src_img);

$src_w = $srcinfo[0];

$src_h = $srcinfo[1];

$type = strtolower(substr(image_type_to_extension($srcinfo[2]), 1));

$createfun = 'imagecreatefrom' . ($type == 'jpg' ? 'jpeg' : $type);

$dst_h = $height;

$dst_w = $width;

$x = $y = 0;

/**

* 缩略图不超过源图尺寸(前提是宽或高只有一个)

*/

if(($width> $src_w && $height> $src_h) || ($height> $src_h && $width == 0) || ($width> $src_w && $height == 0))

{

$proportion = 1;

}

if($width> $src_w)

{

$dst_w = $width = $src_w;

}

if($height> $src_h)

{

$dst_h = $height = $src_h;

}

if(!$width && !$height && !$proportion)

{

return false;

}

if(!$proportion)

{

if($cut == 0)

{

if($dst_w && $dst_h)

{

if($dst_w/$src_w> $dst_h/$src_h)

{

$dst_w = $src_w * ($dst_h / $src_h);

$x = 0 - ($dst_w - $width) / 2;

}

else

{

$dst_h = $src_h * ($dst_w / $src_w);

$y = 0 - ($dst_h - $height) / 2;

}

}

else if($dst_w xor $dst_h)

{

if($dst_w && !$dst_h) //有宽无高

{

$propor = $dst_w / $src_w;

$height = $dst_h = $src_h * $propor;

}

else if(!$dst_w && $dst_h) //有高无宽

{

$propor = $dst_h / $src_h;

$width = $dst_w = $src_w * $propor;

}

}

}

else

{

if(!$dst_h) //裁剪时无高

{

$height = $dst_h = $dst_w;

}

if(!$dst_w) //裁剪时无宽

{

$width = $dst_w = $dst_h;

}

$propor = min(max($dst_w / $src_w, $dst_h / $src_h), 1);

$dst_w = (int)round($src_w * $propor);

$dst_h = (int)round($src_h * $propor);

$x = ($width - $dst_w) / 2;

$y = ($height - $dst_h) / 2;

}

}

else

{

$proportion = min($proportion, 1);

$height = $dst_h = $src_h * $proportion;

$width = $dst_w = $src_w * $proportion;

}

$src = $createfun($src_img);

$dst = imagecreatetruecolor($width ? $width : $dst_w, $height ? $height : $dst_h);

$white = imagecolorallocate($dst, 255, 255, 255);

imagefill($dst, 0, 0, $white);

if(function_exists('imagecopyresampled'))

{

imagecopyresampled($dst, $src, $x, $y, 0, 0, $dst_w, $dst_h, $src_w, $src_h);

}

else

{

imagecopyresized($dst, $src, $x, $y, 0, 0, $dst_w, $dst_h, $src_w, $src_h);

}

$otfunc($dst, $dst_img);

imagedestroy($dst);

imagedestroy($src);

return true;

}

function fileext($file)

{

return pathinfo($file, PATHINFO_EXTENSION);

}

?>

使用示例:

$src_img = "./test.jpg"; //原图片完整路径和名称,带图片扩展名

$dst_img = "./test_thumb.jpg"; //生成的缩略图存放的完整路径和名称

/* 生成宽300px,高200px的缩略图,不进行裁切,空白部分将会使用背景色填充 */

$stat = img2thumb($src_img, $dst_img, $width = 300, $height = 200, $cut = 0, $proportion = 0);

if($stat){

echo 'Resize Image Success!
';

echo '';

}else{

echo 'Resize Image Fail!';

}

?>

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。如果你想了解更多相关内容请查看下面相关链接

php 直接显示缩略图,PHP自动生成缩略图函数的源码示例相关推荐

  1. 2022-11-28关键词扩充,文章自动生成,采集php源码,自动配图源码,SEO提高收录权重无限长尾词

    2022-11-28关键词扩充,文章自动生成,采集php源码,自动配图源码,SEO提高收录权重无限长尾词 本次 主要讲解 文章采集 SEO 关键词 扩充 自动生成文章等 提高 收录 提高 权重 视频 ...

  2. 网页骨架屏自动生成方案(附源码地址)

    点击上方"程序员黑叔",选择"置顶或者星标" 你的关注意义重大! 来源:花满楼 https://zhuanlan.zhihu.com/p/74403911 什么 ...

  3. html一键生成预览图,选择图片后显示缩略图(自动生成缩略图)

    下面是完整代码,看注释: 显示选择图片的缩略图 #dropbox { width: 400px; height: 70px; line-height: 70px; text-align: center ...

  4. php图片生成缩略图_php实现根据url自动生成缩略图的方法

    本文实例讲述了php实现根据url自动生成缩略图的方法,是非常实用的功能.分享给大家供大家参考.具体方法如下: 原理:设置apache rewrite ,当图片不存在时,调用php创建图片. 例如: ...

  5. php显示图片缩略图,使用ThinkPHP生成缩略图及显示的方法

    这篇文章主要为大家详细介绍了使用ThinkPHP生成缩略图及显示的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 使用ThinkPHP生成缩略图及显示,具有一定的参考价值,感兴趣的小伙伴们 ...

  6. WordPress彻底禁用上传媒体图片自动生成缩略图及多尺寸图片(亲测可用)

    WordPress默认上传图片的时候会自动生成缩略图及多尺寸的图片文件,大部分网站都用不到这些多余的图片,不仅仅占用空间,而且上传的时候还会消耗额外的性能. 下面仅需两段函数代码即可彻底禁用该功能. ...

  7. Effective C++ 之 Item 6 : 若不想使用编译器自动生成的函数,就该明确拒绝

    Effective C++ chapter 2. 构造 / 析构 / 赋值运算 (Constructors, Destructors, and Assignment Operators) Item 6 ...

  8. C++若不想使用编译器自动生成的函数,就该明确拒绝

    C++若不想使用编译器自动生成的函数,就该明确拒绝 为什么要拒绝? 将copy构造函数或copy assignment操作符声明为private,并且不定义 使用delete(C++11 ) 为什么要 ...

  9. 条款6:明确拒绝编译器自动生成的函数

    有的类对象是独一无二的,不希望有复制函数,又因为如果不声明复制函数会自动生成复制函数,所以要明确拒绝. 两种不同方法 方法一 class HomeForSale:private Uncopyable{ ...

最新文章

  1. 移动端页面自适应解决方案—rem布局(进阶版)
  2. 前端学习(3249):react的文件src
  3. 第一个冲刺周期(第四天)
  4. 堪称奇迹!8 天诞生一个产品,这家创业公司做到了
  5. Linux学习总结(75)—— Linux history 命令实用技巧
  6. 在powerpoint中默认的视图是_专升本计算机《Word、Excel、Powerpoint》知识点
  7. Restful风格实现页面之间跳转PageController
  8. .Net 程序员应该知道的工具和网站
  9. WebService报错javax xml ws soap SOAPFaultException javax xml
  10. php serialize参数,php serialize(),unserialize()
  11. Atitit s2018 s3 doc list alldvc.docx .docx s2018 s3f doc compc s2018 s3f doc homepc sum doc dvcCom
  12. gdb 的使用 problem solution
  13. Windows7主题包:Aero Pure 0.2 更像Win8
  14. 增强 扫描王 源码_camscanner(扫描全能王)功能解析与复现 - 页面增强
  15. php pcntl_alarm,pcntl_alarm定时闹钟信号详解
  16. power bi -分组累计求和
  17. Tolua使用笔记一:开始使用Tolua的准备工作与lua文件读取方法
  18. 使用nid的修改数据库名
  19. layui动态表格下拉菜单
  20. TA 数学函数与美术的结合

热门文章

  1. 二进制LDPC码的构造及译码算法
  2. 微软小冰:全双工语音对话详解
  3. 陈峰/何雪松/陈宁客座主编Frontiers口腔微生物组学专刊征稿(IF6)
  4. 战斗系统之属性设计(一)
  5. 程序员的时间管理计划
  6. 卡巴斯基:2019Q3拒绝服务攻击趋势报告
  7. catia v5r25 百度网盘_CATIA v5R21软件下载(sp0,p2及p3版)百度网盘
  8. 在U盘下安装ubuntu系统,从U盘启动Linux系统
  9. 计算机考研面试常见英语提问及专业课
  10. Java刀_Java尖刀系列3:堆