啥也不说,直接上代码,大家可以自行添加增加水印功能:

  1. <?php
  2. /**
  3. *
  4. * @author zhao jinhan
  5. * @date 2014年1月13日11:54:30
  6. * @email xb_zjh@126.com
  7. *
  8. */
  9. header('Content-type:text/html; charset=utf-8');
  10. //定义缩略图的宽高
  11. define('THUMB_WIDTH',300);
  12. define('THUMB_HEIGHT',300);
  13. /**
  14. * 重新生成上传的文件名
  15. * @return string
  16. * @author zhao jinhan
  17. *
  18. */
  19. function _file_type($filetype = null){
  20. switch($filetype)
  21. {
  22. case "image/jpeg":
  23. $fileextname  = "jpg";
  24. break;
  25. case "image/gif":
  26. $fileextname  = "gif";
  27. break;
  28. case "image/png":
  29. $fileextname  =  "png";
  30. break;
  31. default:
  32. $fileextname = false;
  33. break;
  34. }
  35. return $fileextname?date('YmdHis',time()).'.'.$fileextname:false;
  36. }
  37. /**
  38. *
  39. * @param string $filename
  40. * @param string $width
  41. * @param string $height
  42. * @param string $quality
  43. * @param string $savepath
  44. * @return boolean
  45. */
  46. function _make_thumb($filename='', $width=THUMB_WIDTH, $height=THUMB_HEIGHT, $savepath='./upload'){
  47. if(file_exists($filename)){
  48. //上传图片的尺寸
  49. $imagesize=getimagesize($filename);
  50. $imagewidth=$imagesize[0];
  51. $imageheight=$imagesize[1];
  52. $mime = $imagesize['mime'];
  53. //宽高比例
  54. $ratio = $imagewidth/$imageheight;
  55. //新建一个背景图片
  56. $bgimg = imagecreatetruecolor($width, $height);
  57. $white = imagecolorallocate($bgimg, 255, 255, 255);
  58. //填充背景色为白色
  59. imagefill($bgimg,0,0,$white);
  60. if($mime == 'image/gif'){
  61. $im = @imagecreatefromgif($filename); /* Attempt to open */
  62. $outfun = 'imagegif';
  63. }elseif($mime == 'image/png'){
  64. $im = @imagecreatefrompng($filename); /* Attempt to open */
  65. $outfun = 'imagepng';
  66. }else{
  67. $im = @imagecreatefromjpeg($filename); /* Attempt to open */
  68. $outfun = 'imagejpeg';
  69. }
  70. if($ratio > 1){
  71. //宽度较大
  72. if($imagewidth > $width){
  73. //缩放图片到背景图片上
  74. $new_width = $width;
  75. $new_height = ($width*$imageheight)/$imagewidth;
  76. $bg_y = ceil(abs(($height-$new_height)/2));
  77. imagecopyresampled($bgimg, $im, 0, $bg_y, 0, 0, $new_width, $new_height, $imagewidth, $imageheight);
  78. }else{
  79. //复制图片到背景图片上
  80. $copy = true;
  81. }
  82. }else{
  83. //高度较大
  84. if($imageheight > $height){
  85. //缩放图片
  86. $new_height = $height;
  87. $new_width = ($height*$imagewidth)/$imageheight;
  88. $bg_x = ceil(($width-$new_width)/2);
  89. imagecopyresampled($bgimg, $im, $bg_x, 0, 0, 0, $new_width, $new_height, $imagewidth, $imageheight);
  90. }else{
  91. //复制图片到背景图片上
  92. $copy = true;
  93. }
  94. }
  95. if($copy){
  96. //复制图片到背景图片上
  97. $bg_x = ceil(($width-$imagewidth)/2);
  98. $bg_y = ceil(($height-$imageheight)/2);
  99. imagecopy($bgimg, $im, $bg_x, $bg_y, 0, 0, $imagewidth, $imageheight);
  100. }
  101. $ext = _file_type($mime);
  102. $outfun($bgimg, $savepath.'/'.$ext);
  103. imagedestroy($bgimg);
  104. return $savepath.'/'.$ext;
  105. }else{
  106. return false;
  107. }
  108. }
  109. if($_POST){
  110. $size = $_POST['size']?strtoupper(trim($_POST['size'])):'2M';
  111. $imgsize = $_FILES['img']['size']?$_FILES['img']['size']/(1024*1024):0;
  112. $imgwidth = $imgheight = $_POST['width-height']?intval($_POST['width-height']):300;
  113. //自定定义文件上传大小
  114. ini_set('upload_max_filesize',$size);
  115. $mathsize = str_replace('M','',$size);
  116. if($imgsize>$mathsize){
  117. echo "图片大小不得超过{$size}!";
  118. return;
  119. }
  120. if($file_name = _file_type($_FILES['img']['type'])){
  121. if($_FILES['img']['error'] == UPLOAD_ERR_OK){
  122. $savepath = 'upload/';
  123. if(!is_dir($savepath)){
  124. mkdir($savepath,0644);
  125. }
  126. //生成缩略图
  127. $thumb_file = _make_thumb($_FILES['img']['tmp_name'], $imgwidth, $imgheight, $savepath);
  128. //move_uploaded_file($_FILES['img']['tmp_name'],$savepath.$file_name);
  129. echo "生成后的图片为:<img src='".$thumb_file."' />";
  130. }else{
  131. echo $_FILES['img']['error'];
  132. return;
  133. }
  134. }else{
  135. echo "图片格式不正确,请上传jpg,gif,png的格式!";
  136. return;
  137. }
  138. }else{
  139. echo <<<EOT
  140. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  141. <html>
  142. <head>
  143. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  144. <title>缩放图片保存成正方形</title>
  145. </head>
  146. <body>
  147. <form action="" method="POST" enctype="multipart/form-data">
  148. <div>
  149. <label>上传一张图片:</label>
  150. <input type="file" name="img" />
  151. </div>
  152. <div>
  153. <label>生成缩略图的宽高(单位px):</label>
  154. <input type="text" name="width-height" value="300" />
  155. </div>
  156. <div>
  157. <label>文件大小上限:</label>
  158. <input type="text" name="size" value="2M" />
  159. </div>
  160. <div><input type="submit" name="submit" value="提交" /></div>
  161. </form>
  162. </body>
  163. </html>
  164. EOT;
  165. }

