首先是 代码展示:

  

 <?php

     class CImage {
/**
* 生成保持原图纵横比的缩略图,支持.png .jpg .gif
* 缩略图类型统一为.png格式
*@param $srcFile 原图像文件名称
*@param $toW 缩略图宽
*@param $toH 缩略图高
*@param$toFile 缩略图文件名称,为空覆盖原图像文件(我在最后把这个去了,就是直接在浏览器上显示,要是你家改动,就直接换倒数第六行的imagepng($ni,$toinfo);
* @return bool
*/
public static function CreateThumbnail($srcFile, $toW, $toH, $toFile = "") {
if ($toFile == "") {
$toFile = $srcFile;
}
$info = "";
//返回含有4个单元的数组,0-宽,1-高,2-图像类型,3-宽高的文本描述。
//失败返回false并产生警告。
$data = getimagesize($srcFile, $info);
if (!$data)
return false; //将文件载入到资源变量im中
switch ($data[]) //1-GIF,2-JPG,3-PNG
{
case :
if (!function_exists("imagecreatefromgif")) {
echo "the GD can't support .gif, please use .jpeg or .png! <a href='javascript:history.back();'>back</a>";
exit();
}
$im = imagecreatefromgif($srcFile);
break; case :
if (!function_exists("imagecreatefromjpeg")) {
echo "the GD can't support .jpeg, please use other picture! <a href='javascript:history.back();'>back</a>";
exit();
}
$im = imagecreatefromjpeg($srcFile);
break; case :
$im = imagecreatefrompng($srcFile);
break;
} //计算缩略图的宽高
$srcW = imagesx($im);
$srcH = imagesy($im);
$toWH = $toW / $toH;
$srcWH = $srcW / $srcH;
if ($toWH <= $srcWH) {
$ftoW = $toW;
$ftoH = (int)($ftoW * ($srcH / $srcW));
} else {
$ftoH = $toH;
$ftoW = (int)($ftoH * ($srcW / $srcH));
} if (function_exists("imagecreatetruecolor")) {
$ni = imagecreatetruecolor($ftoW, $ftoH); //新建一个真彩色图像
if ($ni) {
//重采样拷贝部分图像并调整大小 可保持较好的清晰度
imagecopyresampled($ni, $im, , , , , $ftoW, $ftoH, $srcW, $srcH);
} else {
//拷贝部分图像并调整大小
$ni = imagecreate($ftoW, $ftoH);
imagecopyresized($ni, $im, , , , , $ftoW, $ftoH, $srcW, $srcH);
}
} else {
$ni = imagecreate($ftoW, $ftoH);
imagecopyresized($ni, $im, , , , , $ftoW, $ftoH, $srcW, $srcH);
} //保存到文件 统一为.png格式
imagepng($ni); //以 PNG 格式将图像输出到浏览器或文件
ImageDestroy($ni);
ImageDestroy($im);
return true;
}
} //调用这个类的代码: /*
$name='./new_name.png';
CImage::CreateThumbnail($name,100,100,'') ;
*/

然后那个$name和这个php文件关系:

    

然后,结果展示:

    

