PHP文件上传与上传图片加水印例子

 更新时间:2016年11月25日 16:56  点击:2151
文章介绍的PHP文件上传与上传图片加水印例子是分开来写的了,先是介绍文件上传代码,而后介绍了一个上传图片加水印代码,大家可以整理成一个类来方便调用了。

先来看一段简单的文件上传代码

html文件(主要是表单了上传文件的表单了)

 代码如下 复制代码

<!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>
 
        <!-- 此行定义字符集,在使用汉字的国家,字符集通常有 gb2312,utf-8两种字符集,设置不对会导致页面中文乱码
 
                 因为我的编辑器是utf-8的,所以这里我定义字符集为utf-8。如果你的字符集是gb2312可以修改charset值 -->
 
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 
        <!-- 此行多是IE浏览器不兼容导致的,现在IE6,IE7使用的人数不多了,大多数可以忽略 -->
 
        <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />
 
        <!-- 定义文档标题 -->
 
        <title>PHP上传实例</title>
 
        <!-- 加入js脚本,简单的前端判断,防止没有选择上传文件就点击提交 -->
 
        <script type="text/javascript">    
 
            // 当页面加载完后执行里边的函数体
 
              // 因为页面的加载顺序是自上到下,否则你把JS移到页脚也可以
 
            window.onload = function(){
 
                // 给上传按钮添加鼠标单击事件
 
                document.forms[0].elements[1].onclick = function(){
 
                    // 判断要上传的文件名是否为空
 
                    if( document.forms[0].file.value == '' ){
 
                        // 如果是空则弹出警告
 
                        alert('请先选择文件');    
 
                        // 结束脚本运行
 
                        return;
 
                    }
 
 
 
                    // 如果文件不为空则上传文件
 
                    document.forms[0].submit();
 
                }        
 
            }
 
        </script>
 
    </head>
 
    <body>
 
        <!-- 此行是定义form表单区域,上传文件必须用POST方式,还要添加 enctype="multipart/form-data" 属性
 
             action里的值为你要处理上传文件的页面,也可以用url或者相对路径 -->
 
        <form action="upload.php" method="post"  enctype="multipart/form-data">
 
            <!-- 定义选择文件的浏览表单 value属性里值就是显示在按钮上的值 -->
 
            <input type="file" name="file" value="选择要上传的文件" />
 
            <!-- 定义提交到服务器的按钮 value属性里的值就是显示在按钮上的值 -->
 
            <input type="button" value="上传" />
 
        </form>
 
    </body>
 
</html>

php上传处理文件

 代码如下 复制代码
<?php
 
/**
 
 * PHP文件上传处理页面
 
 * 琼台博客
 
 */
 
 
 
// 定义提示函数
 
function alert($msg){
 
    return '<script type="text/javascript">alert("'.$msg.'");window.history.back(-1);</script>';
 
}
 
 
 
// 定义允许的文件类型
 
$allowType = array('image/jpeg','image/gif','image/jpg');
 
 
 
// 定义路径,可以是绝对路径,或者相对路径都可以
 
$filePath  = './uploadFileDir/';
 
 
 
// 接收表单信息 其中里边写的 file 值是 静态页form表单里的name值
 
$file = $_FILES['file'];
 
 
 
// 第一步,判断上传的文件是否有错误
 
if( $file['error'] !== 0 ){
 
    exit(alert('文件上传错误'));
 
}
 
 
 
// 第二步,判断文件大小,这里的102400是字节,换算为kb就是100kb
 
if( $file['size'] > 102400 ){
 
    exit(alert('文件过大'));
 
}
 
 
 
// 第三步,判断文件类型
 
if( !in_array(mime_content_type($file['tmp_name']),$allowType) ){
 
    exit(alert('文件类型错误'));
 
}
 
 
 
// 第四步,判断路径是否存在,如果不存在则创建
 
if( !file_exists($filePath) &&  !mkdir($filePath,0777,true) ){
 
    exit(alert('创建目录错误'));
 
}
 
 
 
// 第五步,定义上传后的名字及路径
 
$filename = time().'_'.$file['name'];
 
 
 
// 第六步,复制文件
 
