• php给图片加文字


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

    首先还是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:Seriousphpdev	estimages';
    //设置环境变量
    //putenv('GDFONTPATH='.'C:WindowsFonts');
    $font = "C:WindowsFontsarial.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);
        ?>
        <html>
            <head>
                <title>Here is your pic!</title>
            </head>
            <body>
                <h1>Your image has been saved!</h1>
                <img src="images/<?php echo $_POST['id'];?>.jpg" alt="" />
            </body>
        </html>
    <?php 
    }
    else
    {
    ?>
        <html>
            <head>
                <title>Here is your pic!</title>
            </head>
            <body>
                <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';
            }
            else
            {
                $imagename = 'image_effect.php?id='.$image_id.'&e='.$_POST['effect'];
                if(isset($_POST['emb_caption']))
                {
                    $imagename .= '&capt='.urlencode($image_caption);
                }
            }
        ?>
        <img src="<?php echo $imagename;?>" style="float:left;" alt="" />
        <table>
            <tr>
                <td>Image save as:</td>
                <td><?php $image_id?></td>
            </tr>
            <tr>
                <td>Height:</td>
                <td><?php echo $height;?></td>
            </tr>
            <tr>
                <td>Widht:</td>
                <td><?php echo $width;?></td>
            </tr>
            <tr>
                <td>Upload date:</td>
                <td><?php echo $image_date;?></td>
            </tr>
        </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>
        </p>
        <form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post">
            <div>
                <input type="hidden" name="id" value="<?php echo $image_id;?>"/>
                Filter:<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 />
                <?php 
                    echo '<input type="checkbox" name="emb_caption"';
                    if(isset($_POST['emb_caption']))
                    {
                        echo ' checked="checked"';
                    }
                    echo ' />Embed caption in image?';
                ?>
                <input type="submit" value="Preview" name="submit" /><br /><br />
                <input type="submit" value="Save" name="submit" />
                
            </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:Seriousphpdev	estimages';
    //设置环境变量
    //putenv('GDFONTPATH='.'C:WindowsFonts');
    $font = "C:WindowsFontsarial.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);
        ?>
        <html>
            <head>
                <title>Here is your pic!</title>
            </head>
            <body>
                <h1>Your image has been saved!</h1>
                <img src="images/<?php echo $_POST['id'];?>.jpg" alt="" />
            </body>
        </html>
    <?php 
    }
    else
    {
    ?>
        <html>
            <head>
                <title>Here is your pic!</title>
            </head>
            <body>
                <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';
            }
            else
            {
                $imagename = 'image_effect.php?id='.$image_id.'&e='.$_POST['effect'];
                if(isset($_POST['emb_caption']))
                {
                    $imagename .= '&capt='.urlencode($image_caption);
                }
            }
        ?>
        <img src="<?php echo $imagename;?>" style="float:left;" alt="" />
        <table>
            <tr>
                <td>Image save as:</td>
                <td><?php $image_id?></td>
            </tr>
            <tr>
                <td>Height:</td>
                <td><?php echo $height;?></td>
            </tr>
            <tr>
                <td>Widht:</td>
                <td><?php echo $width;?></td>
            </tr>
            <tr>
                <td>Upload date:</td>
                <td><?php echo $image_date;?></td>
            </tr>
        </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>
        </p>
        <form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post">
            <div>
                <input type="hidden" name="id" value="<?php echo $image_id;?>"/>
                Filter:<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 />
                <?php 
                    echo '<input type="checkbox" name="emb_caption"';
                    if(isset($_POST['emb_caption']))
                    {
                        echo ' checked="checked"';
                    }
                    echo ' />Embed caption in image?';
                ?>
                <input type="submit" value="Preview" name="submit" /><br /><br />
                <input type="submit" value="Save" name="submit" />
                
            </div>
        </form>
    <?php 
    }
    ?>

    这里如果我们写成下面这样

    putenv('GDFONTPATH='.'C:WindowsFonts');
    $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的,如下:

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

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

  • 相关阅读:
    [luogu4053 JSOI2007] 建筑抢修 (贪心 优先队列)
    [luogu2272 ZJOI2007] 最大半连通子图 (tarjan缩点 拓扑排序 dp)
    20180705 考试记录
    [luogu4310] 绝世好题 (递推)
    [luogu2765 网络流24题] 魔术球问题 (dinic最大流)
    [luogu4151 WC2011] 最大XOR和路径 (线性基)
    [luogu3232 HNOI2013] 游走 (高斯消元 期望)
    [luogu3726 HNOI2017] 抛硬币 (拓展lucas)
    20180703 考试记录
    [spoj] HIGH
  • 原文地址:https://www.cnblogs.com/tylerdonet/p/3731018.html
Copyright © 2020-2023  润新知