php随笔1-php图片处理

php图片处理的知识内容

upload_image.php:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
 <title>图片上传页</title>
 <style type="text/css">
.file-box{ position:relative;width:340px}
.txt{ height:22px; border:1px solid #cdcdcd; width:200px;border-right:none;}
.btn{ background-color:#FFF; border:1px solid #CDCDCD;height:26px; width:70px;}
.file{ position:absolute; top:0; right:80px; height:24px; filter:alpha(opacity:0);opacity: 0;width:260px }
 </style>
 <script  type="text/javascript" >
 //JS获取路径 ---成功
    function change(){
          var pic=document.getElementById(‘pic‘);
          var file=document.getElementById(‘fileField‘);
          pic.src=file.value;
          if(file.files){
            if(file.files.item(0)){
            //src = window.URL.createObjectURL(fileObj.files[0]);
            url=window.URL.createObjectURL(file.files.item(0));
             document.getElementById(‘textfield‘).value = pic.src ;
             pic.src=url;
            }
           }
   }
 </script>
</head>

<body>
<form action="check_image.php" method="post" enctype="multipart/form-data">
            <table border="1">
                <tr>
                    <td>上传人名称:</td>
                    <td><input type="text" class=‘txt‘ name="username" /></td>
                </tr>
                <tr>
                    <td>*上传图片:</td>
                    <td><div class="file-box"><input type=‘text‘ name=‘textfield‘ id=‘textfield‘ class=‘txt‘ /><input type=‘button‘ class=‘btn‘ value=‘浏览...‘ /><br />
                        <input type="file" name="uploadfile" class="file" id="fileField" size="28" onchange="change();" />
                        <input type="hidden" id="theFilePath" name="theFilePath" value="">
                    </div>
                    </td>
                </tr>
                <tr>
                    <td colspan="2">
                        <small><em> * 可接受的图像格式:GIF,JPG、JPEG和PNG。上传后图片会变为1280X960大小。</em></small>
                    </td>
                </tr>
                <tr>
                    <td>图片标题:</td>
                    <td><input type="text" class=‘txt‘ name="caption"/></td>
                </tr>
                <tr>
                    <td colspan="2" style="text-align:center;">
                        <input type="submit" name="submit" value="Upload"  class=‘btn‘ />
                    </td>
                </tr>
            </table>
            <img src=""  name="pic" id="pic" /> <br />
        </form>
</body>
</html>

check_image.php   集合图片上传,MySQL数据库保存,图片放大至1280X960,图片加文字,图片PS处理,图片缩略图,图片打LOGO水印。功能集合强大。

<?php
    //session
    session_start();
    if($_POST[‘submit‘] == ‘Upload‘)
    {
            if($_FILES[‘uploadfile‘][‘error‘] != UPLOAD_ERR_OK)
            {
                switch($_FILES[‘uploadfile‘][‘error‘])
                {
                    case UPLOAD_ERR_INI_SIZE: //其值为 1,上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值
                        die(‘上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值‘);
                    break;
                    case UPLOAD_ERR_FORM_SIZE: //其值为 2,上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值
                        die(‘上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值‘);
                    break;
                    case UPLOAD_ERR_PARTIAL: //其值为 3,文件只有部分被上传
                        die(‘文件只有部分被上传‘);
                    break;
                    case UPLOAD_ERR_NO_FILE: //其值为 4,没有文件被上传
                        die(‘没有文件被上传‘);
                    break;
                    case UPLOAD_ERR_NO_TMP_DIR: //其值为 6,找不到临时文件夹
                        die(‘找不到临时文件夹‘);
                    break;
                    case UPLOAD_ERR_CANT_WRITE: //其值为 7,文件写入失败
                        die(‘文件写入失败‘);
                    break;
                    case UPLOAD_ERR_EXTENSION: //其他异常
                        die(‘其他异常‘);
                    break;
                }
            }
        //判断图片的后缀
        switch($type)
        {
            case IMAGETYPE_GIF:
                $ext = ‘.gif‘;
            break;
            case IMAGETYPE_JPEG:
                $ext = ‘.jpg‘;
            break;
            case IMAGETYPE_PNG:
                $ext = ‘.png‘;
            break;
            default    :
                die(‘您上传的文件不支持的文件类型。‘);
        }
        //关键位置-取出文件后缀
        $_SESSION[‘ext‘] = $ext;
    }

    /*
    //改变图像的大小为1280x960的方法
    function resizepic($imgsrc,$imagename,$toimgwidth,$toimgheigth)
    {
        //$imgsrc:图片路径 $imgname: 图片保存的名称 $toimgwidth: 图片最终的宽度 $toimgheigth: 图片最终的高度
        $arr = getimagesize($imgsrc);
        $imgWidth =  $toimgwidth;
        $imgHeigth =  $toimgheigth;
        if($_SESSION[‘ext‘] == ‘.jpg‘)
        {
             header(‘Content-Type:image/jpeg‘);
             $imgSrc = imagecreatefromjpeg($imgsrc);
        }
        if($_SESSION[‘ext‘] == ‘.png‘)
        {
            header(‘Content-Type:image/png‘);
            $imgSrc = imagecreatefrompng($imgsrc);
        }
        if($_SESSION[‘ext‘] == ‘.gif‘)
        {
            header(‘Content-Type:image/gif‘);
            $imgSrc = imagecreatefromgif($imgsrc);
        }

        $image = imagecreatetruecolor($imgWidth, $imgHeigth);
        imagecopyresampled($image,$imgSrc,0,0,0,0,$imgWidth,$imgHeigth,$arr[0],$arr[1]);
        if($_SESSION[‘ext‘] == ‘.jpg‘)
        {
            imagejpeg($image,$dir.‘/‘.$imagename);
        }
        if($_SESSION[‘ext‘] == ‘.png‘)
        {
            imagepng($image,$dir.‘/‘.$imagename);
        }
        if($_SESSION[‘ext‘] == ‘.gif‘)
        {
            imagegif($image,$dir.‘/‘.$imagename);
        }
        //销毁由url生成的图片
        imagedestroy($image);
    }
    */

    //创建moviesite数据库--MySQL
    $coon = mysql_connect("localhost","root","lifu") or die(‘不能连接到数据库‘);
    if (!$coon)
      {
          die(‘无法连接: ‘ . mysql_error());
      }

    if (mysql_query("CREATE DATABASE if not exists moviesite",$coon))    //如果没有就创建数据库
      {
          echo "数据库创建成功<br>";
      }
    else
      {
          echo "数据库创建错误: " . mysql_error();
      }
    // 创建images表
    mysql_select_db("moviesite", $coon);
    //如果没有就创建表
    $sql = "CREATE TABLE if not exists images
    (
        image_id int NOT NULL AUTO_INCREMENT,
        PRIMARY KEY(image_id),
        image_caption varchar(15),
        image_username varchar(15),
        image_filename varchar(15),
        image_date  datetime
    )";

    mysql_query($sql,$coon);
    mysql_close($coon);

    //修改图片效果
    $db = mysql_connect(‘localhost‘,‘root‘,‘lifu‘) or die(‘不能连接到数据库‘);
    mysql_select_db(‘moviesite‘,$db) or die(mysql_error($db));

    //上传文件的路径
    $dir = ‘D:\phpStudy\WWW\loadimages\images‘;

    //缩略图的路径
    $thumbdir = ‘D:\phpStudy\WWW\loadimages\images\thumbs‘;

    //设置环境变量
    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: //其值为 1,上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值
                        die(‘上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值‘);
                    break;
                    case UPLOAD_ERR_FORM_SIZE: //其值为 2,上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值
                        die(‘上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值‘);
                    break;
                    case UPLOAD_ERR_PARTIAL: //其值为 3,文件只有部分被上传
                        die(‘文件只有部分被上传‘);
                    break;
                    case UPLOAD_ERR_NO_FILE: //其值为 4,没有文件被上传
                        die(‘没有文件被上传‘);
                    break;
                    case UPLOAD_ERR_NO_TMP_DIR: //其值为 6,找不到临时文件夹
                        die(‘找不到临时文件夹‘);
                    break;
                    case UPLOAD_ERR_CANT_WRITE: //其值为 7,文件写入失败
                        die(‘文件写入失败‘);
                    break;
                    case UPLOAD_ERR_EXTENSION: //其他异常
                        die(‘其他异常‘);
                    break;
                }
            }
            */

        $image_caption = $_POST[‘caption‘];
        $image_username = $_POST[‘username‘];
        $image_date = date(‘Y-m-D‘);
        /*getimagesize方法返回一个数组,
        $width : 索引 0 包含图像宽度的像素值,
        $height : 索引 1 包含图像高度的像素值,
        $type : 索引 2 是图像类型的标记:
        = GIF,2 = JPG, 3 = PNG, 4 = SWF, 5 = PSD, 6 = BMP,
        = TIFF(intel byte order),8 = TIFF(motorola byte order),
        = JPC,10 = JP2,11 = JPX,12 = JB2,13 = SWC,14 = IFF,15 = WBMP,16 = XBM,
        $attr : 索引 3 是文本字符串,内容为“height="yyy" width="xxx"”,可直接用于 IMG 标记
        */

        list($width,$height,$type,$attr) = getimagesize($_FILES[‘uploadfile‘][‘tmp_name‘]);

        //imagecreatefromgXXX方法从一个url路径中创建一个新的图片
        switch($type)
        {
            case IMAGETYPE_GIF:
                $image = imagecreatefromgif($_FILES[‘uploadfile‘][‘tmp_name‘]) or die(‘你上传的文件是不支持的文件类型‘);
                $ext = ‘.gif‘;
                $array = getimagesize($_FILES[‘uploadfile‘][‘tmp_name‘]);
            break;
            case IMAGETYPE_JPEG:
                $image = imagecreatefromjpeg($_FILES[‘uploadfile‘][‘tmp_name‘]) or die(‘你上传的文件是不支持的文件类型‘);
                $ext = ‘.jpg‘;
                $array = getimagesize($_FILES[‘uploadfile‘][‘tmp_name‘]);
            break;
            case IMAGETYPE_PNG:
                $image = imagecreatefrompng($_FILES[‘uploadfile‘][‘tmp_name‘]) or die(‘你上传的文件是不支持的文件类型‘);
                $ext = ‘.png‘;
                $array = getimagesize($_FILES[‘uploadfile‘][‘tmp_name‘]);
            break;
            default    :
                die(‘您上传的文件不支持的文件类型。‘);
        }

        //将图片改为1280X960
        //新建一个指定大小的真彩色图像big
        $big = imagecreatetruecolor(1280, 960);
        //重采样拷贝部分图像并调整大小为1280X960
        imagecopyresampled($big, $image, 0, 0, 0, 0, 1280, 960, $array[0], $array[1]);

        $query = ‘insert into images(image_caption,image_username,image_date) values ("‘.$image_caption.‘","‘.$image_username.‘",now())‘;
        mysql_query($query , $db) or die(mysql_error($db));
        $last_id = mysql_insert_id();
        //用写入的id作为图片的名字,避免同名的文件存放在同一目录中
        $imagename = $last_id.$ext;
        $image_id = $last_id;

        $query = ‘update images set image_filename="‘.$imagename.‘" where image_id=‘.$last_id;
        mysql_query($query , $db) or die(mysql_error($db));

        //有url指定的图片创建图片并保存到指定目录
        switch($type)
        {
            case IMAGETYPE_GIF:
                imagegif($big,$dir.‘/‘.$imagename);
            break;
            case IMAGETYPE_JPEG:
                imagejpeg($big,$dir.‘/‘.$imagename);
            break;
            case IMAGETYPE_PNG:
                imagepng($big,$dir.‘/‘.$imagename);
            break;
        }
        //销毁由url生成的图片
        imagedestroy($big);
        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.$_SESSION[‘ext‘]);
    }

    //如果是保存图片
    if($_POST[‘submit‘] == ‘Save‘)
    {
        if(isset($_POST[‘id‘]) && ctype_digit($_POST[‘id‘]) && file_exists($dir.‘/‘.$_POST[‘id‘].$_SESSION[‘ext‘]))
        {
            if($_SESSION[‘ext‘] == ‘.jpg‘)
            {
                $image = imagecreatefromjpeg($dir.‘/‘.$_POST[‘id‘].$_SESSION[‘ext‘]);
            }
            if($_SESSION[‘ext‘] == ‘.png‘)
            {
                $image = imagecreatefrompng($dir.‘/‘.$_POST[‘id‘].$_SESSION[‘ext‘]);
            }
            if($_SESSION[‘ext‘] == ‘.gif‘)
            {
                $image = imagecreatefromgif($dir.‘/‘.$_POST[‘id‘].$_SESSION[‘ext‘]);
            }
        }
        else
        {
            die(‘指定的无效图像‘);
        }

        $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‘]))
        {    /*
            array imagettftext ( resource $image , float $size , float $angle , int $x , int $y , int $color , string $fontfile , string $text )
            $image  图像源   $size    字体大小   $angle   逆时针旋转角度   $fontfile  字体类型   $text  文本内容
            */
            imagettftext($image , 12 , 0 , 20 , 20 , 0 , $font , $image_caption);
        }

        //图片指定位置打LOGO
        if(isset($_POST[‘emb_logo‘]))
        {
            //获取水印图片的尺寸并创建水印
            list($wmk_width , $wmk_height) = getimagesize(‘images/logo.png‘);
            //$x = ($width-$wmk_width) / 2;
            //$y = ($height-$wmk_height)/2;
            $x = $width-$wmk_width;
            $y = $height-$wmk_height;
            $wmk = imagecreatefrompng(‘images/logo.png‘);
            //把水印图片和原图片合并在一起
            /*
            将 wmk 图像中坐标从 0,0 开始,宽度为 $wmk_width,高度为 $wmk_height 的一部分拷贝到 image 图像中坐标为 $x 和 $y 的位置上。
            两图像将根据 pct=20 来决定合并程度,其值范围从 0 到 100。当 pct = 0 时,实际上什么也没做,当为
            100 时对于调色板图像本函数和 imagecopy() 完全一样,它对真彩色图像实现了 alpha 透明。
            */
            imagecopymerge($image , $wmk , $x , $y , 0 , 0 , $wmk_width , $wmk_height , 20);
            //清除水印图片
            imagedestroy($wmk);
        }

        //缩略图大小
        $thumb_width = $width * 0.10;
        $thumb_height = $height * 0.10;

        //创建一个缩略图
        $thumb = imagecreatetruecolor($thumb_width, $thumb_height);
        imagecopyresampled($thumb, $image, 0, 0, 0, 0, $thumb_width, $thumb_height, $width, $height);

        //保存缩略图
        if($_SESSION[‘ext‘] == ‘.jpg‘)
        {
            imagejpeg($thumb, $thumbdir . ‘/‘ . $_POST[‘id‘] . $_SESSION[‘ext‘], 100);
        }
        if($_SESSION[‘ext‘] == ‘.png‘)
        {
            //压缩等级必须是0-9的png文件
            imagepng($thumb, $thumbdir . ‘/‘ . $_POST[‘id‘] . $_SESSION[‘ext‘]);
        }
        if($_SESSION[‘ext‘] == ‘.gif‘)
        {
            imagegif($thumb, $thumbdir . ‘/‘ . $_POST[‘id‘] . $_SESSION[‘ext‘]);
        }
        echo "修改好的缩略图:<img src=‘"."images/thumbs/" . $_POST[‘id‘] . $_SESSION[‘ext‘]."‘ alt=‘‘ /> <br />";
        //清除缩略图
        imagedestroy($thumb);

        //保存原图
        if($_SESSION[‘ext‘] == ‘.jpg‘)
        {
            imagejpeg($image , $dir.‘/‘.$_POST[‘id‘].$_SESSION[‘ext‘] , 100);
        }
        if($_SESSION[‘ext‘] == ‘.png‘)
        {
            //压缩等级必须是0-9的png文件
            imagepng($image , $dir.‘/‘.$_POST[‘id‘].$_SESSION[‘ext‘]);
        }
        if($_SESSION[‘ext‘] == ‘.gif‘)
        {
            imagegif($image , $dir.‘/‘.$_POST[‘id‘].$_SESSION[‘ext‘]);
        }
        echo "修改好的大图:<img src=‘"."images/" . $_POST[‘id‘] . $_SESSION[‘ext‘]."‘ alt=‘‘ /> <br />";
    ?>
        <html>
            <head>
                <title>你的图片在这!</title>
            </head>
            <body>
                <h1>你的图片被保存!</h1>
                <img src="images/<?php echo $_POST[‘id‘];?>.jpg"  />
            </body>
        </html>
    <?php
    }
    else
    {
    ?>
    <html>
        <head>
            <title>你的图片在这!</title>
        </head>
        <body>
            <p>这里是你上传到服务器上的图片:</p>
        </body>
    </html>
    <?php
        if($_POST[‘submit‘] == ‘Upload‘)
        {
            $imagename = ‘images/‘.$image_id.$_SESSION[‘ext‘];
        }
        else
        {
            $imagename = ‘image_effect.php?id=‘.$image_id.‘&e=‘.$_POST[‘effect‘];
            if(isset($_POST[‘emb_caption‘]))
            {
                $imagename .= ‘&capt=‘.urlencode($image_caption);
            }
            if(isset($_POST[‘emb_logo‘]))
            {
                $imagename .= ‘&logo=1‘;
            }
        }
    ?>
    <div>
    <?php  echo  "src:".$imagename ;  ?>
    <img src="<?php echo $imagename;?>" style="float:left;"  />
    <table>
        <tr>
            <td>Image save as:</td>
            <td><?php echo  "moviesite数据库images表第".$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>你可以从下面的选项列表中对你的图像应用一个特殊的效果。注:使用任何一个过滤器,保存一个图像 <em>可以撤消</em></p>
    <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">保持原状</option>
                <?php
                    echo ‘<option value="‘.IMG_FILTER_GRAYSCALE.‘" ‘;
                    if(isset($_POST[‘effect‘]) && $_POST[‘effect‘] == IMG_FILTER_GRAYSCALE)
                    {
                        echo ‘selected="selected"‘;
                    }
                    echo ‘ >灰度图像</option>‘;

                    echo ‘<option value="‘.IMG_FILTER_GAUSSIAN_BLUR.‘"‘;
                    if(isset($_POST[‘effect‘]) && $_POST[‘effect‘] == IMG_FILTER_GAUSSIAN_BLUR)
                    {
                        echo ‘ selected="selected"‘;
                    }
                    echo ‘>高斯算法模糊图像</option>‘;

                    echo ‘<option value="‘.IMG_FILTER_EMBOSS.‘"‘;
                    if(isset($_POST[‘effect‘]) && $_POST[‘effect‘] == IMG_FILTER_EMBOSS)
                    {
                        echo ‘selected="selected"‘;
                    }
                    echo ‘>图像浮雕化</option>‘;

                    echo ‘<option value="‘.IMG_FILTER_NEGATE.‘"‘;
                    if(isset($_POST[‘effect‘]) && $_POST[‘effect‘] == IMG_FILTER_NEGATE)
                    {
                        echo ‘selected="selected"‘;
                    }
                    echo ‘>图像中所有颜色反转</option>‘;
                ?>
            </select><br />
            <?php
                echo ‘<input type="checkbox" name="emb_caption"‘;
                if(isset($_POST[‘emb_caption‘]))
                {
                    echo ‘ checked="checked"‘;
                }
                echo ‘ />是否嵌入在图像的标题?‘;
                echo ‘<br />‘;

                //添加水印选项
                echo ‘<input type="checkbox" name="emb_logo" ‘;
                if(isset($_POST[‘emb_logo‘]))
                {
                    echo ‘checked="checked"‘;
                }
                echo ‘ />是否嵌入668LOGO?‘. ‘<br />‘;
            ?>
            <input type="submit" value="Save" name="submit" />
            <!--<input type="submit" value="Preview" name="submit" />-->
         </form>
        </div>

    <?php
    }
    mysql_close($db);
    ?>

