共有两种等比例缩略图方法可以借鉴

一、为类文件,实例化之后即可使用

二、为自定义方法,比较轻巧

类文件

$resizeimage = new resizeimage("./shawn.jpg", "200", "100", "0","../pic/shawnsun.jpg");

//实例化下面的类,就能生成缩略图

//其中,源文件和缩略图地址可以相同,200,100分别代表宽和高,第四个参数为可选 0不截图,1为截图

class resizeimage{

//图片类型

public $type;

//实际宽度

public $width;

//实际高度

public $height;

//改变后的宽度

public $resize_width;

//改变后的高度

public $resize_height;

//是否裁图

public $cut;

//源图象

public $srcimg;

//目标图象地址

public $dstimg;

//临时创建的图象

public $im;

function resizeimage($img, $wid, $hei,$c,$dstpath){

$this--->srcimg = $img;

$this->resize_width = $wid;

$this->resize_height = $hei;

$this->cut = $c;

//图片的类型

$this->type = strtolower(substr(strrchr($this->srcimg,"."),1));

//初始化图象

$this->initi_img();

//目标图象地址

$this->dst_img($dstpath);

//W & H

$this->width  = imagesx($this->im);

$this->height = imagesy($this->im);

//生成图象

$this->newimg();

ImageDestroy ($this->im);

}

function newimg(){

//改变后的图象的比例

$resize_ratio = ($this->resize_width)/($this->resize_height);

//实际图象的比例

$ratio = ($this->width)/($this->height);

if(($this->cut)=="1")

//裁图

{

if($ratio>=$resize_ratio)

//高度优先

{

$newimg = imagecreatetruecolor($this->resize_width,$this->resize_height);

imagecopyresampled($newimg, $this->im, 0, 0, 0, 0, $this->resize_width,

$this->resize_height, (($this->height)*$resize_ratio),

$this->height

);

ImageJpeg ($newimg,$this->dstimg);

}

if($ratio

//宽度优先

{

$newimg = imagecreatetruecolor($this->resize_width,$this->resize_height);

imagecopyresampled($newimg, $this->im, 0, 0, 0, 0, $this->resize_width,

$this->resize_height, $this->width,

(($this->width)/$resize_ratio)

);

ImageJpeg ($newimg,$this->dstimg);

}

}

else

//不裁图

{

if($ratio>=$resize_ratio)

{

$newimg = imagecreatetruecolor($this->resize_width,

($this->resize_width)/$ratio

);

imagecopyresampled($newimg, $this->im, 0, 0, 0, 0, $this->resize_width,

($this->resize_width)/$ratio, $this->width,

$this->height

);

ImageJpeg ($newimg,$this->dstimg);

}

if($ratio

{

$newimg = imagecreatetruecolor(($this->resize_height)*$ratio,

$this->resize_height

);

imagecopyresampled($newimg, $this->im, 0, 0, 0, 0,

($this->resize_height)*$ratio,

$this->resize_height, $this->width,

$this->height

);

ImageJpeg ($newimg,$this->dstimg);

}

}

}

//初始化图象

function initi_img(){

if($this->type=="jpg")

{

$this->im = imagecreatefromjpeg($this->srcimg);

}

if($this->type=="gif")

{

$this->im = imagecreatefromgif($this->srcimg);

}

if($this->type=="png")

{

$this->im = imagecreatefrompng($this->srcimg);

}

}

//图象目标地址

function dst_img($dstpath){

$full_length  = strlen($this->srcimg);

$type_length  = strlen($this->type);

$name_length  = $full_length-$type_length;

$name = substr($this->srcimg,0,$name_length-1);

$this->dstimg = $dstpath;

//echo $this->dstimg;

}

}

?>

自定义方法

thumbs('shawn.jpg','shawnsun.jpg',100,100);

//参数属性类似于方法一

function thumbs($FileName,$SaveTo,$SetW,$SetH){

$IMGInfo= getimagesize($FileName);

if(!$IMGInfo) return false;

if($IMGInfo['mime']== "image/pjpeg" || $IMGInfo['mime']=="image/jpeg"){

$ThisPhoto= imagecreatefromjpeg($FileName);

}elseif($IMGInfo['mime']== "image/x-png" || $IMGInfo['mime']== "image/png"){

$ThisPhoto= imagecreatefrompng($FileName);

}elseif($IMGInfo['mime']== "image/gif"){

$ThisPhoto=imagecreatefromgif($FileName);

}

$width=$IMGInfo[0];

$height=$IMGInfo[1];

$scalc = max($width/$SetW,$height/$SetH);

$nw = intval($width/$scalc);

$nh = intval($height/$scalc);

echo "缩略大小:w$nw,h$nh
";

if($SetW-$nw == 1){$nw = $SetW;}

if($SetH-$nh == 1){$nh = $SetH;}

echo "+修正1像素: w$nw,h$nh
";

//补宽

if($SetW-$nw > 0){

$nh = $nh +(($nh/$nw) * ($SetW-$nw));

echo "*需补宽".($SetW-$nw).",陪补高".(($nh/$nw) * ($SetW-$nw))." 
";

$nw = $SetW;

}

//补高

if($SetH-$nh > 0){

$nw = $nw + (($nw/$nh) * ($SetH-$nh));

echo "*需补高".($SetH-$nh).",陪补宽". (($nw/$nh) * ($SetH-$nh)) ."
";

$nh = $SetH;

}

$nw = intval($nw);

$nh = intval($nh);

echo "+修正大小:w$nw,h$nh
";

$px = ($SetW - $nw)/2;

$py = ($SetH - $nh)/2;

echo "窗口大小:w$SetW,h$SetH
";

echo "+偏移修正:x$px,y$py
";

$NewPhoto=imagecreatetruecolor($SetW,$SetH);

imagecopyresized($NewPhoto,$ThisPhoto,$px,$py,0,0,$nw,$nh,$width,$height);

ImageJpeg ($NewPhoto,$SaveTo);

return true;

}

?>

php类和自定义函数实例,PHP生成等比缩略图类和自定义函数分享相关推荐

  1. python一个类有几个实例对象_Python为单个对象/类创建多个实例

    我在用Python.我读了一点关于这个的书,似乎无法把我的思想集中起来.我想做的是有一个叫做魔药的类,里面有各种魔药对象.现在只有一种药水,一种简单的保健药水.我希望药水可以堆放在库存和商店库存中.所 ...

  2. 云服务器怎么执行sql文件在哪里,总结帝国CMS下在PHP文件中怎么调用数据库类执行SQL语句实例...

    总结帝国CMS下在PHP文件中怎么调用数据库类执行SQL语句实例 发布时间:2020-10-19 14:58:08 来源:亿速云 阅读:83 作者:小新 这篇文章将为大家详细讲解有关总结帝国CMS下在 ...

  3. python教程三角函数_Python入门之三角函数tan()函数实例详解

    描述 tan() 返回x弧度的正弦值. 语法 以下是 tan() 方法的语法: import math math.tan(x) 注意:tan()是不能直接访问的,需要导入 math 模块,然后通过 m ...

  4. php图片生成缩略图_PHP生成图片缩略图类示例

    本文实例讲述了PHP生成图片缩略图类.分享给大家供大家参考,具体如下: class App_image_helper { protected $imgFileName; protected $imgW ...

  5. python画tan_Python入门之三角函数tan()函数实例详解

    描述 tan() 返回x弧度的正弦值. 语法 以下是 tan() 方法的语法: import math math.tan(x) 注意:tan()是不能直接访问的,需要导入 math 模块,然后通过 m ...

  6. python类定义以及调用_python中如何定义和调用类详解

    类的方法的定义 1.def fun_name(self,...); Pass 2.其中的参数self代表类的实例,在调用方法时由系统自动提供 3.方法定义时必须指明self参数 类的方法的调用 与普通 ...

  7. php类和自定义函数实例,php中三个调用用户自定义函数实例详解

    在php中调有自定义函数,经常会用到call_user_func函数.call_user_func_array函数.call_user_func函数. 1,call_user_func函数类似于一种特 ...

  8. mysql自定义函数的分号_MySQL之自定义函数实例讲解

    转自:https://www.2cto.com/database/201804/740205.html MySQL中已经有很多函数,如时间函数等,但是有时这些函数不能满足自己的设计需求,此时需要自定义 ...

  9. python函数实例与类实例_python – 在类和实例上表现不同的函数

    好问题!您使用描述符可以轻松完成您所寻求的内容. Descriptors是实现描述符协议的Python对象,通常以__get __()开头. 它们主要存在于不同类中的类属性.在访问它们时,将调用它们的 ...

最新文章

  1. Ibatis调用Oracle存储过程,以及返回Cursor结果集的问题
  2. hadoop 单机单间_零基础入门hadoop大数据四——Hadoop框架前奏,JDK环境配置
  3. linux 正则查找email_Linux 正则表达式详解
  4. 计算机一级电子表格怎么打开,xls文件怎么打开?其实很简单
  5. Python里面对于嵌套列表的查询
  6. 程序员才能看懂的30张图,看到最后一张我哭了
  7. python-字符串的切片操作
  8. 13万张表+数亿行代码,迁移只需数小时,还是异构数据库
  9. 下一版本的Android OS ——Jelly Bean
  10. bzoj1724[Usaco2006 Nov]Fence Repair 切割木板*
  11. 中国范围NPP-VIIRS逐年夜间灯光数据(2013-2020年)
  12. vs2015-devexpress 安装
  13. uc/os-II的内存改进与实现TLSF算法的详解,移植实现(三)
  14. 求生之路4的联机方法和秘籍
  15. Xshell脚本实现自动登陆||自动登陆的几种方式。
  16. RPG游戏制作-02-游戏世界主角的诞生
  17. 【源码】基于心电图的数据分析
  18. 自制AVA数据集工具/slowfast模型训练数据集制作
  19. 磁带机PowerVault LTO-7使用
  20. 重装Windows,只用53款全免费软件

热门文章

  1. java实现非阻塞io原理_JAVA 非阻塞IO原理
  2. 【echarts双y轴:左右轴数据分开设置最大值(解决刻度线不对齐】
  3. 验证码识别软件的六大钻石亮点!
  4. 突发!Log4j 爆“核弹级”漏洞,Flink 等项目受影响,提供 Flink 解决方法,赶紧修!...
  5. nginx rtmp 服务建立 全套代码,含直播、播放、录制、转码
  6. windows操作小技巧1:文件批操作更改类型
  7. 网易python笔试题_python 饥饿的小易(网易笔试题)
  8. 算法竞赛进阶指南0x10练习9:Soldiers
  9. 如何去掉裁剪图片的边框_裁剪框
  10. 在Portainer上添加其他主机上的docker