php使用GD创建保持宽高比缩略图的方法


Posted in PHP onApril 17, 2015

本文实例讲述了php使用GD创建保持宽高比缩略图的方法。分享给大家供大家参考。具体如下:

/**
* Create a thumbnail image from $inputFileName no taller or wider than
* $maxSize. Returns the new image resource or false on error.
* Author: mthorn.net
*/
function thumbnail($inputFileName, $maxSize = 100)
{
 $info = getimagesize($inputFileName);
  $type = isset($info['type']) ? $info['type'] : $info[2];
  // Check support of file type
 if ( !(imagetypes() & $type) )
 {
   // Server does not support file type
   return false;
 }
  $width = isset($info['width']) ? $info['width'] : $info[0];
 $height = isset($info['height']) ? $info['height'] : $info[1];
  // Calculate aspect ratio
 $wRatio = $maxSize / $width;
 $hRatio = $maxSize / $height;
  // Using imagecreatefromstring will automatically detect the file type
 $sourceImage = imagecreatefromstring(file_get_contents($inputFileName));
  // Calculate a proportional width and height no larger than the max size.
 if ( ($width <= $maxSize) && ($height <= $maxSize) )
 {
   // Input is smaller than thumbnail, do nothing
   return $sourceImage;
 }
 elseif ( ($wRatio * $height) < $maxSize )
 {
   // Image is horizontal
   $tHeight = ceil($wRatio * $height);
   $tWidth = $maxSize;
 }
 else
 {
   // Image is vertical
   $tWidth = ceil($hRatio * $width);
   $tHeight = $maxSize;
 }
  $thumb = imagecreatetruecolor($tWidth, $tHeight);
  if ( $sourceImage === false )
 {
   // Could not load image
   return false;
 }
  // Copy resampled makes a smooth thumbnail
 imagecopyresampled($thumb,$sourceImage,0,0,0,0,$tWidth,$tHeight,$width,$height);
 imagedestroy($sourceImage);
  return $thumb;
}
 /**
* Save the image to a file. Type is determined from the extension.
* $quality is only used for jpegs.
* Author: mthorn.net
*/
function imageToFile($im, $fileName, $quality = 80)
{
 if ( !$im || file_exists($fileName) )
 {
   return false;
 }
  $ext = strtolower(substr($fileName, strrpos($fileName, '.')));
  switch ( $ext )
 {
  case '.gif':
  imagegif($im, $fileName);
  break;
  case '.jpg':
  case '.jpeg':
  imagejpeg($im, $fileName, $quality);
  break;
  case '.png':
  imagepng($im, $fileName);
  break;
  case '.bmp':
  imagewbmp($im, $fileName);
  break;
  default:
  return false;
 }
  return true;
}
$im = thumbnail('temp.jpg', 100);
imageToFile($im, 'temp-thumbnail.jpg');

希望本文所述对大家的php程序设计有所帮助。

PHP 相关文章推荐
PHP_Flame(Version:Progress)的原代码
Oct 09 PHP
php 随机生成10位字符代码
Mar 26 PHP
redis 队列操作的例子(php)
Apr 12 PHP
php.ini-dist 和 php.ini-recommended 的区别介绍(方便开发与安全的朋友)
Jul 01 PHP
php中定时计划任务的实现原理
Jan 08 PHP
PHP轻量级数据库操作类Medoo增加、删除、修改、查询例子
Jul 04 PHP
PHP多进程编程实例
Oct 15 PHP
PHP入门教程之字符串处理技巧总结(转换,过滤,解析,查找,截取,替换等)
Sep 11 PHP
PhpStorm terminal无法输入命令的解决方法
Oct 09 PHP
php获取当前url地址的方法小结
Jan 10 PHP
详解yii2使用多个数据库的案例
Jun 16 PHP
php实现记事本案例
Oct 20 PHP
PHP中preg_match正则匹配中的/u、/i、/s含义
Apr 17 #PHP
php和editplus正则表达式去除空白行
Apr 17 #PHP
PHP生成唯一订单号的方法汇总
Apr 16 #PHP
微信access_token的获取开发示例
Apr 16 #PHP
微信自定义菜单的处理开发示例
Apr 16 #PHP
php简单操作mysql数据库的类
Apr 16 #PHP
PHP扩展程序实现守护进程
Apr 16 #PHP
You might like
php把数据表导出为Excel表的最简单、最快的方法(不用插件)
2014/05/10 PHP
php中get_defined_constants函数用法实例分析
2015/05/12 PHP
基于win2003虚拟机中apache服务器的访问
2017/08/01 PHP
详解php伪造Referer请求反盗链资源
2019/01/24 PHP
JS支持带x身份证号码验证函数
2008/08/10 Javascript
File文件控件,选中文件(图片,flash,视频)即立即预览显示
2009/04/09 Javascript
JS中实现replaceAll的方法(实例代码)
2013/11/12 Javascript
JS来动态的修改url实现对url的增删查改
2014/09/05 Javascript
JavaScript使用indexOf获得子字符串在字符串中位置的方法
2015/04/06 Javascript
window.setInterval()方法的定义和用法及offsetLeft与style.left的区别
2015/11/11 Javascript
jQuery Validation Plugin验证插件手动验证
2016/01/26 Javascript
Servlet实现文件上传,可多文件上传示例
2016/12/05 Javascript
AngularJS中的缓存使用
2017/01/11 Javascript
Bootstrap Table 删除和批量删除
2017/09/22 Javascript
Vue.js 实现微信公众号菜单编辑器功能(二)
2018/05/08 Javascript
详解项目升级到vue-cli3的正确姿势
2019/01/28 Javascript
layer.open组件获取弹出层页面变量、函数的实例
2019/09/25 Javascript
nuxt配置通过指定IP和端口访问的实现
2020/01/08 Javascript
javascript设计模式之迭代器模式
2020/01/30 Javascript
JavaScript运动原理基础知识详解
2020/04/02 Javascript
OpenLayer学习之自定义测量控件
2020/09/28 Javascript
python paramiko实现ssh远程访问的方法
2013/12/03 Python
Python的Django框架中的URL配置与松耦合
2015/07/15 Python
用Python删除本地目录下某一时间点之前创建的所有文件的实例
2017/12/14 Python
Anaconda下配置python+opencv+contribx的实例讲解
2018/08/06 Python
Python英文文本分词(无空格)模块wordninja的使用实例
2019/02/20 Python
Python弹出输入框并获取输入值的实例
2019/06/18 Python
Pycharm+Python+PyQt5使用详解
2019/09/25 Python
Python简易计算器制作方法代码详解
2019/10/31 Python
python颜色随机生成器的实例代码
2020/01/10 Python
在django中实现choices字段获取对应字段值
2020/07/12 Python
如何用H5实现一个触屏版的轮播器的实例
2017/01/09 HTML / CSS
茱莉蔻美国官网:Jurlique美国
2020/11/24 全球购物
武汉英思工程科技有限公司&ndash;ORACLE面试测试题目
2012/04/30 面试题
二手房买卖协议书
2014/04/10 职场文书
css filter和getUserMedia的联合使用
2022/02/24 HTML / CSS