本来有一个Preview的,后来没弄了,但是代码还是给上  image_effect.php ,已经把Preview注释掉了。

<?php
//上传文件的路径
$dir = ‘D:\phpStudy\WWW\loadimages\images‘;
//设置环境变量
putenv(‘GDFONTPATH=‘.‘C:\Windows\Fonts‘);
$font = "C:\Windows\Fonts\arial.ttf";

if(isset($_GET[‘id‘]) && ctype_digit($_GET[‘id‘]) && file_exists($dir.‘/‘.$_GET[‘id‘].$_SESSION[‘ext‘]))
{
    $image = imagecreatefromjpeg($dir.‘/‘.$_GET[‘id‘].$_SESSION[‘ext‘]);
}
else
{
    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;
}

if(isset($_GET[‘capt‘]))
{
    //echo $_GET[‘capt‘];
    imagettftext($image, 12, 0, 20, 20, 0, $font, $_GET[‘capt‘]);
}

if(isset($_GET[‘logo‘]))
{
    list($widht , $height) = getimagesize($dir.‘/‘.$_GET[‘id‘].$_SESSION[‘ext‘]);
    list($wmk_width , $wmk_height) = getimagesize(‘images/logo.png‘);
    $x = $width-$wmk_width;
    $y = $height-$wmk_height;
    $wmk = imagecreatefrompng(‘images/logo.png‘);
    imagecopymerge($image , $wmk , $x , $y , 0 , 0 , $wmk_width , $wmk_height , 20);
    imagedestroy($wmk);
}

