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初学者头痛的十四个问题
Jul 12 PHP
PHP的一个基础知识 表单提交
Jul 04 PHP
php并发对MYSQL造成压力的解决方法
Feb 21 PHP
php在window iis的莫名问题的测试方法
May 14 PHP
php 启动时报错的简单解决方法
Jan 27 PHP
更改localhost为其他名字的方法
Feb 10 PHP
深入理解PHP中的global
Aug 19 PHP
php cookie名使用点号(句号)会被转换
Oct 23 PHP
PHP实现Soap通讯的方法
Nov 03 PHP
mysql_connect localhost和127.0.0.1的区别(网络层阐述)
Mar 26 PHP
Laravel 5使用Laravel Excel实现Excel/CSV文件导入导出的功能详解
Oct 11 PHP
php面向对象基础详解【星际争霸游戏案例】
Jan 23 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
《一拳超人》埼玉一拳下去,他们存在了800年毫无意义!
2020/03/02 日漫
php下一个阿拉伯数字转中文数字的函数
2007/07/16 PHP
PHP之认识(二)关于Traits的用法详解
2019/04/11 PHP
Extjs中ComboBox加载并赋初值的实现方法
2012/03/22 Javascript
js捕获鼠标右键菜单中的粘帖事件实现代码
2013/04/01 Javascript
最好用的省市二级联动 原生js实现你值得拥有
2013/09/22 Javascript
JavaScript面对国际化编程时的一些建议
2015/06/24 Javascript
理解JavaScript的变量的入门教程
2015/07/07 Javascript
js中Number数字数值运算后值不对的解决方法
2017/02/28 Javascript
Vue关于数据绑定出错解决办法
2017/05/15 Javascript
React Native之ListView实现九宫格效果的示例
2017/08/02 Javascript
vue中eventbus被多次触发以及踩过的坑
2017/12/02 Javascript
webpack-url-loader 解决项目中图片打包路径问题
2019/02/15 Javascript
微信小程序云函数使用mysql数据库过程详解
2019/08/07 Javascript
《javascript设计模式》学习笔记一:Javascript面向对象程序设计对象成员的定义分析
2020/04/07 Javascript
vue实例的选项总结
2020/06/09 Javascript
基于p5.js 2D图像接口的扩展(交互实现)
2020/11/30 Javascript
python制作爬虫并将抓取结果保存到excel中
2016/04/06 Python
python中yield的用法详解——最简单,最清晰的解释
2019/04/04 Python
python自定义时钟类、定时任务类
2021/02/22 Python
Django RBAC权限管理设计过程详解
2019/08/06 Python
Python3将ipa包中的文件按大小排序
2020/04/17 Python
python利用faker库批量生成测试数据
2020/10/15 Python
css3 transform过渡抖动问题解决
2020/10/23 HTML / CSS
几个数据库方面的面试题
2016/07/01 面试题
夜大毕业自我鉴定
2013/10/11 职场文书
如何写一份好的英文求职信
2014/03/19 职场文书
校园安全演讲稿
2014/05/09 职场文书
项目申请汇报材料
2014/08/16 职场文书
工作表扬信
2015/01/17 职场文书
升职感谢信
2015/01/22 职场文书
公司前台接待岗位职责
2015/04/03 职场文书
大学生入党自我鉴定范文
2019/06/21 职场文书
餐厅如何利用“营销策略”扭转亏本局面
2019/10/15 职场文书
Nginx使用X-Accel-Redirect实现静态文件下载的统计、鉴权、防盗链、限速等
2021/04/04 Servers
golang通过递归遍历生成树状结构的操作
2021/04/28 Golang