上传图片然后按照比例缩略图,指定缩略图的最大高度或者最大宽度。

<?php
function _UPLOADPIC($upfile, $maxsize, $updir, $newname = 'date') {     if ($newname == 'date')     $newname = date ( "Ymdhis" ); //使用日期做文件名       $name = $upfile ["name"];     $type = $upfile ["type"];     $size = $upfile ["size"];     $tmp_name = $upfile ["tmp_name"];     switch ($type) {     case 'image/pjpeg' :     case 'image/jpeg' :     $extend = ".jpg";     break;     case 'image/gif' :     $extend = ".gif";     break;     case 'image/png' :     $extend = ".png";     break;     }     if (emptyempty ( $extend )) {     echo  ( "警告!只能上传图片类型:GIF JPG PNG" );     exit ();     }     if ($size > $maxsize) {     $maxpr = $maxsize / 1000;     echo  ( "警告!上传图片大小不能超过" . $maxpr . "K!" );     exit ();     }     if (move_uploaded_file ( $tmp_name, $updir . $newname . $extend )) {     return $updir . $newname . $extend;     }
}     function show_pic_scal($width, $height, $picpath) {     $imginfo = GetImageSize ( $picpath );     $imgw = $imginfo [0];     $imgh = $imginfo [1];     $ra = number_format ( ($imgw / $imgh), 1 ); //宽高比     $ra2 = number_format ( ($imgh / $imgw), 1 ); //高宽比     if ($imgw > $width or $imgh > $height) {     if ($imgw > $imgh) {     $newWidth = $width;     $newHeight = round ( $newWidth / $ra );     } elseif ($imgw < $imgh) {     $newHeight = $height;     $newWidth = round ( $newHeight / $ra2 );     } else {     $newWidth = $width;     $newHeight = round ( $newWidth / $ra );     }     } else {     $newHeight = $imgh;     $newWidth = $imgw;     }     $newsize [0] = $newWidth;     $newsize [1] = $newHeight;     return $newsize;
}     function getImageInfo($src)
{     return getimagesize($src);
}
/**
* 创建图片,返回资源类型
* @param string $src 图片路径
* @return resource $im 返回资源类型
* **/
function create($src)
{     $info=getImageInfo($src);     switch ($info[2])     {     case 1:     $im=imagecreatefromgif($src);     break;     case 2:     $im=imagecreatefromjpeg($src);     break;     case 3:     $im=imagecreatefrompng($src);     break;     }     return $im;
}
/**
* 缩略图主函数
* @param string $src 图片路径
* @param int $w 缩略图宽度
* @param int $h 缩略图高度
* @return mixed 返回缩略图路径
* **/    function resize($src,$w,$h)
{     $temp=pathinfo($src);     $name=$temp["basename"];//文件名     $dir=$temp["dirname"];//文件所在的文件夹     $extension=$temp["extension"];//文件扩展名     $savepath="{$dir}/{$name}";//缩略图保存路径,新的文件名为*.thumb.jpg     //获取图片的基本信息     $info=getImageInfo($src);     $width=$info[0];//获取图片宽度     $height=$info[1];//获取图片高度     $per1=round($width/$height,2);//计算原图长宽比     $per2=round($w/$h,2);//计算缩略图长宽比     //计算缩放比例     if($per1>$per2||$per1==$per2)     {     //原图长宽比大于或者等于缩略图长宽比,则按照宽度优先     $per=$w/$width;     }     if($per1<$per2)     {     //原图长宽比小于缩略图长宽比,则按照高度优先     $per=$h/$height;     }     $temp_w=intval($width*$per);//计算原图缩放后的宽度     $temp_h=intval($height*$per);//计算原图缩放后的高度     $temp_img=imagecreatetruecolor($temp_w,$temp_h);//创建画布     $im=create($src);     imagecopyresampled($temp_img,$im,0,0,0,0,$temp_w,$temp_h,$width,$height);     if($per1>$per2)     {     imagejpeg($temp_img,$savepath, 100);     imagedestroy($im);     return addBg($savepath,$w,$h,"w");     //宽度优先,在缩放之后高度不足的情况下补上背景
    }     if($per1==$per2)     {     imagejpeg($temp_img,$savepath, 100);     imagedestroy($im);     return $savepath;     //等比缩放
    }     if($per1<$per2)     {     imagejpeg($temp_img,$savepath, 100);     imagedestroy($im);     return addBg($savepath,$w,$h,"h");     //高度优先,在缩放之后宽度不足的情况下补上背景
    }
}
/**
* 添加背景
* @param string $src 图片路径
* @param int $w 背景图像宽度
* @param int $h 背景图像高度
* @param String $first 决定图像最终位置的,w 宽度优先 h 高度优先 wh:等比
* @return 返回加上背景的图片
* **/
function addBg($src,$w,$h,$fisrt="w")
{     $bg=imagecreatetruecolor($w,$h);     $white = imagecolorallocate($bg,255,255,255);     imagefill($bg,0,0,$white);//填充背景     //获取目标图片信息     $info=getImageInfo($src);     $width=$info[0];//目标图片宽度     $height=$info[1];//目标图片高度     $img=create($src);     if($fisrt=="wh")     {     //等比缩放     return $src;     }     else    {     if($fisrt=="w")     {     $x=0;     $y=($h-$height)/2;//垂直居中
        }     if($fisrt=="h")     {     $x=($w-$width)/2;//水平居中     $y=0;     }     imagecopymerge($bg,$img,$x,$y,0,0,$width,$height,100);     imagejpeg($bg,$src,100);     imagedestroy($bg);     imagedestroy($img);     return $src;     }     }     ?>   

使用方法:

$filename=(_UPLOADPIC($_FILES["upload"],$maxsize,$updir,$newname='date'));  $show_pic_scal=show_pic_scal(230, 230, $filename);  resize($filename,$show_pic_scal[0],$show_pic_scal[1]);  

转载于:https://www.cnblogs.com/huangcong/archive/2012/07/26/2610164.html

黄聪:php实现上传图片和等比例缩略图压缩图片相关推荐

  1. 黄聪:《跟黄聪学WordPress插件开发》

    续<跟黄聪学WordPress主题开发>之后,又一个作品完成!<跟黄聪学Wordpress插件开发>,国内最好的Wordpress插件开发视频教程!! 目录预览: WordPr ...

  2. 黄聪:Microsoft Enterprise Library 5.0 系列教程(二) Cryptography Application Block (高级)

    原文:黄聪:Microsoft Enterprise Library 5.0 系列教程(二) Cryptography Application Block (高级) 本章介绍的是企业库加密应用程序模块 ...

  3. 黄聪:C# MP3操作类,能播放指定的mp3文件,或播放嵌入的资源中的Mp3文件

    以下为我写的Mp3操作类源代码: using System; using System.Collections.Generic; using System.Linq; using System.Tex ...

  4. 黄聪:如何使用CodeSmith批量生成代码(转:http://www.cnblogs.com/huangcong/archive/2010/06/14/1758201.html)...

    先看看CodeSmith的工作原理: 简单的说:CodeSmith首先会去数据库获取数据库的结构,如各个表的名称,表的字段,表间的关系等等,之后再根据用户自定义好的模板文件,用数据库结构中的关键字替代 ...

  5. 黄聪:C#编写的Word操作类,有换页,添加表格,文本功能

    最近要帮老师做个工资管理系统,需要自动生成Word. 就上网找了个Word操作类,再做了点修改,下面公布一下自己的代码: using System; using System.Collections. ...

  6. 黄聪:如何使用CodeSmith批量生成代码(原创系列教程)

    在上一篇我们已经用PowerDesigner创建好了需要的测试数据库,下面就可以开始用它完成批量代码生成的工作啦. 下面我会一步步的解释如何用CodeSmith实现预期的结果的,事先声明一下,在此只做 ...

  7. 黄聪:一个拼图工具的制作思路

    测试简图: 功能简介: 1.双击左窗口可打开源图像; 2.框选左窗口可把图像选取复制到右窗口; 3.剪取的图块可以移动, 可配合 Ctrl 单选或多选, 可用 Delete 删除选择的图块; 4.双击 ...

  8. 黄聪:wordpress教程

    又一个作品完成!<跟黄聪学Wordpress主题开发>,国内最好的Wordpress主题模版开发视频教程!! 目录预览: WordPress官方源文件层式结构讲解 WordPress数据库 ...

  9. c# 计算空格宽度像素_黄聪:C#如何通过MeasureString、Graphics获取字符串的像素长度...

    1.    使用g.MeasureString()获得 使用MeasureString测量出来的字符宽度,总是比实际宽度大一些,而且随着字符的长度增大,貌似实际宽度和测量宽度的差距也越来越大了.查了一 ...

最新文章

  1. 渡鸦创始人离职百度后的下一个“真相”
  2. windows10删除更新的程序
  3. Spring中的JDBC操作
  4. Fabricjs在Canvas上插入照片并设置缩小和翻转属性
  5. 【POJ - 1651】Multiplication Puzzle(区间dp)
  6. 网页内容切换效果实现的15个jQuery插件
  7. Android版MrHuo工作室客户端开发心得(二)
  8. 拓扑排序Topological Sorting
  9. IKM-Java SE 8评估测试题挑战,测测你的基础水平
  10. SUM OF SUB RECTANGLE AREAS(打表+oeis+c++大数类板子)
  11. ASC II 完整码表及简介
  12. 微信小程序倒计时功能
  13. k6前级效果器怎么用_K6效果器功能说明
  14. 可以嵌入ppt的课堂点名器_学点云课堂:小班课应用场景,饱受青睐的秘诀
  15. 计算机数值怎么看大小,笔记本电脑尺寸怎么看_笔记本电脑尺寸查询
  16. pygame之Surface模块
  17. 测试眉形的有哪个软件_适合眉毛的软件
  18. c#窗体程序未响应问题
  19. QSocketNotifier: Socket notifiers cannot be enabled or disabled from another
  20. CSS定位—静态定位、相对定位、固定定位、绝对定位、粘性定位

热门文章

  1. 洛谷P2178 品酒大会
  2. SpreadJS 在 Angular2 中支持绑定哪些属性?
  3. 推荐一些软件,平时工作中可能会用到【不断更新】
  4. 在JavaScript中使用inline函数的问题
  5. 畅捷通携手易后台,专注小微企业财税服务
  6. 数据结构与算法 整理笔记---二叉搜索树
  7. Redis 通用操作1
  8. 从Linux内核中获取真随机数【转】
  9. Spring的环绕通知
  10. cocos2d-x 3.1.1 学习笔记[15] Shader 著色器