在图片上加文字是论坛,博客,新闻网站上最喜欢用的功能,防止盗图。这里看看代码是如何实现的。
首先还是upload_image.php这个文件,注意这里的caption文本框中输入的内容最终会写到图片上面
<!--?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'; //设置环境变量 //putenv('GDFONTPATH='.'C:\Windows\Fonts'); $font = "C:\Windows\Fonts\arial.ttf"; //upload_image.php页面传递过来的参数,如果是上传图片 if($_POST['submit'] == 'Upload') { if($_FILES['uploadfile']['error'] != UPLOAD_ERR_OK) { switch($_FILES['uploadfile']['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'); } else { 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; } if(isset($_POST['emb_caption'])) { imagettftext($image , 12 , 0 , 20 , 20 , 0 , $font , $image_caption); } imagejpeg($image , $dir.'/'.$_POST['id'].'.jpg' , 100); ?-->
Here is your pic!
<h1>Your image has been saved!</h1>
<img src="images/<?php echo $_POST['id'];?>.jpg" alt="" />
<!--?php } else { ?-->
Here is your pic!
<h1>So how does it feel to be famous?</h1>
Here is the picture you just uploaded to your servers:
<!--<img src="images/<?php echo $imagename;?>" alt="" style="float:left;" />-->
<!--?php if($_POST['submit'] == 'Upload') { $imagename = 'images/'.$image_id.'.jpg'; } else { $imagename = 'image_effect.php?id='.$image_id.'&e='.$_POST['effect']; if(isset($_POST['emb_caption'])) { $imagename .= '&capt='.urlencode($image_caption); } } ?-->
<img style="float: left;" src="<?php echo $imagename;?>" alt="" />
<table>
<tbody>
<tr>
<td>Image save as:</td>
<td></td>
</tr>
<tr>
<td>Height:</td>
<td></td>
</tr>
<tr>
<td>Widht:</td>
<td></td>
</tr>
<tr>
<td>Upload date:</td>
<td></td>
</tr>
</tbody>
</table>
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'];?><p>" method="post">
<div><input name="id" type="hidden" value=""<?php" />"/>
Filter:<select name="effect">
<option value="-1">None</option><!--?php <br ?--> echo '
<option selected="selected" value="'.IMG_FILTER_GRAYSCALE.'">Black and white</option>';
</select>echo 'Blur';
echo 'Emboss';
echo 'Negative';
?>
<!--?php <br ?--> echo '<input checked="checked" name="emb_caption" type="checkbox" />Embed caption in image?';
?>
<input name="submit" type="submit" value="Preview" /><input name="submit" type="submit" value="Save" />
</div>
</form><!--?php } ?-->
注意这里有个问题,选择字体的时要加上绝对路径并且带上后缀.tff,否则的话是看不到图片的,下面的代码是image_effect.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'; //设置环境变量 //putenv('GDFONTPATH='.'C:\Windows\Fonts'); $font = "C:\Windows\Fonts\arial.ttf"; //upload_image.php页面传递过来的参数,如果是上传图片 if($_POST['submit'] == 'Upload') { if($_FILES['uploadfile']['error'] != UPLOAD_ERR_OK) { switch($_FILES['uploadfile']['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'); } else { 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; } if(isset($_POST['emb_caption'])) { imagettftext($image , 12 , 0 , 20 , 20 , 0 , $font , $image_caption); } imagejpeg($image , $dir.'/'.$_POST['id'].'.jpg' , 100); ?-->
Here is your pic!
<h1>Your image has been saved!</h1>
<img src="images/<?php echo $_POST['id'];?>.jpg" alt="" />
<!--?php } else { ?-->
Here is your pic!
<h1>So how does it feel to be famous?</h1>
Here is the picture you just uploaded to your servers:
<!--<img src="images/<?php echo $imagename;?>" alt="" style="float:left;" />-->
<!--?php if($_POST['submit'] == 'Upload') { $imagename = 'images/'.$image_id.'.jpg'; } else { $imagename = 'image_effect.php?id='.$image_id.'&e='.$_POST['effect']; if(isset($_POST['emb_caption'])) { $imagename .= '&capt='.urlencode($image_caption); } } ?-->
<img style="float: left;" src="<?php echo $imagename;?>" alt="" />
<table>
<tbody>
<tr>
<td>Image save as:</td>
<td></td>
</tr>
<tr>
<td>Height:</td>
<td></td>
</tr>
<tr>
<td>Widht:</td>
<td></td>
</tr>
<tr>
<td>Upload date:</td>
<td></td>
</tr>
</tbody>
</table>
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'];?><p>" method="post">
<div><input name="id" type="hidden" value=""<?php" />"/>
Filter:<select name="effect">
<option value="-1">None</option><!--?php <br ?--> echo '
<option selected="selected" value="'.IMG_FILTER_GRAYSCALE.'">Black and white</option>';
</select>echo 'Blur';
echo 'Emboss';
echo 'Negative';
?>
<!--?php <br ?--> echo '<input checked="checked" name="emb_caption" type="checkbox" />Embed caption in image?';
?>
<input name="submit" type="submit" value="Preview" /><input name="submit" type="submit" value="Save" />
</div>
</form><!--?php } ?-->
这里如果我们写成下面这样
putenv('GDFONTPATH='.'C:\Windows\Fonts');
$font = "arial";
是看不到效果的,这里顺便提一下,火狐是最佳的开发工具,怎么讲呢,看看下面的对比吧。
火狐的提示是这样的:

图片没有截完整提示是:The image “http://localhost:81/test/image_effect.php?id=31&e=-1&capt=you+are+big+bitch” cannot be displayed because it contains errors.
谷歌浏览器的显示如下:

一个未能正确显示的图片,什么信息都没有。
再来看看大IE的,如下:

也能看到错误信息,但是一大堆乱码啊!
所以说开发人员好帮手还是火狐。
Mikel