106)PHP,缩略图代码和结果展示的更多相关文章

  1. 设计模式之工厂方法模式(代码用Objective-C展示)

    前面一篇展示了一个简单工厂模式,这一篇主要是对比,工厂方法模式比简单工厂模式好在哪里?为什么要用这个模式?这个模式的精髓在哪里? 就以计算器为例,结果图如下: 加减乘除运算都是继承自基类运算类,然后工 ...

  2. 设计模式之单一职责原则(iOS开发,代码用Objective-C展示)

    单一职责原则:就一个类而言,应该只有一个引起它变化的原因. 在iOS开发中,我们会很自然的给一个类添加各种各样的功能,比如随便写一个简单的应用程序,一般都会生成一个viewController类,于是 ...

  3. 显示youtube视频缩略图和Vimeo视频缩略图代码分享

    这篇文章主要介绍了显示youtube视频缩略图和Vimeo视频缩略图的代码,需要的朋友可以参考下 function video_image($url){ $image_url = parse_url( ...

  4. C#生成缩略图代码

    /**//// <summary>         /// 生成缩略图         /// </summary>         /// <param name=&q ...

  5. Web版记账本开发记录(一)代码和功能展示

    一丶基本机构 数据库截图 record表 年份表 index.jsp <%@ page language="java" contentType="text/html ...

  6. 设计模式之装饰模式(iOS开发,代码用Objective-C展示)

    在面向对象编程中有个重要的原则,里氏代换原则:一个软件实体如果使用的是一个父类的话,那么一定适用其子类,而且它察觉不出父类对象与子类对象的区别.也就是说,在软件设计里面,把父类替换成它的子类,程序的行 ...

  7. 设计模式之策略模式(iOS开发,代码用Objective-C展示)

    在实际开发过程中,app需求都是由产品那边给出,往往是他给出第一版功能,我们写好代码后,会相应的给出第二版.第三版功能,而这些功能是在实际使用中,根据用户需求而不断增加的.如果在编码之初,我们并未认识 ...

  8. SpringBoot 注册Servlet三大组件【Servlet、Filter、Listener】-原生代码+@Bean+效果展示

    由于SpringBoot默认是以jar包的方式启动嵌入式的Servlet容器来启动SpringBoot的web应用,没有web.xml文件. 注册三大组件,class MyServlet()/clas ...

  9. fiddler接口测试,js代码修改日志展示(埋点用)

    fiddler 通过fiddler 发送接口信息: http://blog.csdn.net/java2013liu/article/details/53380381 rules--automatic ...

随机推荐

  1. 循环(while,break,continue),转义字符

    01. 程序的三大流程 在程序开发中,一共有三种流程方式: 顺序 -- 从上向下,顺序执行代码 分支 -- 根据条件判断,决定执行代码的 分支 循环 -- 让 特定代码 重复 执行 02. while ...

  2. rabbitmq设置队列消息存活时间

    public static final int ALIVETIME = 600000; public static final String QUEUE = "hnyz_gs_queue&q ...

  3. 运用Access学习数据库的三大范式

    第一范式(1NF):强调的是列的原子性,即“列不能够再分成其他几列”,同一列中不能有多个值. 例子:业余爱好编码表+员工编码表 当员工杨来的业余爱好有多个时,此时的数据库设计不满足第一范式,可进行如下 ...

  4. EditText制作简单的登录界面

    EditText与之前的TextView和Button的用法大体相同,用法案例如下: activity_edit_text.xml: <?xml version="1.0" ...

  5. Bezier曲线的实现——de Casteljau算法

    这学期同时上了计算机图形学和计算方法两门课,学到这部分的时候突然觉得de Casteljau递推算法特别像牛顿插值,尤其递推计算步骤很像牛顿差商表. 一开始用伯恩斯坦多项式计算Bezier曲线的时候, ...

  6. centos挂载磁盘

    Aliyun实例为例 简单操作: 查看磁盘情况:fdisk -l 对数据盘进行分区,一般类似/dev/vdb这种为数据盘 输入fdisk  /dev/vdb 对数据盘进行分区.根据提示,输入 n, p ...

  7. Python笔记_第四篇_高阶编程_进程、线程、协程_3.进程vs线程

    1.多任务的实现原理: 通常我们会设计Mater-Workder模式,Master负责分配任务,Worker负责执行任务,因此多任务环境下,通常是一个Master,多个Worker 2.多进程: 主进 ...

  8. IOC 本质是为了实现 AOP|火影鸣人

    @JFinal 波总在 JFinal 4.8 发布新闻的评论 中给出了下面的表述: IOC 本质是为了实现 AOP 我有点吃惊, 没想到 Java 界的大佬对这两个概念有和我完全不一致的认识. 所以写 ...

  9. PAT Advanced 1029 Median (25) [two pointers]

    题目 Given an increasing sequence S of N integers, the median is the number at the middle position. Fo ...

  10. IntelliJ IDEA 2019.2 LUA环境搭建说明

    1.搭建GCC 添加系统环境变量PATH  为C:\MinGW\bin目录 测试命令进入CMD    gcc -v 2.编译LUA cd到lua/src目录      mingw32-make min ...