tylerdonet

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

首先还是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);
    ?>
    <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:\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);
    ?>
    <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:\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的,如下:

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

 

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

分类:

技术点:

相关文章: