/** 返回图片信息

* @param $filename

*/

function getImageInfo($filename)

{

if (@!$info = getimagesize($filename)) {

exit("文件不是真实图片");

}

/**

* array

* 0 => int 756

* 1 => int 960

* 2 => int 2

* 3 => string 'width="756" height="960"' (length=24)

* 'bits' => int 8

* 'channels' => int 3

* 'mime' => string 'image/jpeg' (length=10)

*/

$fileInfo['width'] = $info[0];//756

$fileInfo['height'] = $info[1];//960

$mime = image_type_to_mime_type($info[2]);//image/jpeg

$createFun = str_replace('/', 'createfrom', $mime);

$outFun = str_replace('/', '', $mime);

$fileInfo['createFun'] = $createFun;

$fileInfo['outFun'] = $outFun;

$fileInfo['ext'] = strtolower(image_type_to_extension($info[2]));

return $fileInfo;

}

/**

* 形成缩略图

* @param $filename 文件名

* @param string $dest 缩略图保存路径,默认'thumb'

* @param string $pre 默认前缀thumb_

* @param null $dst_w 最大宽度

* @param null $dst_h 最大高度

* @param float $scale 默认缩放比例

* @param boolean $delSource 是否删除源文件标志

* @return string 最终保存路径及文件名

*

*/

function thumb($filename, $dest = 'thumb', $pre = 'thumb_',

$dst_w = null, $dst_h = null, $scale = 0.5, $delSource = false)

{

$fileInfo = getImageInfo($filename);

$src_w = $fileInfo['width'];

$src_h = $fileInfo['height'];

//如果指定最大宽度和高度,按照等比例缩放进行处理

if (is_numeric($dst_w) && is_numeric($dst_h)) {

$ratio_orig = $src_w / $src_h;

if ($dst_w / $dst_h > $ratio_orig) {

$dst_w = $dst_h * $ratio_orig;

} else {

$dst_h = $dst_w / $ratio_orig;

}

} else {

$dst_w = ceil($src_w * $scale);

$dst_h = ceil($src_h * $scale);

}

$dst_image = imagecreatetruecolor($dst_w, $dst_h);

$src_image = $fileInfo['createFun']($filename);

imagecopyresampled($dst_image, $src_image, 0, 0, 0, 0, $dst_w, $dst_h, $src_w, $src_h);

if ($dest && !file_exists($dest)) {

mkdir($dest, 07777, true);

}

$randNum = mt_rand(100000, 999999);

$dstName = "{$pre}{$randNum}" . $fileInfo['ext'];

$destination = $dest ? $dest . '/' . $dstName : $dstName;

$fileInfo['outFun']($dst_image, $destination);

imagedestroy($src_image);

imagedestroy($dst_image);

if ($delSource) {

@unlink($filename);

}

return $destination;

}

?>

