用php和imagemagick来处理图片文件的上传和缩放处理
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用php和imagemagick来处理图片文件的上传和缩放处理相关的知识,希望对你有一定的参考价值。
啥也不说,直接上代码,大家可以自行添加增加水印功能:
- <?php
- /**
- *
- * @author zhao jinhan
- * @date 2014年1月13日11:54:30
- * @email [email protected]
- *
- */
- header(‘Content-type:text/html; charset=utf-8‘);
- //定义缩略图的宽高
- define(‘THUMB_WIDTH‘,300);
- define(‘THUMB_HEIGHT‘,300);
- /**
- * 重新生成上传的文件名
- * @return string
- * @author zhao jinhan
- *
- */
- function _file_type($filetype = null){
- switch($filetype)
- {
- case "image/jpeg":
- $fileextname = "jpg";
- break;
- case "image/gif":
- $fileextname = "gif";
- break;
- case "image/png":
- $fileextname = "png";
- break;
- default:
- $fileextname = false;
- break;
- }
- return $fileextname?date(‘YmdHis‘,time()).‘.‘.$fileextname:false;
- }
- /**
- *
- * @param string $filename
- * @param string $width
- * @param string $height
- * @param string $quality
- * @param string $savepath
- * @return boolean
- */
- function _make_thumb($filename=‘‘, $width=THUMB_WIDTH, $height=THUMB_HEIGHT, $savepath=‘./upload‘){
- if(file_exists($filename)){
- //上传图片的尺寸
- $imagesize=getimagesize($filename);
- $imagewidth=$imagesize[0];
- $imageheight=$imagesize[1];
- $mime = $imagesize[‘mime‘];
- //宽高比例
- $ratio = $imagewidth/$imageheight;
- //新建一个背景图片
- $bgimg = imagecreatetruecolor($width, $height);
- $white = imagecolorallocate($bgimg, 255, 255, 255);
- //填充背景色为白色
- imagefill($bgimg,0,0,$white);
- if($mime == ‘image/gif‘){
- $im = @imagecreatefromgif($filename); /* Attempt to open */
- $outfun = ‘imagegif‘;
- }elseif($mime == ‘image/png‘){
- $im = @imagecreatefrompng($filename); /* Attempt to open */
- $outfun = ‘imagepng‘;
- }else{
- $im = @imagecreatefromjpeg($filename); /* Attempt to open */
- $outfun = ‘imagejpeg‘;
- }
- if($ratio > 1){
- //宽度较大
- if($imagewidth > $width){
- //缩放图片到背景图片上
- $new_width = $width;
- $new_height = ($width*$imageheight)/$imagewidth;
- $bg_y = ceil(abs(($height-$new_height)/2));
- imagecopyresampled($bgimg, $im, 0, $bg_y, 0, 0, $new_width, $new_height, $imagewidth, $imageheight);
- }else{
- //复制图片到背景图片上
- $copy = true;
- }
- }else{
- //高度较大
- if($imageheight > $height){
- //缩放图片
- $new_height = $height;
- $new_width = ($height*$imagewidth)/$imageheight;
- $bg_x = ceil(($width-$new_width)/2);
- imagecopyresampled($bgimg, $im, $bg_x, 0, 0, 0, $new_width, $new_height, $imagewidth, $imageheight);
- }else{
- //复制图片到背景图片上
- $copy = true;
- }
- }
- if($copy){
- //复制图片到背景图片上
- $bg_x = ceil(($width-$imagewidth)/2);
- $bg_y = ceil(($height-$imageheight)/2);
- imagecopy($bgimg, $im, $bg_x, $bg_y, 0, 0, $imagewidth, $imageheight);
- }
- $ext = _file_type($mime);
- $outfun($bgimg, $savepath.‘/‘.$ext);
- imagedestroy($bgimg);
- return $savepath.‘/‘.$ext;
- }else{
- return false;
- }
- }
- if($_POST){
- $size = $_POST[‘size‘]?strtoupper(trim($_POST[‘size‘])):‘2M‘;
- $imgsize = $_FILES[‘img‘][‘size‘]?$_FILES[‘img‘][‘size‘]/(1024*1024):0;
- $imgwidth = $imgheight = $_POST[‘width-height‘]?intval($_POST[‘width-height‘]):300;
- //自定定义文件上传大小
- ini_set(‘upload_max_filesize‘,$size);
- $mathsize = str_replace(‘M‘,‘‘,$size);
- if($imgsize>$mathsize){
- echo "图片大小不得超过{$size}!";
- return;
- }
- if($file_name = _file_type($_FILES[‘img‘][‘type‘])){
- if($_FILES[‘img‘][‘error‘] == UPLOAD_ERR_OK){
- $savepath = ‘upload/‘;
- if(!is_dir($savepath)){
- mkdir($savepath,0644);
- }
- //生成缩略图
- $thumb_file = _make_thumb($_FILES[‘img‘][‘tmp_name‘], $imgwidth, $imgheight, $savepath);
- //move_uploaded_file($_FILES[‘img‘][‘tmp_name‘],$savepath.$file_name);
- echo "生成后的图片为:<img src=‘".$thumb_file."‘ />";
- }else{
- echo $_FILES[‘img‘][‘error‘];
- return;
- }
- }else{
- echo "图片格式不正确,请上传jpg,gif,png的格式!";
- return;
- }
- }else{
- echo <<<EOT
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
- <html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
- <title>缩放图片保存成正方形</title>
- </head>
- <body>
- <form action="" method="POST" enctype="multipart/form-data">
- <div>
- <label>上传一张图片:</label>
- <input type="file" name="img" />
- </div>
- <div>
- <label>生成缩略图的宽高(单位px):</label>
- <input type="text" name="width-height" value="300" />
- </div>
- <div>
- <label>文件大小上限:</label>
- <input type="text" name="size" value="2M" />
- </div>
- <div><input type="submit" name="submit" value="提交" /></div>
- </form>
- </body>
- </html>
- EOT;
- }
摘自:http://www.icode100.com/posts/view/64
本文非原创,感谢作者提供学习
以上是关于用php和imagemagick来处理图片文件的上传和缩放处理的主要内容,如果未能解决你的问题,请参考以下文章
Linux端图形处理工具ImageMagick在Centos上的安装
php安装imagemagick扩展 常见问题与解决方案(win平台)