if($_SESSION[‘ext‘] == ‘.jpg‘)
{
     header(‘Content-Type:image/jpeg‘);
     imagejpeg($image , ‘‘ , 100);
}
if($_SESSION[‘ext‘] == ‘.png‘)
{
    header(‘Content-Type:image/png‘);
    imagepng($image , ‘‘ );
}
if($_SESSION[‘ext‘] == ‘.gif‘)
{
    header(‘Content-Type:image/gif‘);
    imagegif($image , ‘‘ );
}    

?>

内容总结:

本人是自学的php,代码书写多有不规范之处,并且有些位置的代码有重复累赘。以后需要加强。

upload_image.php: 主要是 HTML+Javascritp+Css 没什么可说的,主要就 javascript 调用 window.URL.createObjectURL(fileObj) 方法。获取图片的相对路径,并做图片的展示。

check_image.php: 1、session 用于保存从 upload_image.php 传递过来的图片的后缀名。

          2、数据库moviesite创建,images表的创建

    $sql = "CREATE TABLE if not exists images
    (
        image_id int NOT NULL AUTO_INCREMENT,
        PRIMARY KEY(image_id),
        image_caption varchar(15),
        image_username varchar(15),
        image_filename varchar(15),
        image_date  datetime
    )";

         3、使用 imagecreatetruecolor 和 imagecopyresampled 将图片大小调整为1280X960.然后将图片上传保存到指定位置。

     //将图片改为1280X960
        //新建一个指定大小的真彩色图像big
        $big = imagecreatetruecolor(1280, 960);
        //重采样拷贝部分图像并调整大小为1280X960
        imagecopyresampled($big, $image, 0, 0, 0, 0, 1280, 960, $array[0], $array[1]);

         4、如果图片已经上传,则从数据库中取图片名字

        $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.$_SESSION[‘ext‘]);

         5、bool imagefilter ( resource $src_im , int $filtertype [, int $arg1 [, int $arg2 [, int $arg3 ]]] )  对图像使用过滤器   PS图片

 imagefilter() 把过滤器 filtertype 应用到图像上,在需要时使用 arg1,arg2 和 arg3。

