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 相关文章推荐
给apache2.2加上mod_encoding模块後 php5.2.0 处理url出现bug
Apr 12 PHP
php 字符串中的\n换行符无效、不能换行的解决方法
Apr 02 PHP
php中curl、fsocket、file_get_content三个函数的使用比较
May 09 PHP
从零开始学YII2框架(四)扩展插件yii2-kartikgii
Aug 20 PHP
php查看当前Session的ID实例
Mar 16 PHP
php将HTML表格每行每列转为数组实现采集表格数据的方法
Apr 03 PHP
十个PHP高级应用技巧果断收藏
Sep 25 PHP
PHP实现无限级分类(不使用递归)
Oct 22 PHP
php+mysql+jquery实现日历签到功能
Feb 27 PHP
php表单文件iframe异步上传实例讲解
Jul 26 PHP
php插入mysql数据返回id的方法
May 31 PHP
PHP 裁剪图片
Mar 09 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 session有效期session.gc_maxlifetime
2011/04/20 PHP
php利用反射实现插件机制的方法
2015/03/14 PHP
yii用户注册表单验证实例
2015/12/26 PHP
JS实现self的resend
2010/07/22 Javascript
window.location.hash 使用说明
2010/11/08 Javascript
IE6,IE7,IE8下使用Javascript记录光标选中范围(已补全)
2011/08/28 Javascript
js动态添加删除,后台取数据(示例代码)
2013/11/25 Javascript
Java/JS获取flash高宽的具体方法
2013/12/27 Javascript
javascript刷新父页面的各种方法汇总
2014/09/03 Javascript
用简洁的jQuery方法toggleClass实现隔行换色
2014/10/22 Javascript
基于jquery实现导航菜单高亮显示(两种方法)
2015/08/23 Javascript
基于jquery实现简单的手风琴特效
2015/11/24 Javascript
js字符串截取函数slice、substring和substr的比较
2016/05/17 Javascript
nodejs如何获取时间戳与时间差
2016/08/03 NodeJs
js中通过getElementsByName访问name集合对象的方法
2016/10/31 Javascript
vue2.0父子组件及非父子组件之间的通信方法
2017/01/21 Javascript
如何使用bootstrap框架 bootstrap入门必看!
2017/04/13 Javascript
Vue2.0实现组件数据的双向绑定问题
2018/03/06 Javascript
解决angularjs service中依赖注入$scope报错的问题
2018/10/02 Javascript
js实现网页同时进行多个倒计时功能
2019/02/25 Javascript
Javascript之高级数组API的使用实例
2019/03/08 Javascript
十分钟教你上手ES2020新特性
2020/02/12 Javascript
python的即时标记项目练习笔记
2014/09/18 Python
Python3一行代码实现图片文字识别的示例
2018/01/15 Python
Python实现的自定义多线程多进程类示例
2018/03/23 Python
使用Eclipse如何开发python脚本
2018/04/11 Python
python3中获取文件当前绝对路径的两种方法
2018/04/26 Python
利用Python实现在同一网络中的本地文件共享方法
2018/06/04 Python
深入浅析Python中的迭代器
2019/06/04 Python
pandas 缺失值与空值处理的实现方法
2019/10/12 Python
html5 拖拽及用 js 实现拖拽功能的示例代码
2020/10/23 HTML / CSS
英国手机零售商:Metrofone
2019/03/18 全球购物
什么是用户模式(User Mode)与内核模式(Kernel Mode) ?
2015/09/07 面试题
入团者的自我评价分享
2013/12/02 职场文书
理想演讲稿范文
2014/05/21 职场文书
2014保险公司个人工作总结
2014/12/09 职场文书