[转载]php给图片加文字 - nd - 博客园

转载php给图片加文字 – nd – 博客园.

在图片上加文字是论坛,博客,新闻网站上最喜欢用的功能,防止盗图。这里看看代码是如何实现的。

首先还是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/&lt;?php echo $_POST['id'];?&gt;.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="&lt;?php echo $imagename;?&gt;" 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="&lt;?php echo $_SERVER['PHP_SELF'];?&gt;&lt;p&gt;" method="post">
<div><input name="id" type="hidden" value="&quot;&lt;?php" />"/&gt;
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';
?&gt;

<!--?php <br ?--> echo '<input checked="checked" name="emb_caption" type="checkbox" />Embed caption in image?';
?&gt;
<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/&lt;?php echo $_POST['id'];?&gt;.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="&lt;?php echo $imagename;?&gt;" 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="&lt;?php echo $_SERVER['PHP_SELF'];?&gt;&lt;p&gt;" method="post">
<div><input name="id" type="hidden" value="&quot;&lt;?php" />"/&gt;
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';
?&gt;

<!--?php <br ?--> echo '<input checked="checked" name="emb_caption" type="checkbox" />Embed caption in image?';
?&gt;
<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的,如下:

也能看到错误信息,但是一大堆乱码啊!

 

所以说开发人员好帮手还是火狐。

赞(0) 打赏
分享到: 更多 (0)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