if( !copy($file['tmp_name'],$filePath.$filename) ){
 
    exit(alert('上传文件出错,请稍候重试'));
 
}
 
 
 
// 第七步,删除临时文件
 
unlink($file['tmp_name']);
 
 
 
// 提示上传成功
 
echo alert('恭喜,上传文件['.$filename.']成功!');
 


  
注意:如果你在上传中还带有其它单表字段名我们需要获取需要利用post接受才可以哦,否则你可能接受不到值。

完成以上步骤以后,你就可以给你上传的图片添加水印了。以下是我写的一个小DEMO
水印类

 代码如下 复制代码

<?php
/**
 * 加水印类
 * 琼台博客
 */
 
class water{
 
    private $imgPath; // 图片路径
     
    public function __construct($imgPath="./"){
        $this->imgPath = rtrim($imgPath,"/")."/";
    }
 
    // 写水印动作
    public function waterInfo($ground,$water,$pos=0,$prefix="lee_",$tm=50){
        $allPathGround  = $this->imgPath.$ground;
        $allPathWater   = $this->imgPath.$water;
        $groundInfo = $this->imgInfo($allPathGround);   
        $waterInfo  = $this->imgInfo($allPathWater);
 
        //判断水印图片是否比原图大
        if(!$newPos=$this->imgPos($groundInfo,$waterInfo,$pos)){
            echo "您的水印图片比原图大哦";    
            return false;
        }
         
        //打开资源
        $groundRes=$this->imgRes($allPathGround,$groundInfo['mime']);
        $waterRes=$this->imgRes($allPathWater,$waterInfo['mime']);
 
        //整合资源
        $newGround=$this->imgCopy($groundRes,$waterRes,$newPos,$waterInfo,$tm);
 
        //保存资源
        $this->saveImg($newGround,$ground,$groundInfo['mime'],$prefix);
 
    }
 
    private function saveImg($img,$ground,$info,$prefix){
        $path=$this->imgPath.$prefix.$ground;
        switch($info){
            case "image/jpg":  
            case "image/jpeg":
            case "image/pjpeg":
                imagejpeg($img,$path);
                break;
            case "image/gif":
                imagegif($img,$path);
                break;
            case "image/png":
                imagepng($img,$path);
                break;
            default:
                imagegd2($img,$path);  
        }  
    }
 
    private function imgCopy($ground,$water,$pos,$waterInfo,$tm){  
        imagecopymerge($ground,$water,$pos[0],$pos[1],0,0,$waterInfo[0],$waterInfo[1],$tm);
            return $ground;
    }
 
    private function imgRes($img,$imgType){
        switch($imgType){
            case "image/jpg":  
            case "image/jpeg":
            case "image/pjpeg":
                $res=imagecreatefromjpeg($img);
                break;
            case "image/gif":
                $res=imagecreatefromgif($img);
                break;
            case "image/png":
                $res=imagecreatefrompng($img);
                break;
            case "image/wbmp":
                $res=imagecreatefromwbmp($img);
                break;
            default:
                $res=imagecreatefromgd2($img);
        }  
        return $res;
    }
 
    // 位置为
    // 1 左上 2中上 3右上
    // 4 左中 5中中 6右中
    // 7 左下 8中下 9右下
    // 0 随机位置
    private function imgPos($ground,$water,$pos){
        if($ground[0]<$water[0] || $ground[1]<$water[1])  //判断水印与原图比较 如果水印的高或者宽比原图小 将返回假
            return false;
        switch($pos){
            case 1:
                $x=0;
                $y=0;
                break;
            case 2:
                $x=ceil(($ground[0]-$water[0])/2);
                $y=0;
                break;
            case 3:
                $x=$ground[0]-$water[0];
                $y=0;
                break;
            case 4:
                $x=0;
                $y=ceil(($ground[1]-$water[1])/2);
                break;
            case 5:
                $x=ceil(($ground[0]-$water[0])/2);
                $y=ceil(($ground[1]-$water[1])/2);
                break;
            case 6:
                $x=$ground[0]-$water[0];
                $y=ceil(($ground[1]-$water[1])/2);
                break;
            case 7:
                $x=0;
                $y=$ground[1]-$water[1];
                break;
            case 8:
                $x=ceil($ground[0]-$water[0]/2);
                $y=$ground[1]-$water[1];
                break;
            case 9:
                $x=$ground[0]-$water[0];
                $y=$ground[1]-$water[1];
                break;
            case 0:
            default:
                $x=rand(0,$ground[0]-$water[0]);
                $y=rand(0,$ground[1]-$water[1]);
        }
        $xy[]=$x;
        $xy[]=$y;
        return $xy;
    }
 
