这篇是关于修改图片的效果,主要还是用到php中的GD库中的函数,没想到php还有这凶残能力,出乎我的预料。
先看代码upload_image.php,主要是一个上传控件,用来选择图片
<
title
></
title
>
<
style
type
="text/css"
></
style
>
</
head
>
<
form
action
="check_image.php"
method
="post"
enctype
="multipart/form-data"
>
<
table
>
<
td
>
Your username
</
td
>
<
td
><
input
type
="text"
name
="username"
/></
td
>
<
td
>
Upload image*
</
td
>
<
td
><
input
type
="file"
name
="uploadfile"
/></
td
>
<
td
colspan
="2"
>
<
small
><
em
>
* Acceptable image formats include: GIF, JPG/JPEG and PNG.
</
em
></
small
>
<
td
>
Image Caption
</
td
>
<
td
><
input
type
="text"
name
="caption"
/></
td
>
<
td
colspan
="2"
style
="text-align:center;"
>
<
input
type
="submit"
name
="submit"
value
="Upload"
/>
</
table
>
</
form
>
</
body
>
</
html
>
然后是上传和处理图片的逻辑check_image.php
<?php
//修改图片效果
$db = mysql_connect('localhost','root','Ctrip07185419') or die('can not connect to database');
mysql_select_db('moviesite',$db) or die(mysql_error($db));
//上传文件的路径
$dir = 'D:\Serious\phpdev\test\images';
//upload_image.php页面传递过来的参数,如果是上传图片
if($_POST['submit'] == 'Upload')
if($_FILES['uploadfile']['error'] != UPLOAD_ERR_OK)
switch($_FILES['uploadfiel']['error'])
case UPLOAD_ERR_INI_SIZE:
die('The uploaded file exceeds the upload_max_filesize directive');
break;
case UPLOAD_ERR_FORM_SIZE:
die('The upload file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form');
break;
case UPLOAD_ERR_PARTIAL:
die('The uploaded file was only partially uploaded');
break;
case UPLOAD_ERR_NO_FILE:
die('No file was uploaded');
break;
case UPLOAD_ERR_NO_TMP_DIR:
die('The server is missing a temporary folder');
break;
case UPLOAD_ERR_CANT_WRITE:
die('The server fail to write the uploaded file to the disk');
break;
case UPLOAD_ERR_EXTENSION:
die('The upload stopped by extension');
break;
$image_caption = $_POST['caption'];
$image_username = $_POST['username'];
$image_date = date('Y-m-d');
list($width,$height,$type,$attr) = getimagesize($_FILES['uploadfile']['tmp_name']);
$error = 'The file you upload is not a supported filetype';
switch($type)
case IMAGETYPE_GIF:
$image = imagecreatefromgif($_FILES['uploadfile']['tmp_name']) or die($error);
break;
case IMAGETYPE_JPEG:
$image = imagecreatefromjpeg($_FILES['uploadfile']['tmp_name']) or die($error);
break;
case IMAGETYPE_PNG:
$image = imagecreatefrompng($_FILES['uploadfile']['tmp_name']) or die($error);
break;
default:
break;
$query = 'insert into images(image_caption,image_username,image_date) values("'.$image_caption.'" , "'.$image_username.'","'.$image_date.'")';
$result = mysql_query($query,$db) or die(mysql_error($db));
$last_id = mysql_insert_id();
// $imagename = $last_id.'.jpg';
// imagejpeg($image,$dir.'/'.$imagename);
// imagedestroy($image);
$image_id = $last_id;
imagejpeg($image , $dir.'/'.$image_id.'.jpg');
imagedestroy($image);
else //如果图片已经上传,则从数据库中取图片名字
$query = 'select image_id,image_caption,image_username,image_date from images where image_id='.$_POST['id'];
$result = mysql_query($query,$db) or die(mysql_error($db));
extract(mysql_fetch_assoc($result));
list($width,$height,$type,$attr) = getimagesize($dir.'/'.$image_id.'.jpg');
//如果是保存图片
if($_POST['submit'] == 'Save')
if(isset($_POST['id']) && ctype_digit($_POST['id']) && file_exists($dir.'/'.$_POST['id'].'.jpg'))
$image = imagecreatefromjpeg($dir.'/'.$_POST['id'].'.jpg');
die('invalid image specified');
$effect = (isset($_POST['effect'])) ? $_POST['effect'] : -1;
switch($effect)
case IMG_FILTER_NEGATE:
imagefilter($image , IMG_FILTER_NEGATE); //将图像中所有颜色反转
break;
case IMG_FILTER_GRAYSCALE:
imagefilter($image , IMG_FILTER_GRAYSCALE); //将图像转换为灰度的
break;
case IMG_FILTER_EMBOSS:
imagefilter($image , IMG_FILTER_EMBOSS); //使图像浮雕化
break;
case IMG_FILTER_GAUSSIAN_BLUR:
imagefilter($image , IMG_FILTER_GAUSSIAN_BLUR); //用高斯算法模糊图像
break;
imagejpeg($image , $dir.'/'.$_POST['id'].'.jpg' , 100);
<title>Here is your pic!</title>
</head>
<h1>Your image has been saved!</h1>
<img src="images/<?php echo $_POST['id'];?>.jpg" alt="" />
</body>
</html>
<?php
<title>Here is your pic!</title>
</head>
<h1>So how does it feel to be famous?</h1>
<p>Here is the picture you just uploaded to your servers:</p>
<!--<img src="images/<?php echo $imagename;?>" alt="" style="float:left;" />-->
</body>
</html>
<?php
if($_POST['submit'] == 'Upload')
$imagename = 'images/'.$image_id.'.jpg';
$imagename = 'image_effect.php?id='.$image_id.'&e='.$_POST['effect'];
<img src="<?php echo $imagename;?>" style="float:left;" alt="" />
<table>
<td>Image save as:</td>
<td><?php $image_id?></td>
<td>Height:</td>
<td><?php echo $height;?></td>
<td>Widht:</td>
<td><?php echo $width;?></td>
<td>Upload date:</td>
<td><?php echo $image_date;?></td>
</table>
<p>You may apply a special effect to your image from the list of option below.
Note:saving an image with any of the filters applied <em>can be undone</em>
<form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post">
<input type="hidden" name="id" value="<?php echo $image_id;?>"/>
<select name="effect" id="">
<option value="-1">None</option>
<?php
echo '<option value="'.IMG_FILTER_GRAYSCALE.'" ';
if(isset($_POST['effect']) && $_POST['effect'] == IMG_FILTER_GRAYSCALE)
echo 'selected="selected"';
echo ' >Black and white</option>';
echo '<option value="'.IMG_FILTER_GAUSSIAN_BLUR.'"';
if(isset($_POST['effect']) && $_POST['effect'] == IMG_FILTER_GAUSSIAN_BLUR)
echo ' selected="selected"';
echo '>Blur</option>';
echo '<option value="'.IMG_FILTER_EMBOSS.'"';
if(isset($_POST['effect']) && $_POST['effect'] == IMG_FILTER_EMBOSS)
echo 'selected="selected"';
echo '>Emboss</option>';
echo '<option value="'.IMG_FILTER_NEGATE.'"';
if(isset($_POST['effect']) && $_POST['effect'] == IMG_FILTER_NEGATE)
echo 'selected="selected"';
echo '>Negative</option>';
</select><br />
<input type="submit" value="Preview" name="submit" /><br />
<input type="submit" value="Save" name="submit" />
</form>
<?php
最后是一个预览效果的页面image_effect.php
<?php
$dir = 'D:\Serious\phpdev\test\images';
if(isset($_GET['id']) && ctype_digit($_GET['id']) && file_exists($dir.'/'.$_GET['id'].'.jpg'))
$image = imagecreatefromjpeg($dir.'/'.$_GET['id'].'.jpg');
die('invalid image specified');
$effect = (isset($_GET['e'])) ? $_GET['e'] : -1;
switch($effect)
case IMG_FILTER_NEGATE:
imagefilter($image , IMG_FILTER_NEGATE);
break;
case IMG_FILTER_GRAYSCALE:
imagefilter($image , IMG_FILTER_GRAYSCALE);
break;
case IMG_FILTER_EMBOSS:
imagefilter($image , IMG_FILTER_EMBOSS);
break;
case IMG_FILTER_GAUSSIAN_BLUR:
imagefilter($image , IMG_FILTER_GAUSSIAN_BLUR);
break;
header('Content-Type:image/jpeg');
imagejpeg($image , '' , 100);
第二个image_check.php有点乱,在这个页面中有上传图片,处理图片,还有预览图片的部分逻辑,注意下面这段
<?php
if($_POST['submit'] == 'Upload')
$imagename = 'images/'.$image_id.'.jpg';
$imagename = 'image_effect.php?id='.$image_id.'&e='.$_POST['effect'];
<img src="<?php echo $imagename;?>" style="float:left;" alt="" />
如果是上传直接访问图片,如果是预览则从image_effect.php中读取图片,这里是从内存中读取图片并根据选择的处理效果来展示图片。如下
switch($effect)
case IMG_FILTER_NEGATE:
imagefilter($image , IMG_FILTER_NEGATE);
break;
case IMG_FILTER_GRAYSCALE:
imagefilter($image , IMG_FILTER_GRAYSCALE);
break;
case IMG_FILTER_EMBOSS:
imagefilter($image , IMG_FILTER_EMBOSS);
break;
case IMG_FILTER_GAUSSIAN_BLUR:
imagefilter($image , IMG_FILTER_GAUSSIAN_BLUR);
break;
当使用imagefilter方法处理图片之后会把图片输出到页面,这里要注意imagejpeg方法的第二个参数是空字符串,这样它就不会写入到硬盘中了,如果第二个参数设置了会覆盖原有的图片,这样可以让用户在保存图片之前随意的预览效果,如下:
header('Content-Type:image/jpeg');
imagejpeg($image , '' , 100);
在check_image.php中有调用到类似的方法,但是这里指定了第二个参数,就是用来保存图片的:
imagejpeg($image , $dir.'/'.$_POST['id'].'.jpg' , 100);
注意这里哦我们只写了三种处理效果,这个只是所有枚举中的一部分,我们来看所有的处理方式:
IMG_FILTER_NEGATE:将图像中所有颜色反转。
IMG_FILTER_GRAYSCALE:将图像转换为灰度的。
IMG_FILTER_BRIGHTNESS:改变图像的亮度。用 arg1 设定亮度级别。
IMG_FILTER_CONTRAST:改变图像的对比度。用 arg1 设定对比度级别。
IMG_FILTER_COLORIZE:与 IMG_FILTER_GRAYSCALE 类似,不过可以指定颜色。用 arg1,arg2 和 arg3 分别指定 red,blue 和 green。每种颜色范围是 0 到 255。
IMG_FILTER_EDGEDETECT:用边缘检测来突出图像的边缘。
IMG_FILTER_EMBOSS:使图像浮雕化。
IMG_FILTER_GAUSSIAN_BLUR:用高斯算法模糊图像。
IMG_FILTER_SELECTIVE_BLUR:模糊图像。
IMG_FILTER_MEAN_REMOVAL:用平均移除法来达到轮廓效果。
IMG_FILTER_SMOOTH:使图像更柔滑。用 arg1 设定柔滑级别。
是不是很惊艳,php很强大的。