filtertype 可以是下列中的一个:

    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 设定柔滑级别。

          6、图片加文字

        //图片指定位置打印文字
        if(isset($_POST[‘emb_caption‘]))
        {    /*
            array imagettftext ( resource $image , float $size , float $angle , int $x , int $y , int $color , string $fontfile , string $text )
            $image  图像源   $size    字体大小   $angle   逆时针旋转角度   $fontfile  字体类型   $text  文本内容
            */
            imagettftext($image , 12 , 0 , 20 , 20 , 0 , $font , $image_caption);
        }

         7、图片打LOGO

        //图片指定位置打LOGO
        if(isset($_POST[‘emb_logo‘]))
        {
            //获取水印图片的尺寸并创建水印
            list($wmk_width , $wmk_height) = getimagesize(‘images/logo.png‘);
            //$x = ($width-$wmk_width) / 2;
            //$y = ($height-$wmk_height)/2;
            $x = $width-$wmk_width;
            $y = $height-$wmk_height;
            $wmk = imagecreatefrompng(‘images/logo.png‘);
            //把水印图片和原图片合并在一起
            /*
            将 wmk 图像中坐标从 0,0 开始,宽度为 $wmk_width,高度为 $wmk_height 的一部分拷贝到 image 图像中坐标为 $x 和 $y 的位置上。
            两图像将根据 pct=20 来决定合并程度,其值范围从 0 到 100。当 pct = 0 时,实际上什么也没做,当为
            100 时对于调色板图像本函数和 imagecopy() 完全一样,它对真彩色图像实现了 alpha 透明。
            */
            imagecopymerge($image , $wmk , $x , $y , 0 , 0 , $wmk_width , $wmk_height , 20);
            //清除水印图片
            imagedestroy($wmk);
        }

          8、缩略图 128X96 大小

        //缩略图大小
        $thumb_width = $width * 0.10;
        $thumb_height = $height * 0.10;

        //创建一个缩略图
        $thumb = imagecreatetruecolor($thumb_width, $thumb_height);
        imagecopyresampled($thumb, $image, 0, 0, 0, 0, $thumb_width, $thumb_height, $width, $height);