    // 获取图片信息的函数
    private function imgInfo($img){
        return getimagesize($img); 
    }
}
?>  

用法很简单,我们介绍一下原理吧,我们只要创建一个water类就可以了,非常的简单。

例子

 代码如下 复制代码

if( !copy($file['tmp_name'],$filePath.$filename) ){
 
    exit(alert('上传文件出错,请稍候重试'));
 
}

如果文件上传成功之后我们可以如下

 代码如下 复制代码

$wt = new sater();
$water ='a.gif'; //水印图片
$wt->waterInfo($filePath.$filename,$water) //其它默认就可以了。

下面综合总结了在php中常用的图像处理函数的一些使用例子,下面一起来看看希望这些例子能帮助到深入的理解PHP图像处理函数。

在PHP中绘制图像的函数非常丰富,包括点、线、各种几何图形等可以想象出来的平面图形,都可以通过PHP中提供的各种画图函数完成。我们在这里介绍一些常用的图像绘制,如果使用我们没有介绍过的函数,可以参考手册实现。另外,这些图形绘制函数都需要使用画布资源,并在画布中的位置通过坐标(原点是在画布左上角的起始位置,以像素为单位,沿着X轴正方向向右延伸,Y轴正方向向下延伸)决定,并且还可以通过函数的最后一个参数,设置每个图形的颜色。画布中的坐标系统如图所示。

1.函数图形区域填充imageFill()

通过PHP仅仅绘制出只有边线的几何图形是不够的,还可以使用对应的填充函数,完成图形区域的填充。除了每个图形都有对应的填充函数之外,还可以使用imageFill()函数实现区域填充。该函数的语法格式如下:

bool imagefill(resource $image,int $x ,int $y,int $color)                    //区域填充

该函数在参数$image代表的图像上,相对于图像左上角(0,0)坐标处,从坐标($x,$y)处用参数$color指定的颜色执行区域填充。与坐标($x,$y)点颜色相同且相邻的点都会被填充。例如在下面的示例中,将画布的背景设置为红色。代码如下所示:

 代码如下 复制代码
<?php
$im = imagecreatetruecolor(100, 100); //创建100*100大小的画布
$red = imagecolorallocate($im, 255, 0, 0); //设置一个颜色变量为红色
 
imagefill($im, 0, 0, $red); //将背景设为红色
 
header('Content-type:image/png'); //通知浏览器这不是文本而是一个图片
imagepng($im); //生成PNG格式的图片输出给浏览器
 
imagedestroy($im); //销毁图像资源,释放画布占用的内存空间
?>

2.绘制点和线imageSetPixel()、imageline()

画点和线是绘制图像中最基本的操作,如果灵活使用,可以通过它们绘制出千变万化的图像。在PHP中,使用imageSetPixel()函数在画布中绘制一个单一像素的点,并且可以设置点的颜色。其函数的原型如下所示:

bool imagesetpixel(resource $image,int $x,int $y,int $color)                         //画一个单一像素

该函数在第一个参数$image中提供的画布上,距离圆点分别为$x和$y的坐标位置,绘制一个颜色为$color的一个像素点。理论上使用画点函数便可以画出所需要的所有图形,也可以使用其他的绘图函数。如果需要绘制一条线段,可以使用imageline()函数,其语法格式如下所示:

bool imageline(resource $image,int $x1,int $y1,int $x2,int $y2,int $color)                //画一条线段

我们都知道两点确定一条线段,所以该函数使用$color颜色在图像$image中,从坐标($x1,$x2)开始到($x2,$y2)坐标结束画一条线段。

3.绘制矩形imageRectangle()、imageFilledRectangle()

