用php和imagemagick来处理图片文件的上传和缩放处理

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

[php] view plain copy

  1. <?php
  2. /**
  3. *
  4. * @author zhao jinhan
  5. * @date 2014年1月13日11:54:30
  6. * @email [email protected]
  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

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

时间: 2024-12-09 06:28:20

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

web操作文件的上传到服务器 并且读取出来

1.文件的上传-servlet实现文件上传---核心API-DiskFileItemFactory 一.文件上传概述 l  实现web开发中的文件上传功能,需完成如下二步操作: ?    在web页面中添加上传输入项 ?    在servlet中读取上传文件的数据,并保存到本地硬盘中. l  如何在web页面中添加上传输入项? ?    <input type="file">标签用于在web页面中添加文件上传输入项,设置文件上传输入项时须注意: ?    1.必须要设置in

jQuery+php实现ajax文件即时上传

很多项目中需要用到即时上传功能,比如,选择本地图片后,立即上传并显示图像.本文结合实例讲解如何使用jQuery和PHP实现Ajax即时上传文件的功能,用户只需选择本地图片确定后即实现上传,并显示上传进度条,上传完成后,显示图片信息. 查看演示DEMO下载源码 HTML 本示例基于jQuery以及相当出色的jquery.form插件,所以,先要载入jquery库和form插件.  <script type="text/javascript" src="jquery.min

iOS开发网络篇—文件的上传

iOS开发网络篇—文件的上传 说明:文件上传使用的时POST请求,通常把要上传的数据保存在请求体中.本文介绍如何不借助第三方框架实现iOS开发中得文件上传. 由于过程较为复杂,因此本文只贴出部分关键代码. 主控制器的关键代码: YYViewController.m 1 #import "YYViewController.h" 2 3 #define YYEncode(str) [str dataUsingEncoding:NSUTF8StringEncoding] 4 5 @inter

PHP文件的上传

<?php header('Content-type:text/html;charset=utf-8'); if(isset($_POST['submit'])){ //检测表单'submit'是否有上传,如果有上传继续下一步,如果没那就没反应 if(is_uploaded_file($_FILES['myfile']['tmp_name'])){ //检测指定文件是否通过HTTP POST上传的,如果是继续下一步,如果不是提示'可能有攻击!' $arr=pathinfo($_FILES['my

文件的上传

上传: 1). 表单需要注意的 3 点 2). Struts2 的文件上传实际上使用的是 Commons FileUpload 组件, 所以需要导入 commons-fileupload-1.3.jarcommons-io-2.0.1.jar 3). Struts2 进行文件上传需要使用 FileUpload 拦截器 4). 基本的文件的上传: 直接在 Action 中定义如下 3 个属性, 并提供对应的 getter 和 setter //文件对应的 File 对象private File [

【转】文件各种上传,离不开的表单

阅读目录 利用表单实现文件上传 表单异步上传(jquery.form插件) 模拟表单数据上传(FormData) 分片上传 使用HTML5 拖拽.粘贴上传 上传插件(WebUploader) 总结 作为程序员的我们,经常会要用到文件的上传和下载功能.到了需要用的时候,各种查资料.有木有..有木有....为了方便下次使用,这里来做个总结和备忘. 利用表单实现文件上传 最原始.最简单.最粗暴的文件上传. 前端代码: //方式1 <form action="/Home/SaveFile1&quo

用struts2实现文件的上传下载

在做B/S系统时经常会有文件上传下载的需求,现就基于struts2框架实现其功能 Struts2框架默认采用Commons-fileupload组件完成文件上传功能.? 使用Struts2框架实现文件上传功能,只需在Action中定义一个java.io.File类型的成员并为之设立setter方法,方法名要和参数名对应.? 客户端上传的文件, Struts2框架会自动将其保存在临时文件中,封装成java.io.File类对象.如果还想得到上传的文件名和文件类型,需按照如下命名规则在Action中

struts2 文件的上传下载 表单的重复提交 自定义拦截器

文件上传中表单的准备 要想使用 HTML 表单上传一个或多个文件 须把 HTML 表单的 enctype 属性设置为 multipart/form-data 须把 HTML 表单的method 属性设置为 post 需添加 <input type=“file”> 字段. Struts 对文件上传的支持 在 Struts 应用程序里, FileUpload 拦截器和 Jakarta Commons FileUpload 组件可以完成文件的上传. 步骤:1. 在 Jsp 页面的文件上传表单里使用

使用Loadrunner进行文件的上传和下载

最近使用loadrunner中需要录制文件的上传和下载,上传功能模块利用录制可以直接实现,下载无法实现,在网上找到了一段代码,自己动手试验了下,发现没有用 辛苦找到的,还是记录下吧 (1)LoadRunner上传文件 web_submit_data("importStudent.do", "Action=https://testserver/console/importStudent.do", "Method=POST", "EncTy