php gd 缩略图,[PHP GD库]①0--缩略图封装相关推荐

  1. php 缩略图生成类,php生成图片缩略图类

    /** * @abstract 生成图片的缩略图,可以指定任意尺寸,生成的图片为png格式 * @example * $file = 'test.png'; * $th =new Thumbnail( ...

  2. java 上传图片 生成缩略图_将图片生成缩略图Java代码实现

    在工作中经常会遇到图片处理相关的需求,比如说一些图片网站只展示相关的缩略图,而真实的图片可能很大而不是直接展示.所以就需要在上传相关的图片后直接对图片进行处理生成相关的缩略图.实现代码如下: impo ...

  3. Oracle 知识篇+RMAN带库备份恢复/带库全备恢复/带库0级备份恢复操作概要

    说明:本文为Oracle RMAN带库备份恢复/带库全备恢复/带库0级备份恢复操作概要 温馨提示:如果您发现本文哪里写的有问题或者有更好的写法请留言或私信我进行修改优化 ①带库备份 rman targ ...

  4. 正点原子STM32(基于HAL库)0

    目录 开发环境搭建与使用 常用开发工具简介 MDK 安装 仿真器驱动安装 CH340 USB 虚拟串口驱动安装 使用MDK5 编译例程 使用串口下载程序 使用DAP 下载与调试程序 使用DAP 下载程 ...

  5. 荣耀发布标志性旗舰智能手机Magic3系列;环旭电子为小型物联网设备推出双核蓝牙5.0天线封装模块 | 全球TMT...

    新品 荣耀发布全新荣耀Magic3系列手机,这是标志性旗舰智能手机系列,包括荣耀Magic3.荣耀Magic3 Pro和荣耀Magic3至臻版这三款手机.耀Magic系列采用同类最佳多主摄计算摄影技术 ...

  6. Allegro中封装库中的封装更新到PCB中出现焊盘中心错位

    Allegro中封装库中的封装更新到PCB中出现焊盘中心错位 今天在画一个板子的时候,直接复制的上一个工程的LIB,在导入原理图网表更新后,焊盘中心出现错位. 使用的是一个锅仔片的封装,出现错误如下图 ...

  7. Retrofit网络加载库二次封装支持RxJava与Flow-HttpUtils

    Retrofit网络加载库二次封装支持RxJava与Flow-HttpUtils HttpUtils是Retrofit网络加载库二次封装支持RxJava与Flow,包含网络加载动画.activity销 ...

  8. Linux静态库.a与动态库.so的生成与区别、以及.so库文件的封装与使用

    #一.前言 如果有公司需要使用你们产品的一部分功能(通过代码调用这些功能),如果不想提供源代码,那么就可以通过封装成库文件的形式提供给对方使用.本文主要介绍了生成动态库与静态库文件的过程.以及封装和使 ...

  9. Window user32子动态库控件封装和消息分发浅析

    转自看雪:http://bbs.pediy.com/thread-43588.htm 众所周知:WIN32子动态库user32.dll 封装了系统定义的全局标准控件类和WNDPROCESS,然后共享给 ...

  10. Android基于Retrofit2.0 +RxJava 封装的超好用的RetrofitClient工具类(六)

    csdn :码小白 原文地址: http://blog.csdn.net/sk719887916/article/details/51958010 RetrofitClient 基于Retrofit2 ...

最新文章

  1. ​语义分割损失函数​
  2. 设置超链接在新的窗口中打开,而不是在本窗口中打开
  3. 从“美屋”到“打扮家”:线下VR家居馆中的科技新体验
  4. 二分法变种小结(leetcode 34、leetcode33、leetcode 81、leetcode 153、leetcode 74)
  5. 学习笔记整理之StringBuffer与StringBulider的线程安全与线程不安全
  6. 8.1 模型压缩的方法
  7. NeHe_Lesson8 Blending
  8. Execution failed for task :Test:lintVitalRelease/Lint found fatal errors while assembling a release
  9. cuda 排序算法笔记
  10. 图解DbgView使用
  11. 链表哈夫曼树--编码--解码
  12. 如何用计算机扫描图片变成文字,怎样扫描图片文字转换到Word
  13. PaddlePaddle (飞桨) - 开源深度学习平台
  14. 电子商务正在形成共同体经济
  15. HDU 6833 莫比乌斯反演 + 数论分块
  16. RK3328量产刻录完整镜像
  17. 系统资源的观察(摘自鸟哥的私房菜)
  18. 多个视频如何合 并,怎么合成视频
  19. python soup attrs_python模块之beautifulSoup
  20. Vue乱搞系列之axios发起表单请求

热门文章

  1. xgboost调参指南
  2. iOS 手机App消息推送功能(后台Java实现)
  3. Node.js环境搭建npm安装
  4. 如何在Android平台下进行Socket通信
  5. 关于坐标系,关于矩阵及线性相关和无关的关系
  6. [C1W3] Neural Networks and Deep Learning - Shallow neural networks
  7. Gym-101466K Random Numbers(线段树,数学,唯一分解定理)
  8. 谷歌SEO和百度SEO的区别
  9. html5中高德、腾讯、百度 地图api调起手机app
  10. CNN中的卷积操作的参数数计算