可以使用imageRectangle()函数绘制矩形,也可以通过imageFilledRectangle()函数绘制一个矩形并填充。这两个函数的语法格式如下所示:

bool imagerectangle(resource $image,int $x1 , int $y1,int $x2,int $y2,int $color)                    //画一个矩形
bool imagefilledrectangle(resource image,int $x1 ,int $y1 ,int $x2 ,int $y2,int $color)                      //画一个矩形并填充

这两个函数的行为类似,都是在$image图像中画一个矩形,只不过前者是使用$color参数指定矩形的边线颜色,而后者则是使用这个颜色填充矩形。相对于图像左上角的(0,0)位置,矩形的左上角坐标为($x1,$y1),右下角坐标为($x2,$y2)。

4.绘制多边形imagePolygon()、imagefilledpolygon()

可以使用imagePolygon()函数绘制一个多边形,也可以通过imageFilledPolygon()函数绘制一个多边形并填充。这两个函数的语法格式如下:

bool imagepolygon(resource $image,array $points,int $num_points,int $color)                   //画一个多边形
bool imagefilledpolygon(resource $image ,array $points,int $num_points,int $color)                     //画一个多边形并填充

这两个函数的行为类似,都是在$image图像中画一个多边形,只不过前者是使用$color参数指定多边形的边线颜色,而后者则是使用这个颜色填充多边形。第二个参数$points是一个PHP数组,包含了多边形的各个顶点坐标。即points[0]=x0,points[1]=y0,points[2]=x1,points[3]=y1,依此类推。第三个参数$num_points是顶点的总数,必须大于3.

5.绘制椭圆imageEllipse()、imageFilledElipse()

可以使用imageEllipse()函数绘制一个椭圆,也可以通过imageFilledEllipse()函数绘制一个椭圆并填充。这两个函数的语法格式如下:

bool imageellipse(resource $image,int $cx,int $cy,int $w,int $h,int $color)              //画一个椭圆
bool imagefilledellipse(resource $image,int $cx,int $cy,int $w,int $h,int $color)               //画一个椭圆填充

这两个函数行为类似,都是在$image图像中画一个椭圆,只不过前者是使用$color参数指定椭圆形的边线颜色,而后者则是使用它填充颜色。相对于画布左上角坐标(0,0),以($cx,$cy)坐标为中心画一个椭圆,参数$w和$h分别指定了椭圆的宽和高。如果成功则返回TRUE,失败则返回FALSE。

6.绘制弧线imageArc()

就是使用绘制填充圆弧的函数实现的。可以使用imageArc()函数绘制一条弧线,以及圆形和椭圆形。这个函数的语法格式如下:

bool imagearc(resource $image ,int $cx,int $cy,int $w,int $h,int $s,int $e ,int $color) //画椭圆弧

相对于画布左上角坐标(0,0),该函数以($cx,$cy)坐标为中心,在$image所代表的图像中画一个椭圆弧。其中参数$w和$h分别指定了椭圆的宽度和高度,起始点和结束点以$s和$e参数以角度指定。0º位于三点钟位置,以顺时针方向绘画。如果要绘制一个完整的圆形,首先要将参数$w和$h设置为相等的值,然后将起始角度$s设置为0,结束角度$e指定为360.如果需要绘制填充圆弧,可以查询imageFilledArc()函数使用。

下面再看一个由图片处理函数生成的一个 3D扇形统计图示例

 代码如下 复制代码