时间: 2024-10-26 15:23:37

php随笔1-php图片处理的相关文章

分布式存储初认识

背景:随着计算机网络技术的发展和普及,出现了越来越多像”淘宝“,”京东“等大型电子商务网站.这类网站都保存有大量图片资源.用户在访问这些站 点网页时,网页中图片信息占到页面数据流量的大部分.由于受客户端浏览器限制,无法从一台服务器上同时下载页面中的所有图片信息,因此即使服务器又很高带 宽,用户的放弃问速度还是会受到很大影响,由于图片保存在物理硬盘上,访问图片需要频繁进行I/O操作,因此当并发用户数越来越多的时候,I/O操作就会 成为整个系统的性能瓶颈. 对于大型的网站系统来说,由于拥有雄厚的资金

分布式存储初认识——竹子整理

背景:随着计算机网络技术的发展和普及,出现了越来越多像”淘宝“,”京东“等大型电子商务网站.这类网站都保存有大量图片资源.用户在访问这些站点网页时,网页中图片信息占到页面数据流量的大部分.由于受客户端浏览器限制,无法从一台服务器上同时下载页面中的所有图片信息,因此即使服务器又很高带宽,用户的放弃问速度还是会受到很大影响,由于图片保存在物理硬盘上,访问图片需要频繁进行I/O操作,因此当并发用户数越来越多的时候,I/O操作就会成为整个系统的性能瓶颈. 对于大型的网站系统来说,由于拥有雄厚的资金,可以