摘自:http://www.icode100.com/posts/view/64

本文非原创,感谢作者提供学习

用php和imagemagick来处理图片文件的上传和缩放处理的更多相关文章

  1. web操作文件的上传到服务器 并可下载 并且读取出来

    1.文件的上传-servlet实现文件上传---核心API—DiskFileItemFactory 一.文件上传概述 l  实现web开发中的文件上传功能,需完成如下二步操作: •    在web页面 ...

  2. 带进度条的文件批量上传插件uploadify

    有时项目中需要一个文件批量上传功能时,个人认为uploadify是快速简便的解决方案. 先上效果图: 一. 下载uploadify 从官网下载uploadify的Flash版本(Flash版本免费,另 ...

  3. C# 用原生JS进行文件的上传

    1.此文章是用原生JS来进行文件的上传,有两个版本,一个不用ajax,一个用ajax. 1)非AJAX <!DOCTYPE html> <html> <head> ...

  4. ssh整合问题总结--在添加商品模块实现图片(文件)的上传

    今天在做毕设(基于SSH的网上商城项目)中碰到了一个文件上传的需求,就是在后台管理员的商品模块中,有一个添加商品,需要将磁盘上的图片上传到tomcat保存图片的指定目录中: 完成这个功能需要两个步,第 ...

  5. 文件的上传(如何兼容火狐与IE)与国际化的原理

    1.文件的上传     [1] 简介         > 将本地的文件上传到服务器中         > 用户需要通过一个表单将文件上传到服务器中       [2] 表单的设置     ...

  6. java实现ftp文件的上传与下载

    最近在做ftp文件的上传与下载,基于此,整理了一下资料.本来想采用java自带的方法,可是看了一下jdk1.6与1.7的实现方法有点区别,于是采用了Apache下的框架实现的... 1.首先引用3个包 ...

  7. 在SpringMVC框架下实现文件的 上传和 下载

    在eclipse中的javaEE环境下:导入必要的架包 web.xml的配置文件: <?xml version="1.0" encoding="UTF-8" ...

  8. .Net多文件同时上传(Jquery Uploadify)

    前提:领导给了我一个文件夹,里面有4000千多张产品图片,每张图片已产品编号+产品名称命名,要求是让我把4000多张产品图片上传到服务器端,而且要以产品编码创建n个文件夹,每张图片放到对应的文件夹下. ...

  9. mac下svn问题——“.a”(静态库)文件无法上传解决

    mac下svn问题——“.a”(静态库)文件无法上传解决    “.a”(静态库)文件无法上传(svn工具:Versions)          网上查询了一下,说是Xcode自带的svn和Versi ...