<?php
    //创建画布,返回一个资源类型的变量$image,并在内存中开辟一个临时区域
    $image = imagecreatetruecolor(100, 100);                //创建画布大小为100x100
 
    //设置图像中所需的颜色,相当于在画画时准备的染料盒
    $white = imagecolorallocate($image, 0xFF, 0xFF, 0xFF);          //为图像分配颜色为白色
    $gray = imagecolorallocate($image, 0xC0, 0xC0, 0xC0);           //为图像分配颜色为灰色
    $darkgray = imagecolorallocate($image, 0x90, 0x90, 0x90);       //为图像分配颜色为暗灰色
    $navy = imagecolorallocate($image, 0x00, 0x00, 0x80);           //为图像分配颜色为深蓝色
    $darknavy = imagecolorallocate($image, 0x00, 0x00, 0x50);       //为图像分配颜色为暗深蓝色
    $red = imagecolorallocate($image, 0xFF, 0x00, 0x00);           //为图像分配颜色为红色
    $darkred = imagecolorallocate($image, 0x90, 0x00, 0x00);       //为图像分配颜色为暗红色
 
    imagefill($image, 0, 0, $white);            //为画布背景填充背景颜色
    //动态制作3D效果
    for ($i = 60; $i >50; $i--){                //循环10次画出立体效果
        imagefilledarc($image, 50, $i, 100, 50, -160, 40, $darknavy, IMG_ARC_PIE);
        imagefilledarc($image, 50, $i, 100, 50, 40, 75, $darkgray, IMG_ARC_PIE);
        imagefilledarc($image, 50, $i, 100, 50, 75, 200, $darkred, IMG_ARC_PIE);
    }
 
    imagefilledarc($image, 50, 50, 100, 50, -160, 40, $navy, IMG_ARC_PIE);      //画一椭圆弧且填充
    imagefilledarc($image, 50, 50, 100, 50, 40 , 75, $gray, IMG_ARC_PIE);      //画一椭圆弧且填充
    imagefilledarc($image, 50, 50, 100, 50, 75, 200, $red, IMG_ARC_PIE);      //画一椭圆弧且填充
 
    imagestring($image, 1, 15, 55, '34.7%', $white);                //水平地画一行字符串
    imagestring($image, 1, 45, 35, '55.5%', $white);                //水平地画一行字符串
 
    //向浏览器中输出一个GIF格式的图片
    header('Content-type:image/png');               //使用头函数告诉浏览器以图像方式处理以下输出
    imagepng($image);                       //向浏览器输出
    imagedestroy($image);                   //销毁图像释放资源
?>

直接通过浏览器请求该脚本,或是将该脚本所在的URL,赋给HTML中的IMG标记的src属性,都可以获取动态输出的图像结果,如下图所示:

 

PHP中生成图像程序代码
php生成图形验证码需要借助于php gd库与session来实例,这样由gd库生成图片给用户看,再由用户输入验证提交给服务器与session中存储值进行验证,下面我们来看全过程吧。

windows系统GD库开启

将php.ini文件找到extension=php_gd2.dll  去掉前面的;就行了

linux系统GD库开启

##检测GD库是否安装命令
 php5 -m | grep -i gd
 或者
 php -i | grep -i --color gd
##如未安装GD库,则为服务器安装,方法如下
### 如果是源码安装,则加入参数
 --with-gd
### 如果是debian系的linux系统,用apt-get安装,如下
 apt-get install php5-gd
### 如果是CentOS系的系统,用yum安装,如下
 yum install php-gd
### 如果是suse系的linux系统,用yast安装,如下
 yast -i php5_gd

好了,php GD库己经好了下面我们来看php生成图形验证码图片实例

首先还是给大家先介绍一下验证码的简单概念吧!

1 、验证码介绍

验证码是将一串随机产生的数字或符号以图片的形式展现在页面上,由用户肉眼识别其中的验证码信息,在进行提交操作的同时,需将图片上的字符同时提交,输入提交验证成功后才能使用某项功能。如果提交的字符与服务器 session保存的不同,则认为提交信息无效。为了避免自动程序分析解析图片,通常会在图片上随机生成一些干扰素或者将字符进行扭曲,增加自动识别难度。用户提交后将用户输入的验证码与会话 sessi on中保存的字符串进行比对, 达到验证的效果。用户提交表单的时候,接收表单的页面检查服务端产生的 sessi on和客户端提交的表单值是否一致,不
一致则不读或写入数据库。会话 sessi on允许在服务器上储存小部分用户信息;这类信息是临时性的,当用户离开网站时会被自动删除。

2、 PHP实现过程
PHP网页文件被当作一般HTML网页文件来处理, 并且在编辑时,可以用编辑 HTML的常规方法来编写。由于PHP在使用时消耗相当少的系统资源, 并且有着开放的源代码, 而且是免费的,如今PHP已经被更多的网站应用,下面是 PHP实现验证码的过程:


(1)生成随机数
定义用来显示在图片上的数字和字母;