《数据结构与面向对象程序设计》第01周学习总结

目录 学号20182323 2019-2020-1 <数据结构与面向对象程序设计>第01周学习总结 教材学习内容总结 教材学习中的问题和解决过程 代码调试中的问题和解决过程 代码托管 上周考试错题总结 结对及互评 点评模板: 点评过的同学博客和代码 其他(感悟.思考等,可选) 学习进度条 参考资料 目录 学号20182323 2019-2020-1 <数据结构与面向对象程序设计>第01周学习总结 教材学习内容总结 学习了java的历史与发展. 学习了一些软件工具,开发环境等. 掌握

20182323 2019-2020-1 《数据结构与面向对象程序设计》第2、3周学习总结

目录 学号20182323 2019-2020-1 <数据结构与面向对象程序设计>第2.3周学习总结 教材学习内容总结 教材学习中的问题和解决过程 代码调试中的问题和解决过程 代码托管 上周考试错题总结 结对及互评 点评模板: 点评过的同学博客和代码 其他(感悟.思考等,可选) 学习进度条 参考资料 目录 学号20182323 2019-2020-1 <数据结构与面向对象程序设计>第2.3周学习总结 教材学习内容总结 第二章 print和println两种方法的区别 关键概念:pr

jquery实现图片无缝轮播显示(个人随笔)

纯属个人随笔,不当之处,欢迎指正. 代码如下: <!doctype html> <html> <head> <meta charset="utf-8"> <title>图片无缝轮播显示</title> <script type="text/javascript" src="JavaScript/jquery-1.11.2.min.js"></script&g

有关网页常见图片淡入淡出的效果的随笔

网页常见的图片淡入淡出的效果还是比较常见的,在这里,我个人来分享一些自己的一些笔记. <!DOCTYPE html><html><head>    <meta charset="utf-8">    <title>淡入淡出图片效果图</title>    <style type="text/css">        #img1{ filter:alpha(opacity:30); o

Winform 图片鼠标滚动查看(放大,缩小,旋转,拖动查看)[日常随笔]

方法千千万,我只是其中一笔[通过控制PictureBox来控制图片,图片完全施展在控件中]...几久不做,还真有点陌生! 窗体构造中添加鼠标滚动: 1 /// <summary> 2 /// 窗体构造方法 3 /// </summary> 4 public CandidateForm() 5 { 6 InitializeComponent(); 7 this.MouseWheel += new MouseEventHandler(CandidateForm_MouseWheel);

图片热点和网页内嵌随笔

                  图片热点 <img src="test.jpg" usemap="#testmap" alt="test" /> <map name="testmap" id="testmap"> <area shape="circle" coords="180,139,14" href ="test1.ht

NIOS2随笔——JPEG图片的UART传输显示

1. 系统概述 本设计采用NIOS2 32位处理器,通过SPI接口将SD/TF卡中的JPEG图片数据读取到内存中,SD/TF卡的文件系统为FAT32,NIOS2软件实现将JPEG图片通过UART串口发送给上位机显示,系统框图如下: 2. UART介绍 UART(Universal Asynchronous Receiver/Transmitter)是一种异步收发传输器,工作原理是将传输数据的每个字符一位接一位地传输. UART在空闲时为逻辑1状态,其各位的的意义如下: 起始位:先发出一个逻辑"0

ctf中关于图片的隐写随笔(不全)

①JPG图片的结束符,十六进制常为FFD9 ②binwalk的原理是:检查常见的文件头信息,如果不符合,一定有隐藏信息.③JPG是有损压缩,PNG是无损压缩,BMP是不压缩. 隐写的基本原理:图片查看器会忽视掉结束符之后的内容,所以追加在结束符后面的内容会被隐藏起来.