随机推荐

  1. Oracle跨库访问数据表-DBLINK

    1:创建DBLINK(USING后面的连接字符串就是要访问的那个数据库的连接字符串) CREATE DATABASE LINK linkName CONNECT TO userName IDENTIF ...

  2. 用perl发送数据到钓鱼站

    一个皮皮果的游戏很火 估计很多人想黑 偶然发现一个钓鱼站: http://ppgpergame.com/ 钓用户名与密码 抓包后发现数据会发送到: http://ppgpergame.com/db.a ...

  3. jq siblings()的强大之处

    在事件处理的方法里 经常遇到自己做什么效果 其他节点就做反之效果 如果用判断 可处理 但代码太啰嗦不够简单 siblings()就可以解决这一切的麻烦 意思就是 除啦我之外的其他兄弟节点 这样可以做2 ...

  4. javascript keycode

    keycode    8 = BackSpace BackSpacekeycode    9 = Tab Tabkeycode   12 = Clearkeycode   13 = Enterkeyc ...

  5. 抢红包算法 java

    抢红包的需求分析 抢红包的场景有点像秒杀,但是要比秒杀简单点.因为秒杀通常要和库存相关.而抢红包则可以允许有些红包没有被抢到,因为发红包的人不会有损失,没抢完的钱再退回给发红包的人即可.另外像小米这样 ...

  6. javascript中关于this的理解

    首先看一下这几个定义 this对象是在运行时基于函数的执行环境绑定的:在全局函数中,this等于window,而当函数被视为某个对象的方法调用时,this等于那个对象. 不过,匿名函数的执行环境具有全 ...

  7. 2、变量var关键字

    我们在看js声明变量的时候,经常会发现有的变量前会带var 但又的则没有,那么这究竟有什么区别呢? 如果这种情况发生在函数里的话, 加var定义的变量是局部变量,不加var定义的就成了全局变量. // ...

  8. 配置IIS提示打开目录浏览时的问题:未能从程序集“System.ServiceModel, Version=3.0.0.0”中加载类型“System.ServiceModel.Activation.HttpModule” 的解决办法

    错误消息: 未能从程序集“System.ServiceModel, Version=3.0.0.0”中加载类型“System.ServiceModel.Activation.HttpModule” 的 ...

  9. 浅谈MAIC 2016第二届移动应用(APP)创新大会

    MAIC 2016第二届移动应用(APP)创新大会将于2016年12月在上海举办!MAIC一届比一届办的有质量,规模越大.今年也如约而至,预计今年MAIC规模逾2000人.大会以专业会议,创新应用展览 ...

  10. Sass与Compress实战:第七章

    概要:将介绍Compass如何让你从本地开发原型轻松转移到生产环境的网址或Web应用中. 本章内容: ● 生成资源URL的最佳实践 ● 撰写无需Web服务器的样式表 ● 在浏览器中进行设计的技巧 ● ...