循环随机抽取四位定义好的字母和数字;
将通过数字得来的字符连起来一共是四位;
保存生成的数字和字母, 把生成好的随机数放到 sessi on变量中,将来跟用户提交的内容比较。

 代码如下 复制代码
< ? php
$ aut hnum_session = ' ; '
$ st r = a ' bcdef ghij k l mnopqrstuv wxyz 1234567890 '
;
$ l = strlen( $ str) ;
f or( $ i= 1 ; $ i< = 4 ; $ i+ + )
{
$ num= rand( 0 , $ l- 1);
$ aut hnum_session. = $ str[ $ num];$ aut hnum_session. = $ str[ $ num];
}
$ _SESSI ON[ " authnum_ses sion" ] ;
? >


(2) 创建图片
用图片创建函数确定所创建的图片大小。

 代码如下 复制代码
< ? php
$ i m = i magecreate( 60 , 20);
? >


(3)设置颜色
使用函数创建背景色;
使用函数创建字体色。

 代码如下 复制代码

< ? php
$ b lack = ImageColor A ll ocate( $ i m, 0 , 0, 0);
$ white = ImageColor A ll ocate( $ i m, 255 , 255 ,
255);
$ gray = I mageColor A ll ocate ( $ i m , 200 , 200 ,
200);
i magefill ( $ i m , 68 , 30 , $ gray);
$ li = I mageColor A l loca te ( $ i m , 220 , 220 ,
220);
? >


(4)加入干扰素
在不影响用户输入的条件下,加入若干干扰线、
干扰象素。

 代码如下 复制代码
< ? php
f or( $ i= 0 ; $ i< 3 ; $ i+ + )
{
i mageline( $ i m , rand ( 0 , 30), rand( 0 , 21), rand( 20 , 40), rand( 0 , 21), $ li );
}
f or( $ i= 0 ; $ i< 90 ; $ i+ + )
{
i magesetp i xe l ( $ i m, rand( )% 70 , rand( )% 30
, $ gray);
}
? >


(5)把字符写在图像左上角
使用函数 i magestri ng把字符写在图像上。

 代码如下 复制代码
< ? php
i magest ring( $ i m, 5 , 12 , 5 , $ au t hnu m _ ses2
sion , $ wh i te);
? >


(6)输出图像
开启 sessi on功能;
使用函数输出图像。

 代码如下 复制代码

< ? phpH eader( "Content - type : i mage /png" ) ;
sessi on_start ( ) ;
I magePNG( $ i m);
? >

上述验证码显示结果如下

 

在需要调用验证码进行验证的页面当中, 由用户填写验证码表单, 系统将表单提交的验证码数据与上面的 sessi on变量进行比对,若相等表示验证正确,可以继续进行; 不相等则错误, 终止用户正在进行的工作,实现用户使用验证码的验证功能。

无标题文档

 代码如下 复制代码
<!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=utf-8" />
<title>无标题文档</title>
<script language="javascript">
 function refresh_code()
 {
  form1.imgcode.src="verifycode.php?a="+Math.random();
 }
</script>
</head>
<body>
<form id="form1" name="form1" method="post" action="checkcode.php">
  <label for="code">验证码:</label>
  <input type="text" name="code" id="textfield" />
  <img id="imgcode" src="VerifyCode.php" alt="验证码" />
  <a href="javascript:refresh_code()">看不清?换一个</a>
  <input type="submit" name="button" id="button" value="提交" />
</form>
</body>
</html>

 

verifycode.php文件代码如下

 

 代码如下 复制代码

<?php
 /*
  图片验证码 Powered By KASON test http://www.111cn.net   */
  session_start();
  $num=4;//验证码个数
  $width=80;//验证码宽度
  $height=20;//验证码高度
  $code=' ';
  for($i=0;$i<$num;$i++)//生成验证码
  {
   switch(rand(0,2))
   {
    case 0:$code[$i]=chr(rand(48,57));break;//数字
    case 1:$code[$i]=chr(rand(65,90));break;//大写字母
    case 2:$code[$i]=chr(rand(97,122));break;//小写字母
   }
  }
  $_SESSION["VerifyCode"]=$code;
  $image=imagecreate($width,$height);
  imagecolorallocate($image,255,255,255);
  for($i=0;$i<80;$i++)//生成干扰像素
  {
   $dis_color=imagecolorallocate($image,rand(0,2555),rand(0,255),rand(0,255));
   imagesetpixel($image,rand(1,$width),rand(1,$height),$dis_color);
  }
  for($i=0;$i<$num;$i++)//打印字符到图像
  {
   $char_color=imagecolorallocate($image,rand(0,2555),rand(0,255),rand(0,255));
   imagechar($image,60,($width/$num)*$i,rand(0,5),$code[$i],$char_color);
  }
  header("Content-type:image/png");
  imagepng($image);//输出图像到浏览器
  imagedestroy($image);//释放资源
?>  

 

checkcode.php文件如下

 代码如下 复制代码

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<?php
ini_set('display_errors', 'Off');
session_start();
  if((strtoupper($_POST["code"])) == strtoupper(($_SESSION["VerifyCode"]))){
 print("验证码正确,");
  }else{
    print("验证码错误,");
  }
  echo "提交的验证码:".strtoupper($_POST["code"]).",正确的验证码:".strtoupper($_SESSION["VerifyCode"]);
?>

本文章来给大家介绍一篇关于php 给图片加灰色透明效果,希望此方法对各位同学会有所帮助哦。

原理:

1.首先计算出原图片的尺寸
2.创建相同尺寸的半透明图片
3.使用 imagecopy()方法,把新创建的半透明图片与原图合并

 代码如下 复制代码

<?php
/*php 给图片加灰色透明效果*/
$imfile = './0.jpg';//原图
$origim = imagecreatefromjpeg($imfile);//从 JPEG 文件或 URL 新建一图像
 
$w=imagesx($origim);//原图宽度
$h=imagesy($origim);//原图高度
 
$newimg = imagecreatetruecolor($w, $h);//返回一个图像标识符,代表了一幅大小为    x_size 和 y_size 的黑色图像。imagecreatetruecolor//     
 
$color=imagecolorallocatealpha($newimg,0,0,0,75);//为一幅图像分配颜色 + alpha; 和 imagecolorallocate() 相同,但多了一个额外的透明度参数 alpha,其值从 0 到 127。0 表示完全不透明,127 表示完全透明。 
 
imagecolortransparent($newimg,$color);//将某个颜色定义为透明色
 
imagefill($newimg,0,0,$color);//区域填充;resource $image , int $x , int $y , int $color 
 
imagecopy($origim,$newimg, 0,0, 0, 0,$w, $h);//拷贝图像的一部分;将 src_im 图像中坐标从 src_x,src_y 开始,宽度为 src_w,高度为 src_h 的一部分拷贝到 dst_im 图像中坐标为 dst_x 和 dst_y 的位置上。
 
imagejpeg($origim, './2.jpg');//输出图象到浏览器或文件。;resource $image [, string $filename [, int $quality ]]
?>

[!--infotagslink--]

相关文章

  • Php文件上传类class.upload.php用法示例

    本文章来人大家介绍一个php文件上传类的使用方法,期望此实例对各位php入门者会有不小帮助哦。 简介 Class.upload.php是用于管理上传文件的php文件上传类, 它可以帮...2016-11-25
  • PHP文件上传一些小收获

    又码了一个周末的代码,这次在做一些关于文件上传的东西。(PHP UPLOAD)小有收获项目是一个BT种子列表,用户有权限上传自己的种子,然后配合BT TRACK服务器把种子的信息写出来...2016-11-25
  • jQuery实现简单的文件上传进度条效果

    本文实例讲述了jQuery实现文件上传进度条效果的代码。分享给大家供大家参考。具体如下: 运行效果截图如下:具体代码如下:<!DOCTYPE html><html><head><meta charset="utf-8"><title>upload</title><link rel="stylesheet...2015-11-24
  • php文件上传你必须知道的几点

    本篇文章主要说明的是与php文件上传的相关配置的知识点。PHP文件上传功能配置主要涉及php.ini配置文件中的upload_tmp_dir、upload_max_filesize、post_max_size等选项,下面一一说明。打开php.ini配置文件找到File Upl...2015-10-21
  • php上传图片学习笔记与心得

    我们在php中上传文件就必须使用#_FILE变量了,这个自动全局变量 $_FILES 从 PHP 4.1.0 版本开始被支持。在这之前,从 4.0.0 版本开始,PHP 支持 $HTTP_POST_FILES 数组。这...2016-11-25
  • 借助FileReader实现将文件编码为Base64后通过AJAX上传

    这篇文章主要介绍了借助FileReader实现将文件编码为Base64后通过AJAX上传的方法,包括后端对文件数据解码并保存的PHP代码,需要的朋友可以参考下...2015-12-25
  • js实现上传文件添加和删除文件选择框

    这篇文章主要为大家详细介绍了js实现上传文件添加和删除文件选择框 ,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2016-10-25
  • jQuery+ajax简单实现文件上传的方法

    这篇文章主要介绍了jQuery+ajax简单实现文件上传的方法,结合实例形式简单分析了jQuery基于ajax的post方法进行文件传输及asp.net后台处理技巧,需要的朋友可以参考下...2016-06-12
  • 适用于初学者的简易PHP文件上传类

    本文实例讲述了PHP多文件上传类,分享给大家供大家参考。具体如下:<&#63;phpclass Test_Upload{ protected $_uploaded = array(); protected $_destination; protected $_max = 1024000; protected $_messages =...2015-10-30
  • js 实现文件上传样式详情

    这篇文章主要介绍了js 实现文件上传样式,下面文章举例说明js 是如何实现文件上传样式的,附有代码详细解说,需要的朋友可以参考一下,希望对你有所帮助...2021-10-21
  • PHP利用APC模块实现大文件上传进度条的方法

    php 大文件带进度的上传,一直是一个令php程序员很苦恼的问题。查询baidu 、Google ,大体做带进度的上传方式为:flash+php,socket,apc+php等,下面我介绍了apc +php+ajax制作的带进度的上传,并贴出源码,希望对大家有用。 Altern...2015-10-30
  • C#文件上传的简单实现

    这篇文章主要为大家详细介绍了C#文件上传的简单实现,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-06-25
  • TypeScript前端上传文件到MinIO示例详解

    这篇文章主要为大家介绍了TypeScript前端上传文件到MinIO示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪...2022-10-12
  • php需登录的文件上传管理系统

    本文给大家介绍一个不错的需要登录的php 文件上传管理系统,功能简单有需要了解的同学可参考。 代码如下<&#63;php$admin_pw="admin";//管理密码$uploaddir="upload";//上传目录session_start();if($_GET['action']=="g...2015-10-30
  • asp.net html控件的File控件实现多文件上传实例分享

    asp.net中html控件的File控件实现多文件上传简单实例,开发工具vs2010使用c#语言,感兴趣的朋友可以了解下,必定是多文件上传值得学习,或许本文所提供的知识点对你有所帮助...2021-09-22
  • JQuery异步提交表单与文件上传功能示例

    这篇文章主要介绍了JQuery异步提交表单与文件上传功能,结合实例形式分析了jQuery表单提交及文件传输操作的相关实现技巧,需要的朋友可以参考下...2017-01-16
  • PHP文件上传主要代码讲解

    复制代码 代码如下:<?php if($_FILES['myfile']['name'] != '') { if($_FILES['myfile']['error'] > 0) { echo "错误状态:" . $_FILES['myfile']['error']; } else { move_uploaded_f...2013-10-04
  • 使用jQuery.form.js/springmvc框架实现文件上传功能

    这篇文章主要介绍了使用jQuery.form.jsspringmvc框架实现文件上传功能,非常具有参考借鉴价值,感兴趣的朋友一起学习吧...2016-05-14
  • python实现图片加文字水印OPenCV和PIL库

    本文来为大家介绍一下,使用python中的库实现给图片添加文字水印,openCV可以给图片添加水印,如果要添加汉字水印那就要使用PIL库...2021-09-26
  • jquery插件uploadify实现带进度条的文件批量上传

    这篇文章主要介绍了jquery插件uploadify实现带进度条的文件批量上传,感兴趣的小伙伴们可以参考一下...2015-12-14