php 图片添加文字水印并添加文字阴影

 更新时间:2016年11月25日 16:56  点击:1647
在php中要给图片加水印我们需要给php安装GD库了,这里我们不介绍GD库安装,只介绍怎么利用php给图片添加文字水印并添加文字阴影效果。

GD库,是php处理图形的扩展库,GD库提供了一系列用来处理图片的API,使用GD库可以处理图片,或者生成图片。 在网站上GD库通常用来生成缩略图,或者用来对图片加水印,或者用来生成汉字验证码,或者对网站数据生成报表等。

原图

 

生成效果图:

效果图


GD库的安装什么的网上都有,现在很多虚拟空间也都支持,这里就不再赘述。下面通过我实际应用代码的实例和相关的注释为大家介绍一下GD库的使用方法。

 代码如下 复制代码
$str="北京";
$str2= "空气质量:轻度污染";
// 通过图片生成一个对象$im
$im = imagecreatefromjpeg("images/3.jpg");
//载入字体zt.ttf
$fnt = "zt.ttf";
//创建颜色,用于文字字体的白和阴影的黑
$white=imagecolorallocate($im,222,229,207);
$black=imagecolorallocate($im,50,50,50);
//创建关于相对图片位置的函数,方便调用
$top=100;
$left=60;
$top2=170;
//在图片中添加文字,imagettftext (image,size,angle, x, y,color,fontfile,text)
imagettftext($im,41, 0, $left+1, $top+1, $black, $fnt, $str);
imagettftext($im,41, 0, $left, $top, $white, $fnt, $str);
imagettftext($im,43, 0, $left+1,$top2+1 , $black, $fnt, $str2);
imagettftext($im,43, 0, $left,$top2, $white, $fnt, $str2);
//将$im输出
ImageJpeg($im);
//销毁$im对象
ImageDestroy($im);

 
接下来详细解释一下:

 

 代码如下 复制代码
imagettftext (image,size,angle, x, y,color,fontfile,text)

 
imagettftext() 是将字符串 text画到 image所代表的图像上,从坐标 x,y(左上角为 0, 0)开始,角度为 angle,颜色为 color,使用 fontfile 所指定的 TrueType 字体文件。

由 x,y 所表示的坐标定义了第一个字符的基本点大概在字符的左下角。

angle 以角度表示,0 度为从左向右阅读文本,更高的值表示逆时针方向(即如果值为 90 则表示从下向上阅读文本)。

fontfile 是想要使用的 TrueType 字体的文件名。

text 是文本字符串,可以包含 UTF-8 字符序列。

color 是颜色的索引值。

一个可以供PHP调用ImageMagick功能的PHP扩展。使用这个扩展可以使PHP具备和ImageMagick相同的功能。


ImageMagick是一套功能强大、稳定而且免费的工具集和开发包,可以用来读、写和处理超过185种基本格式的图片文件,包括流行的TIFF, JPEG, GIF, PNG, PDF以及PhotoCD等格式。利用ImageMagick,你可以根据web应用程序的需要动态生成图片, 还可以对一个(或一组)图片进行改变大小、旋转、锐化、减色或增加特效等操作,并将操作的结果以相同格式或其它格式保存。


php_imagick是PHP对图片处理的一个扩展包,可以完成对图片改变大小、旋转、锐化、减色或增加特效等操作。
一、windows下安装Imagick扩展:


1、下载 ImageMagick并安装

http://image_magick.veidrodis.com/image_magick/binaries/ImageMagick-6.6.2-10-Q16-windows-dll.exe

2、下载php_imagick.dll

http://valokuva.org/outside-blog-content/imagick-windows-builds/php53/imagick-2.3.0-dev/vc9_nts/php_imagick.dll

如果你用的是线程安全的php,请下载
http://valokuva.org/outside-blog-content/imagick- windows-builds/php53/imagick-2.3.0-dev/vc9_zts/php_imagick.dll

3、设置
在php.ini中添加
extension=php_imagick.dll ,重启web server


二、linux下安装Imagick扩展:


1.yum安装ImageMagick


yum install ImageMagick ImageMagick-devel

2.测试是否安装成功

convert -version

3.安装imagick扩展

 

01.wget http://pecl.php.net/get/imagick-3.1.0RC2.tgz02.tar xzvf imagick-3.1.0RC2.tgz03.cd imagick-3.1.0RC204.phpize05../configure06.make07.make install

4.编辑php.ini文件,在文件末尾添加如下代码

extension=imagick.so

5. 重新启动apache服务器

service httpd restart


三、案例
1. 边框处理

 

 代码如下 复制代码
//by www.111cn.net
header('Content-type: image/jpeg');
$image = new Imagick('test.jpg');
$color=new ImagickPixel();
$color->setColor("rgb(220,220,220)");
$image->borderImage($color,5,4);
$image->blurImage(5,5,imagick::CHANNEL_GREEN);
echo $image;


我们先来看个简单的实例

php_imagick程序示例

1.创建一个缩略图并显示出来

 代码如下 复制代码
<?php
header('Content-type: image/jpeg');
$image = new Imagick('image.jpg');
// If 0 is provided as a width or height parameter,// aspect ratio is maintained
$image->thumbnailImage(100, 0);
echo $image;
?>

2.创建一个目录下的缩略图,并保存

 代码如下 复制代码

<?php
$images = new Imagick(glob('images/*.JPG'));
foreach($images as $image) {
// Providing 0 forces thumbnailImage to maintain aspect ratio
$image->thumbnailImage(1024,0);
}
$images->writeImages();
?>

3.缩略GIF动画图片

 代码如下 复制代码

<?php
/* Create a new imagick object and read in GIF */
$im = new Imagick("example.gif");
/* Resize all frames */
foreach ($im as $frame) {
/* 50x50 frames */
$frame->thumbnailImage(50, 50);
/* Set the virtual canvas to correct size */
$frame->setImagePage(50, 50, 0, 0);
}/* Notice writeImages instead of writeImage */
$im->writeImages("example_small.gif", true);
?>

现在我们进入正题吧,

例1

裁切/生成缩略图/添加水印, 自动检测和处理 GIF

调用方式:

 代码如下 复制代码

include 'imagick.class.php';

$image = new lib_image_imagick();

$image->open('a.gif');
$image->resize_to(100, 100, 'scale_fill');
$image->add_text('1024i.com', 10, 20);
$image->add_watermark('1024i.gif', 10, 50);
$image->save_to('x.gif');

imagick.class.php 

 代码如下 复制代码

<?php

class lib_image_imagick
{
 private $image = null;
 private $type = null;

 // 构造函数
 public function __construct(){}


 // 析构函数
 public function __destruct()
 {
     if($this->image!==null) $this->image->destroy();
 }

 // 载入图像
 public function open($path)
 {
  $this->image = new Imagick( $path );
  if($this->image)
  {
      $this->type = strtolower($this->image->getImageFormat());
  }
  return $this->image;
 }
 

 public function crop($x=0, $y=0, $width=null, $height=null)
 {
     if($width==null) $width = $this->image->getImageWidth()-$x;
     if($height==null) $height = $this->image->getImageHeight()-$y;
     if($width<=0 || $height<=0) return;
    
     if($this->type=='gif')
     {
            $image = $this->image;
         $canvas = new Imagick();
        
         $images = $image->coalesceImages();
         foreach($images as $frame){
             $img = new Imagick();
             $img->readImageBlob($frame);
                $img->cropImage($width, $height, $x, $y);

                $canvas->addImage( $img );
                $canvas->setImageDelay( $img->getImageDelay() );
                $canvas->setImagePage($width, $height, 0, 0);
            }
           
            $image->destroy();
         $this->image = $canvas;
     }
     else
     {
         $this->image->cropImage($width, $height, $x, $y);
     }
 }

 /*
 * 更改图像大小
 $fit: 适应大小方式
 'force': 把图片强制变形成 $width X $height 大小
 'scale': 按比例在安全框 $width X $height 内缩放图片, 输出缩放后图像大小 不完全等于 $width X $height
 'scale_fill': 按比例在安全框 $width X $height 内缩放图片,安全框内没有像素的地方填充色, 使用此参数时可设置背景填充色 $bg_color = array(255,255,255)(红,绿,蓝, 透明度) 透明度(0不透明-127完全透明))
 其它: 智能模能 缩放图像并载取图像的中间部分 $width X $height 像素大小
 $fit = 'force','scale','scale_fill' 时: 输出完整图像
 $fit = 图像方位值 时, 输出指定位置部分图像
 字母与图像的对应关系如下:
 
 north_west   north   north_east
 
 west         center        east
 
 south_west   south   south_east
 
 */
 public function resize_to($width = 100, $height = 100, $fit = 'center', $fill_color = array(255,255,255,0) )
 {
    
     switch($fit)
     {
         case 'force':
             if($this->type=='gif')
             {
                 $image = $this->image;
                 $canvas = new Imagick();
                
                 $images = $image->coalesceImages();
                 foreach($images as $frame){
                     $img = new Imagick();
                     $img->readImageBlob($frame);
                        $img->thumbnailImage( $width, $height, false );

                        $canvas->addImage( $img );
                        $canvas->setImageDelay( $img->getImageDelay() );
                    }
                    $image->destroy();
                 $this->image = $canvas;
             }
             else
             {
                 $this->image->thumbnailImage( $width, $height, false );
             }
             break;
         case 'scale':
             if($this->type=='gif')
             {
                 $image = $this->image;
                 $images = $image->coalesceImages();
                 $canvas = new Imagick();
                 foreach($images as $frame){
                     $img = new Imagick();
                     $img->readImageBlob($frame);
                        $img->thumbnailImage( $width, $height, true );

                        $canvas->addImage( $img );
                        $canvas->setImageDelay( $img->getImageDelay() );
                    }
                    $image->destroy();
                 $this->image = $canvas;
             }
             else
             {
                 $this->image->thumbnailImage( $width, $height, true );
             }
             break;
         case 'scale_fill':
             $size = $this->image->getImagePage();
             $src_width = $size['width'];
             $src_height = $size['height'];
            
                $x = 0;
                $y = 0;
               
                $dst_width = $width;
                $dst_height = $height;

       if($src_width*$height > $src_height*$width)
    {
     $dst_height = intval($width*$src_height/$src_width);
     $y = intval( ($height-$dst_height)/2 );
    }
    else
    {
     $dst_width = intval($height*$src_width/$src_height);
     $x = intval( ($width-$dst_width)/2 );
    }

                $image = $this->image;
                $canvas = new Imagick();
               
                $color = 'rgba('.$fill_color[0].','.$fill_color[1].','.$fill_color[2].','.$fill_color[3].')';
             if($this->type=='gif')
             {
                 $images = $image->coalesceImages();
                 foreach($images as $frame)
                 {
                     $frame->thumbnailImage( $width, $height, true );

                     $draw = new ImagickDraw();
                        $draw->composite($frame->getImageCompose(), $x, $y, $dst_width, $dst_height, $frame);

                        $img = new Imagick();
                        $img->newImage($width, $height, $color, 'gif');
                        $img->drawImage($draw);

                        $canvas->addImage( $img );
                        $canvas->setImageDelay( $img->getImageDelay() );
                        $canvas->setImagePage($width, $height, 0, 0);
                    }
             }
             else
             {
                 $image->thumbnailImage( $width, $height, true );
                
                 $draw = new ImagickDraw();
                    $draw->composite($image->getImageCompose(), $x, $y, $dst_width, $dst_height, $image);
                   
                 $canvas->newImage($width, $height, $color, $this->get_type() );
                    $canvas->drawImage($draw);
                    $canvas->setImagePage($width, $height, 0, 0);
             }
             $image->destroy();
             $this->image = $canvas;
             break;
   default:
    $size = $this->image->getImagePage();
       $src_width = $size['width'];
             $src_height = $size['height'];
            
                $crop_x = 0;
                $crop_y = 0;
               
                $crop_w = $src_width;
                $crop_h = $src_height;
               
          if($src_width*$height > $src_height*$width)
    {
     $crop_w = intval($src_height*$width/$height);
    }
    else
    {
        $crop_h = intval($src_width*$height/$width);
    }
               
       switch($fit)
             {
        case 'north_west':
            $crop_x = 0;
            $crop_y = 0;
            break;
           case 'north':
               $crop_x = intval( ($src_width-$crop_w)/2 );
               $crop_y = 0;
               break;
           case 'north_east':
               $crop_x = $src_width-$crop_w;
               $crop_y = 0;
               break;
           case 'west':
               $crop_x = 0;
               $crop_y = intval( ($src_height-$crop_h)/2 );
               break;
           case 'center':
               $crop_x = intval( ($src_width-$crop_w)/2 );
               $crop_y = intval( ($src_height-$crop_h)/2 );
               break;
           case 'east':
               $crop_x = $src_width-$crop_w;
               $crop_y = intval( ($src_height-$crop_h)/2 );
               break;
           case 'south_west':
               $crop_x = 0;
               $crop_y = $src_height-$crop_h;
               break;
           case 'south':
               $crop_x = intval( ($src_width-$crop_w)/2 );
               $crop_y = $src_height-$crop_h;
               break;
           case 'south_east':
               $crop_x = $src_width-$crop_w;
               $crop_y = $src_height-$crop_h;
               break;
           default:
               $crop_x = intval( ($src_width-$crop_w)/2 );
               $crop_y = intval( ($src_height-$crop_h)/2 );
             }
            
             $image = $this->image;
             $canvas = new Imagick();
            
          if($this->type=='gif')
             {
                 $images = $image->coalesceImages();
                 foreach($images as $frame){
                     $img = new Imagick();
                     $img->readImageBlob($frame);
                        $img->cropImage($crop_w, $crop_h, $crop_x, $crop_y);
                        $img->thumbnailImage( $width, $height, true );
                       
                        $canvas->addImage( $img );
                        $canvas->setImageDelay( $img->getImageDelay() );
                        $canvas->setImagePage($width, $height, 0, 0);
                    }
             }
             else
             {
                 $image->cropImage($crop_w, $crop_h, $crop_x, $crop_y);
                 $image->thumbnailImage( $width, $height, true );
                 $canvas->addImage( $image );
                 $canvas->setImagePage($width, $height, 0, 0);
             }
             $image->destroy();
             $this->image = $canvas;
     }
    
 }
 

 

 // 添加水印图片
 public function add_watermark($path, $x = 0, $y = 0)
 {
        $watermark = new Imagick($path);
        $draw = new ImagickDraw();
        $draw->composite($watermark->getImageCompose(), $x, $y, $watermark->getImageWidth(), $watermark->getimageheight(), $watermark);

     if($this->type=='gif')
     {
         $image = $this->image;
            $canvas = new Imagick();
         $images = $image->coalesceImages();
         foreach($image as $frame)
         {
                $img = new Imagick();
             $img->readImageBlob($frame);
                $img->drawImage($draw);
               
                $canvas->addImage( $img );
                $canvas->setImageDelay( $img->getImageDelay() );
            }
            $image->destroy();
         $this->image = $canvas;
     }
     else
     {
         $this->image->drawImage($draw);
     }
 }

 
 // 添加水印文字
 public function add_text($text, $x = 0 , $y = 0, $angle=0, $style=array())
 {
        $draw = new ImagickDraw();
        if(isset($style['font'])) $draw->setFont($style['font']);
        if(isset($style['font_size'])) $draw->setFontSize($style['font_size']);
     if(isset($style['fill_color'])) $draw->setFillColor($style['fill_color']);
     if(isset($style['under_color'])) $draw->setTextUnderColor($style['under_color']);
    
     if($this->type=='gif')
     {
         foreach($this->image as $frame)
         {
             $frame->annotateImage($draw, $x, $y, $angle, $text);
         }
     }
     else
     {
         $this->image->annotateImage($draw, $x, $y, $angle, $text);
     }
 }
 
 
 // 保存到指定路径
 public function save_to( $path )
 {
     if($this->type=='gif')
     {
         $this->image->writeImages($path, true);
     }
     else
     {
         $this->image->writeImage($path);
     }
 }

 // 输出图像
 public function output($header = true)
 {
     if($header) header('Content-type: '.$this->type);
     echo $this->image->getImagesBlob();  
 }

 
 public function get_width()
 {
        $size = $this->image->getImagePage();
        return $size['width'];
 }
 
 public function get_height()
 {
     $size = $this->image->getImagePage();
        return $size['height'];
 }

 // 设置图像类型, 默认与源类型一致
 public function set_type( $type='png' )
 {
     $this->type = $type;
        $this->image->setImageFormat( $type );
 }

 // 获取源图像类型
 public function get_type()
 {
  return $this->type;
 }


 // 当前对象是否为图片
 public function is_image()
 {
  if( $this->image )
   return true;
  else
   return false;
 }
 


 public function thumbnail($width = 100, $height = 100, $fit = true){ $this->image->thumbnailImage( $width, $height, $fit );} // 生成缩略图 $fit为真时将保持比例并在安全框 $width X $height 内生成缩略图片

 /*
 添加一个边框
 $width: 左右边框宽度
 $height: 上下边框宽度
 $color: 颜色: RGB 颜色 'rgb(255,0,0)' 或 16进制颜色 '#FF0000' 或颜色单词 'white'/'red'...
 */
 public function border($width, $height, $color='rgb(220, 220, 220)')
 {
  $color=new ImagickPixel();
  $color->setColor($color);
  $this->image->borderImage($color, $width, $height);
 }
 
 public function blur($radius, $sigma){$this->image->blurImage($radius, $sigma);} // 模糊
 public function gaussian_blur($radius, $sigma){$this->image->gaussianBlurImage($radius, $sigma);} // 高斯模糊
 public function motion_blur($radius, $sigma, $angle){$this->image->motionBlurImage($radius, $sigma, $angle);} // 运动模糊
 public function radial_blur($radius){$this->image->radialBlurImage($radius);} // 径向模糊

 public function add_noise($type=null){$this->image->addNoiseImage($type==null?imagick::NOISE_IMPULSE:$type);} // 添加噪点
 
 public function level($black_point, $gamma, $white_point){$this->image->levelImage($black_point, $gamma, $white_point);} // 调整色阶
 public function modulate($brightness, $saturation, $hue){$this->image->modulateImage($brightness, $saturation, $hue);} // 调整亮度、饱和度、色调

 public function charcoal($radius, $sigma){$this->image->charcoalImage($radius, $sigma);} // 素描
 public function oil_paint($radius){$this->image->oilPaintImage($radius);} // 油画效果
 
 public function flop(){$this->image->flopImage();} // 水平翻转
 public function flip(){$this->image->flipImage();} // 垂直翻转

}

在php中要实现图片增加水印我们要用到的函数有很多,imagecreatefromjpeg,imagecreatefrompng,getimagesize等等函数,这些都是属于php GD库的函数,所以我们必须在php.ini中打开GD库才可以让php使用这些函数生成图片水印了。

实现水印功能主要就是靠这些函数功能操作

1.imagecreatefromjpeg // 打开JPG图片 2.imagecreatefromgif    // 打开GIF图片
3.imagecreatefrompng // 打开PNG图片
4.imagecreatefromwbmp // 打开WBMP图片(比较少用)
5.getimagesize // 获取图片大小信息
6.imagecopymerge // 把多张图片整合(添加水印的主要函数)
7.imagejpeg // 保存JPG图片
8.imagegif    // 保存GIF图片
9.imagepng // 保存PNG图片

 代码如下 复制代码

<?php
 
echo img_water_mark("1.jpg","walter.gif",null,"2.jpg",5,80);
 
/**
 * 图片加水印(适用于png/jpg/gif格式)
 *
 * @author flynetcn
 *
 * @param $srcImg    原图片
 * @param $waterImg  水印图片
 * @param $savepath  保存路径
 * @param $savename  保存名字
 * @param $positon   水印位置
 *                   1:顶部居左, 2:顶部居右, 3:居中, 4:底部局左, 5:底部居右
 * @param $alpha     透明度 -- 0:完全透明, 100:完全不透明
 *
 * @return 成功 -- 加水印后的新图片地址
 *      失败 -- -1:原文件不存在, -2:水印图片不存在, -3:原文件图像对象建立失败
 *              -4:水印文件图像对象建立失败 -5:加水印后的新图片保存失败
 */
function img_water_mark($srcImg, $waterImg, $savepath=null, $savename=null, $positon=5, $alpha=30)
{
 $temp = pathinfo($srcImg);
 $name = $temp[basename];
 $path = $temp[dirname];
 $exte = $temp[extension];
 $savename = $savename ? $savename : $name;
 $savepath = $savepath ? $savepath : $path;
 $savefile = $savepath ."/". $savename;
 $srcinfo = @getimagesize($srcImg);
 if (!$srcinfo) {
  return -1;  //原文件不存在
 }
 $waterinfo = @getimagesize($waterImg);
 if (!$waterinfo) {
  return -2;  //水印图片不存在
 }
 $srcImgObj = image_create_from_ext($srcImg);
 if (!$srcImgObj) {
  return -3;  //原文件图像对象建立失败
 }
 $waterImgObj = image_create_from_ext($waterImg);
 if (!$waterImgObj) {
  return -4;  //水印文件图像对象建立失败
 }
 switch ($positon) {
 //1顶部居左
 case 1: $x=$y=0; break;
 //2顶部居右
 case 2: $x = $srcinfo[0]-$waterinfo[0]; $y = 0; break;
 //3居中
 case 3: $x = ($srcinfo[0]-$waterinfo[0])/2; $y = ($srcinfo[1]-$waterinfo[1])/2; break;
 //4底部居左
 case 4: $x = 0; $y = $srcinfo[1]-$waterinfo[1]; break;
 //5底部居右
 case 5: $x = $srcinfo[0]-$waterinfo[0]; $y = $srcinfo[1]-$waterinfo[1]; break;
 default: $x=$y=0;
 }
 imagecopymerge($srcImgObj, $waterImgObj, $x, $y, 0, 0, $waterinfo[0], $waterinfo[1], $alpha);
 switch ($srcinfo[2]) {
 case 1: imagegif($srcImgObj, $savefile); break;
 case 2: imagejpeg($srcImgObj, $savefile); break;
 case 3: imagepng($srcImgObj, $savefile); break;
 default: return -5;  //保存失败
 }
 imagedestroy($srcImgObj);
 imagedestroy($waterImgObj);
 return $savefile;
}
 
function image_create_from_ext($imgfile)
{
 $info = getimagesize($imgfile);
 $im = null;
 switch ($info[2]) {
 case 1: $im=imagecreatefromgif($imgfile); break;
 case 2: $im=imagecreatefromjpeg($imgfile); break;
 case 3: $im=imagecreatefrompng($imgfile); break;
 }
 return $im;
}

目前支持jpg、gif、png等图片格式。

用法举例:

 代码如下 复制代码

if($pic = watermark('./image.jpg','./watermark.png'))
{
    echo '<img src="' . $pic . '" border=0 />' ;
}
else
{
    echo '<img src="./image.jpg" border=0 />';
}

下面演示一个完整全水印增加函数

 代码如下 复制代码

<?php  
/************************************************************** 

参数说明:  
$max_file_size  : 上传文件大小限制, 单位BYTE  
$destination_folder : 上传文件路径  
$watermark   : 是否附加水印(1为加水印,其他为不加水印);  

使用说明:  
1. 将PHP.INI文件里面的"extension=php_gd2.dll"一行前面的;号去掉,因为我们要用到GD库;  
2. 将extension_dir =改为你的php_gd2.dll所在目录;  
**************************************************************/  

//上传文件类型列表  
$uptypes=array(  
   'image/jpg',  
   'image/jpeg',  
   'image/png',  
   'image/pjpeg',  
   'image/gif',  
   'image/bmp',  
   'image/x-png'  
);  

$max_file_size=2000000;     //上传文件大小限制, 单位BYTE  
$destination_folder="uploadimg/"; //上传文件路径  
$watermark=1;      //是否附加水印(1为加水印,其他为不加水印);  
$watertype=1;      //水印类型(1为文字,2为图片)  
$waterposition=1;     //水印位置(1为左下角,2为右下角,3为左上角,4为右上角,5为居中);  
$waterstring="http://www.111cn.net/";  //水印字符串  
$waterimg="xplore.gif";    //水印图片  
$imgpreview=1;      //是否生成预览图(1为生成,其他为不生成);  
$imgpreviewsize=1/1;    //缩略图比例  
?>  
<html>  
<head>  
<title>图片打水印程序演示!WWW.MOP8.COM</title>  
<style type="text/css">  
<!--  
body  
{  
    font-size: 9pt;  
}  
input  
{  
    background-color: #66CCFF;  
    border: 1px inset #CCCCCC;  
}  
-->  
</style>  
</head>  

<body>  
<center> 
<form enctype="multipart/form-data" method="post" name="upform">  
 上传文件:  
 <input name="upfile" type="file">  
 <input type="submit" value="上传"><P>  
 允许上传的文件类型为:<?=implode(', ',$uptypes)?>  
</form>  
<FONT COLOR="#FF0000">本演示空间由TuWoo提供,本程序采用文字水印的方式.</FONT></CENTER> 
<?php  
if ($_SERVER['REQUEST_METHOD'] == 'POST')  
{  
   if (!is_uploaded_file($_FILES["upfile"][tmp_name]))  
   //是否存在文件  
   {  
        echo "图片不存在!";  
        exit;  
   }  

   $file = $_FILES["upfile"];  
   if($max_file_size < $file["size"])  
   //检查文件大小  
   {  
       echo "文件太大!";  
       exit;  
   }  

   if(!in_array($file["type"], $uptypes))  
   //检查文件类型  
   {  
       echo "文件类型不符!".$file["type"];  
       exit;  
   }  

   if(!file_exists($destination_folder))  
   {  
       mkdir($destination_folder);  
   }  

   $filename=$file["tmp_name"];  
   $image_size = getimagesize($filename);  
   $pinfo=pathinfo($file["name"]);  
   $ftype=$pinfo['extension'];  
   $destination = $destination_folder.time().".".$ftype;  
   if (file_exists($destination) && $overwrite != true)  
   {  
       echo "同名文件已经存在了";  
       exit;  
   }  

   if(!move_uploaded_file ($filename, $destination))  
   {  
       echo "移动文件出错";  
       exit;  
   }  

   $pinfo=pathinfo($destination);  
   $fname=$pinfo[basename];  
   echo " <font color=red>已经成功上传</font><br>文件名:  <font color=blue>".$destination_folder.$fname."</font><br>";  
   echo " 宽度:".$image_size[0];  
   echo " 长度:".$image_size[1];  
   echo "<br> 大小:".$file["size"]." bytes";  

   if($watermark==1)  
   {  
       $iinfo=getimagesize($destination,$iinfo);  
       $nimage=imagecreatetruecolor($image_size[0],$image_size[1]);  
       $white=imagecolorallocate($nimage,255,255,255);  
       $black=imagecolorallocate($nimage,0,0,0);  
       $red=imagecolorallocate($nimage,255,0,0);  
       imagefill($nimage,0,0,$white);  
       switch ($iinfo[2])  
       {  
           case 1:  
           $simage =imagecreatefromgif($destination);  
           break;  
           case 2:  
           $simage =imagecreatefromjpeg($destination);  
           break;  
           case 3:  
           $simage =imagecreatefrompng($destination);  
           break;  
           case 6:  
           $simage =imagecreatefromwbmp($destination);  
           break;  
           default:  
           die("不支持的文件类型");  
           exit;  
       }  

       imagecopy($nimage,$simage,0,0,0,0,$image_size[0],$image_size[1]);  
       imagefilledrectangle($nimage,1,$image_size[1]-15,80,$image_size[1],$white);  

       switch($watertype)  
       {  
           case 1:   //加水印字符串  
           imagestring($nimage,2,3,$image_size[1]-15,$waterstring,$black);  
           break;  
           case 2:   //加水印图片  
           $simage1 =imagecreatefromgif("xplore.gif");  
           imagecopy($nimage,$simage1,0,0,0,0,85,15);  
           imagedestroy($simage1);  
           break;  
       }  

       switch ($iinfo[2])  
       {  
           case 1:  
           //imagegif($nimage, $destination);  
           imagejpeg($nimage, $destination);  
           break;  
           case 2:  
           imagejpeg($nimage, $destination);  
           break;  
           case 3:  
           imagepng($nimage, $destination);  
           break;  
           case 6:  
           imagewbmp($nimage, $destination);  
           //imagejpeg($nimage, $destination);  
           break;  
       }  

       //覆盖原上传文件  
       imagedestroy($nimage);  
       imagedestroy($simage);  
   }  

   if($imgpreview==1)  
   {  
   echo "<br>图片预览:<br>";  
   echo "<img src="".$destination."" width=".($image_size[0]*$imgpreviewsize)." height=".($image_size[1]*$imgpreviewsize);  
   echo " alt="图片预览:r文件名:".$destination."r上传时间:">";  
   }  
}  
?>  
</body>  
</html>

生成图形验证码需要使用php GD库来生成,如果你没开户GD库我们需要在php.ini文件找到extension=php_gd2.dll 去掉前面的;就行了,然后重启apache 或iis环境即可。

我们先来检查一下自己的php是不是打开了gd库。

 代码如下 复制代码

<?php
if(extension_loaded('gd')) {
  echo '你可以使用gd<br>';
  foreach(gd_info() as $cate=>$value)
    echo "$cate: $value<br>";
}else
  echo '你没有安装gd扩展';
?>

如果有返回信息就正确可以常用使用了


例1

 代码如下 复制代码

<?php
/**
 * vCode(m,n,x,y) m个数字  显示大小为n   边宽x   边高y
 * 自己改写记录session $code
 */
session_start();
vCode(4, 15); //4个数字,显示大小为15

function vCode($num = 4, $size = 20, $width = 0, $height = 0) {
 !$width && $width = $num * $size * 4 / 5 + 5;
 !$height && $height = $size + 10;
 // 去掉了 0 1 O l 等
 $str = "23456789abcdefghijkmnpqrstuvwxyzABCDEFGHIJKLMNPQRSTUVW";
 $code = '';
 for ($i = 0; $i < $num; $i++) {
  $code .= $str[mt_rand(0, strlen($str)-1)];
 }
 // 画图像
 $im = imagecreatetruecolor($width, $height);
 // 定义要用到的颜色
 $back_color = imagecolorallocate($im, 235, 236, 237);
 $boer_color = imagecolorallocate($im, 118, 151, 199);
 $text_color = imagecolorallocate($im, mt_rand(0, 200), mt_rand(0, 120), mt_rand(0, 120));
 // 画背景
 imagefilledrectangle($im, 0, 0, $width, $height, $back_color);
 // 画边框
 imagerectangle($im, 0, 0, $width-1, $height-1, $boer_color);
 // 画干扰线
 for($i = 0;$i < 5;$i++) {
  $font_color = imagecolorallocate($im, mt_rand(0, 255), mt_rand(0, 255), mt_rand(0, 255));
  imagearc($im, mt_rand(- $width, $width), mt_rand(- $height, $height), mt_rand(30, $width * 2), mt_rand(20, $height * 2), mt_rand(0, 360), mt_rand(0, 360), $font_color);
 }
 // 画干扰点
 for($i = 0;$i < 50;$i++) {
  $font_color = imagecolorallocate($im, mt_rand(0, 255), mt_rand(0, 255), mt_rand(0, 255));
  imagesetpixel($im, mt_rand(0, $width), mt_rand(0, $height), $font_color);
 }
 // 画验证码
 @imagefttext($im, $size , 0, 5, $size + 3, $text_color, 'c:\WINDOWS\Fonts\simsun.ttc', $code);
 $_SESSION["VerifyCode"]=$code;
 header("Cache-Control: max-age=1, s-maxage=1, no-cache, must-revalidate");
 header("Content-type: image/png;charset=gb2312");
 imagepng($im);
 imagedestroy($im);
}

?>

例2

使用PHP,结合session和GD库扩展开发的一个生成验证码的例子(w3c推荐),可以很方便的用于项目中。而且样式美观//首先开启session
session_start();
//定义前台显示验证码长&宽
$image_width = 120;
$image_height = 40;
$characters_on_image = 6;
$font = './monofont.ttf';
 
//The characters that can be used in the CAPTCHA code.
//avoid confusing characters (l 1 and i for example)
$possible_letters = '23456789bcdfghjkmnpqrstvwxyz';
$random_dots = 10;
$random_lines = 30;
$captcha_text_color="0x142864";
$captcha_noice_color = "0x142864";
//定义要生成验证码的字符串
$code = '';
 
$i = 0;
while ($i < $characters_on_image) {
$code .= substr($possible_letters, mt_rand(0, strlen($possible_letters)-1), 1);
$i++;
}
 
$font_size = $image_height * 0.75;
$image = @imagecreate($image_width, $image_height);
 
/* setting the background, text and noise colours here */
$background_color = imagecolorallocate($image, 255, 255, 255);
 
$arr_text_color = hexrgb($captcha_text_color);
$text_color = imagecolorallocate($image, $arr_text_color['red'],
        $arr_text_color['green'], $arr_text_color['blue']);
 
$arr_noice_color = hexrgb($captcha_noice_color);
$image_noise_color = imagecolorallocate($image, $arr_noice_color['red'],
        $arr_noice_color['green'], $arr_noice_color['blue']);
 
/* generating the dots randomly in background */
for( $i=0; $i<$random_dots; $i++ ) {
imagefilledellipse($image, mt_rand(0,$image_width),
 mt_rand(0,$image_height), 2, 3, $image_noise_color);
}
 
/* generating lines randomly in background of image */
for( $i=0; $i<$random_lines; $i++ ) {
imageline($image, mt_rand(0,$image_width), mt_rand(0,$image_height),
 mt_rand(0,$image_width), mt_rand(0,$image_height), $image_noise_color);
}
 
/* create a text box and add 6 letters code in it */
$textbox = imagettfbbox($font_size, 0, $font, $code);
$x = ($image_width - $textbox[4])/2;
$y = ($image_height - $textbox[5])/2;
imagettftext($image, $font_size, 0, $x, $y, $text_color, $font , $code);
 
/* Show captcha image in the page html page */
header('Content-Type: image/jpeg');// defining the image type to be shown in browser widow
imagejpeg($image);//showing the image
imagedestroy($image);//destroying the image instance
//设置session,做验证
$_SESSION['6_letters_code'] = $code;
 
function hexrgb ($hexstr)
{
  $int = hexdec($hexstr);
 
  return array("red" => 0xFF & ($int >> 0x10),
               "green" => 0xFF & ($int >> 0x8),
               "blue" => 0xFF & $int);
}

个人推荐推荐第二个生成验证码程序代码,各位同学可尝试参考对比哦,最后一个是W3C标准生成的也是利用了php gd库。

本文章来给各同学总结了一些常用的图像处理函数,包括有缩放、剪裁、缩放、翻转、旋转、透明、锐化功能,大家可参考参考。


注意事项:如果要使用php gd处理我们需要开启gd库


Windows下开启PHP的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


一、创建图片资源

imagecreatetruecolor(width,height);

imagecreatefromgif(图片名称);

imagecreatefrompng(图片名称);

imagecreatefromjpeg(图片名称);

画出各种图像

imagegif(图片资源,保存路径);

imagepng()

imagejpeg();


二、获取图片属性

imagesx(res//宽度

imagesy(res//高度

getimagesize(文件路径)

返回一个具有四个单元的数组。索引 0 包含图像宽度的像素值,索引 1 包含图像高度的像素值。索引 2 是图像类型的标记:1 = GIF,2 = JPG,3 = PNG,4 = SWF,5 = PSD,6 = BMP,7 = TIFF(intel byte order),8 = TIFF(motorola byte order),9 = JPC,10 = JP2,11 = JPX,12 = JB2,13 = SWC,14 = IFF,15 = WBMP,16 = XBM。这些标记与 PHP 4.3.0 新加的 IMAGETYPE 常量对应。索引 3 是文本字符串,内容为“height="yyy" width="xxx"”,可直接用于 IMG 标记。销毁图像资源

imagedestroy(图片资源);


三、透明处理

PNG、jpeg透明色都正常,只有gif不正常

imagecolortransparent(resource image [,int color])//将某个颜色设置成透明色

imagecolorstotal()

imagecolorforindex();

四、图片的裁剪

imagecopyresized()

imagecopyresampled();


五、加水印(文字、图片)

字符串编码转换string iconv ( string $in_charset , string $out_charset , string $str )


六、图片旋转

imagerotate();//制定角度的图片翻转


七、图片的翻转

沿X轴   沿Y轴翻转

八、锐化

imagecolorsforindex()

imagecolorat()

在图片上画图形
 $img=imagecreatefromgif("./images/map.gif");
 $red= imagecolorallocate($img, 255, 0, 0);

 imageline($img, 0, 0, 100, 100, $red);

 imageellipse($img, 200, 100, 100, 100, $red);

 imagegif($img, "./images/map2.gif");

 imagedestroy($img);图片普通缩放

$filename="./images/hee.jpg";

 $per=0.3;

 list($width, $height)=getimagesize($filename);

 $n_w=$width*$per;
 $n_h=$width*$per;

 $new=imagecreatetruecolor($n_w, $n_h);

 $img=imagecreatefromjpeg($filename);
//拷贝部分图像并调整

 imagecopyresized($new, $img,0, 0,0, 0,$n_w, $n_h, $width, $height);
//图像输出新图片、另存为

 imagejpeg($new, "./images/hee2.jpg");

 imagedestroy($new);
 imagedestroy($img);图片等比例缩放、没处理透明色

function thumn($background, $width, $height, $newfile) {
 list($s_w, $s_h)=getimagesize($background);//获取原图片高度、宽度

 if ($width && ($s_w < $s_h)) {
     $width = ($height / $s_h) * $s_w;
 } else {
     $height = ($width / $s_w) * $s_h;
 }

 $new=imagecreatetruecolor($width, $height);

 $img=imagecreatefromjpeg($background);

 imagecopyresampled($new, $img, 0, 0, 0, 0, $width, $height, $s_w, $s_h);

 imagejpeg($new, $newfile);

 imagedestroy($new);
 imagedestroy($img);
}

thumn("images/hee.jpg", 200, 200, "./images/hee3.jpg");gif透明色处理

function thumn($background, $width, $height, $newfile) {
 list($s_w, $s_h)=getimagesize($background);

 if ($width && ($s_w < $s_h)) {
     $width = ($height / $s_h) * $s_w;
 } else {
     $height = ($width / $s_w) * $s_h;
 }

 $new=imagecreatetruecolor($width, $height);

 $img=imagecreatefromgif($background);

 $otsc=imagecolortransparent($img);
 if($otsc >=0 && $otst < imagecolorstotal($img)){//判断索引色
  $tran=imagecolorsforindex($img, $otsc);//索引颜色值

  $newt=imagecolorallocate($new, $tran["red"], $tran["green"], $tran["blue"]);

  imagefill($new, 0, 0, $newt);

  imagecolortransparent($new, $newt);
 }

 imagecopyresized($new, $img, 0, 0, 0, 0, $width, $height, $s_w, $s_h);

 imagegif($new, $newfile);

 imagedestroy($new);
 imagedestroy($img);
}

thumn("images/map.gif", 200, 200, "./images/map3.gif");图片裁剪

function cut($background, $cut_x, $cut_y, $cut_width, $cut_height, $location){

 $back=imagecreatefromjpeg($background);

 $new=imagecreatetruecolor($cut_width, $cut_height);

 imagecopyresampled($new, $back, 0, 0, $cut_x, $cut_y, $cut_width, $cut_height,$cut_width,$cut_height);

 imagejpeg($new, $location);

 imagedestroy($new);
 imagedestroy($back);
}

cut("./images/hee.jpg", 440, 140, 117, 112, "./images/hee5.jpg");图片加水印

文字水印

function mark_text($background, $text, $x, $y){
  $back=imagecreatefromjpeg($background);

  $color=imagecolorallocate($back, 0, 255, 0);

  imagettftext($back, 20, 0, $x, $y, $color, "simkai.ttf", $text);

  imagejpeg($back, "./images/hee7.jpg");

  imagedestroy($back);
 }

 mark_text("./images/hee.jpg", "细说PHP", 150, 250);

//图片水印
function mark_pic($background, $waterpic, $x, $y){
$back=imagecreatefromjpeg($background);
$water=imagecreatefromgif($waterpic);
$w_w=imagesx($water);
$w_h=imagesy($water);
imagecopy($back, $water, $x, $y, 0, 0, $w_w, $w_h);
imagejpeg($back,"./images/hee8.jpg");
imagedestroy($back);
imagedestroy($water);
}
mark_pic("./images/hee.jpg", "./images/gaolf.gif", 50, 200);图片旋转

$back=imagecreatefromjpeg("./images/hee.jpg");

 $new=imagerotate($back, 45, 0);

 imagejpeg($new, "./images/hee9.jpg");图片水平翻转垂直翻转

function turn_y($background, $newfile){
  $back=imagecreatefromjpeg($background);

  $width=imagesx($back);
  $height=imagesy($back);

  $new=imagecreatetruecolor($width, $height);

  for($x=0; $x < $width; $x++){
   imagecopy($new, $back, $width-$x-1, 0, $x, 0, 1, $height);
  }

  imagejpeg($new, $newfile);

  imagedestroy($back);
  imagedestroy($new);
 }

 function turn_x($background, $newfile){
  $back=imagecreatefromjpeg($background);

  $width=imagesx($back);
  $height=imagesy($back);

  $new=imagecreatetruecolor($width, $height);

  for($y=0; $y < $height; $y++){
   imagecopy($new, $back,0, $height-$y-1, 0, $y, $width, 1);
  }

  imagejpeg($new, $newfile);

  imagedestroy($back);
  imagedestroy($new);
 }

 turn_y("./images/hee.jpg", "./images/hee11.jpg");
 turn_x("./images/hee.jpg", "./images/hee12.jpg"); 图片锐化

function sharp($background, $degree, $save){
 $back=imagecreatefromjpeg($background);

 $b_x=imagesx($back);
 $b_y=imagesy($back);

 $dst=imagecreatefromjpeg($background);
 for($i=0; $i<$b_x; $i++){
  for($j=0; $j<$b_y; $j++){
   $b_clr1=imagecolorsforindex($back, imagecolorat($back, $i-1, $j-1));\前一个像素颜色数组
   $b_clr2=imagecolorsforindex($back, imagecolorat($back, $i, $j));\取出当前颜色数组

   $r=intval($b_clr2["red"]+$degree*($b_clr2["red"]-$b_clr1["red"]));\加深
   $g=intval($b_clr2["green"]+$degree*($b_clr2["green"]-$b_clr1["green"]));
   $b=intval($b_clr2["blue"]+$degree*($b_clr2["blue"]-$b_clr1["blue"]));

   $r=min(255, max($r, 0));//限制r范围在0-255之间
   $g=min(255, max($g, 0));
   $b=min(255, max($b, 0));

   if(($d_clr=imagecolorexact($dst, $r, $g, $b))==-1){//等于1不在颜色范围内
    $d_clr=Imagecolorallocate($dst, $r, $g, $b);//创建一个颜色
   }

   imagesetpixel($dst, $i, $j, $d_clr);
  }

 }
 imagejpeg($dst, $save);
 imagedestroy($back);
 imagedestroy($dst);
}

sharp("./images/hee.jpg", 20, "./images/hee13.jpg");十月 26th, 2011No comments yet真诚待 php设计实现和应用验证码类
validationcode.class.php

/* 开发一个验证码类
 *
 * 1. 什么是验证码
 *
 * 2. 验证码的作用
 *
 * 3. 编写验证码类(PHP图像处理)
 *
 * 4. 使用验证码
 *
 *
 */<?php
 class ValidationCode {
  private $width;
  private $height;
  private $codeNum;
  private $image;   //图像资源
  private $disturbColorNum;
  private $checkCode;

  function __construct($width=80, $height=20, $codeNum=4){
   $this->width=$width;
   $this->height=$height;
   $this->codeNum=$codeNum;
   $this->checkCode=$this->createCheckCode();
   $number=floor($width*$height/15);

   if($number > 240-$codeNum){
    $this->disturbColorNum= 240-$codeNum;
   }else{
    $this->disturbColorNum=$number;
   }

  }
  //通过访问该方法向浏览器中输出图像
  function showImage($fontFace=""){
   //第一步:创建图像背景
   $this->createImage();
   //第二步:设置干扰元素
   $this->setDisturbColor();
   //第三步:向图像中随机画出文本
   $this->outputText($fontFace);
   //第四步:输出图像
   $this->outputImage();
  }

  //通过调用该方法获取随机创建的验证码字符串
  function getCheckCode(){
   return $this->checkCode;
  }

  private function createImage(){
   //创建图像资源
   $this->image=imagecreatetruecolor($this->width, $this->height);
   //随机背景色
   $backColor=imagecolorallocate($this->image, rand(225, 255), rand(225,255), rand(225, 255));
   //为背景添充颜色
   imagefill($this->image, 0, 0, $backColor);
   //设置边框颜色
   $border=imagecolorallocate($this->image, 0, 0, 0);
   //画出矩形边框
   imagerectangle($this->image, 0, 0, $this->width-1, $this->height-1, $border);
  }

  private function  setDisturbColor(){
   for($i=0; $i<$this->disturbColorNum; $i++){
    $color=imagecolorallocate($this->image, rand(0, 255), rand(0, 255), rand(0, 255));
    imagesetpixel($this->image, rand(1, $this->width-2), rand(1, $this->height-2), $color);
   }

   for($i=0; $i<10; $i++){
    $color=imagecolorallocate($this->image, rand(200, 255), rand(200, 255), rand(200, 255));
    imagearc($this->image, rand(-10, $this->width), rand(-10, $this->height), rand(30, 300), rand(20, 200), 55, 44, $color);
   }
  }

  private function createCheckCode(){
   $code="23456789abcdefghijkmnpqrstuvwxyzABCDEFGHIJKMNPQRSTUVWXYZ";
   $string='';
   for($i=0; $i < $this->codeNum; $i++){
    $char=$code{rand(0, strlen($code)-1)};
    $string.=$char;
   }

   return $string;
  }

  private function outputText($fontFace=""){
   for($i=0; $i<$this->codeNum; $i++){
    $fontcolor=imagecolorallocate($this->image, rand(0, 128), rand(0, 128), rand(0, 128));
    if($fontFace==""){
     $fontsize=rand(3, 5);
     $x=floor($this->width/$this->codeNum)*$i+3;
     $y=rand(0, $this->height-15);
     imagechar($this->image,$fontsize, $x, $y, $this->checkCode{$i},$fontcolor);
    }else{
     $fontsize=rand(12, 16);
     $x=floor(($this->width-8)/$this->codeNum)*$i+8;
     $y=rand($fontSize+5, $this->height);
     imagettftext($this->image,$fontsize,rand(-30, 30),$x,$y ,$fontcolor, $fontFace, $this->checkCode{$i});
    }
   }
  }

  private function outputImage() {
   if(imagetypes() & IMG_GIF){
    header("Content-Type:image/gif");
    imagepng($this->image);
   }else if(imagetypes() & IMG_JPG){
    header("Content-Type:image/jpeg");
    imagepng($this->image);
   }else if(imagetypes() & IMG_PNG){
    header("Content-Type:image/png");
    imagepng($this->image);
   }else if(imagetypes() & IMG_WBMP){
    header("Content-Type:image/vnd.wap.wbmp");
    imagepng($this->image);
   }else{
    die("PHP不支持图像创建");
   }
  }

  function __destruct(){
   imagedestroy($this->image);
  }
 }code.php

<?php
 session_start();
 include "validationcode.class.php";

 $code=new ValidationCode(80, 20, 4);

 $code->showImage();   //输出到页面中供 注册或登录使用

 $_SESSION["code"]=$code->getCheckCode();  //将验证码保存到服务器中demo.php

<?php
 session_start();
 echo $_POST["code"]."<br>";
 echo $_SESSION["code"]."<br>";

 if(strtoupper($_POST["code"])==strtoupper($_SESSION["code"])){
  echo "ok";
 }else{
  echo "error";
 }
?>
<body>
 <form action="login.php" method="post">
  user:<input type="text" name="usenrame"><br>
  pass:<input type="passowrd" name="pass"><br>

  code: <input type="text" name="code" onkeyup="if(this.value!=this.value.toUpperCase()) this.value=this.value.toUpperCase()"> <img src="code.php" onclick="this.src='code.php?'+Math.random()"><br>

  <input type="submit" name="sub" value="login"><br>
 </form>
</body>


1、画图

验证码,统计图

安装GD库(图片处理库)

■创建一个画布—-创建资源类型——–高度、宽度
■绘制图像
1、制定各种颜色
2、矩形、园、点、线段、扇形、画字(字符、字符串、freetype字体),每一个图像对应一个函数

■输出图像/保存处理好的图像
1、输出各种类型(gif、png、jpeg)

imagegif();
imagepng();
imagegpeg();

■释放资源
<?php
//step 1创建图片资源
$img=imagecreatetruecolor(200,200);
$red=imagecolorallocate($img,255,0,0);
$yellow=imagecolorallocate($img,255,255,0);
$green=imagecolorallocate($img,0,255,0);
$blue=imagecolorallocate($img,0,0,255);
imagefill($img,0,0,$yellow);//颜色填充
//step2画各种图形
imagefilledrectangle($img,10,10,80,80,$red);//画矩形并填充
imagerectangle($img,10,10,80,80,$red));//画矩形不填充,颜色填充

//线段
 imageline($img,0, 0, 200, 200 ,$blue);
 imageline($img,200, 0, 0, 200, $blue);

 //点
 imagesetpixel($img,50, 50 ,$red);
 imagesetpixel($img,55, 50 ,$red);
 imagesetpixel($img,59, 50 ,$red);
 imagesetpixel($img,64, 50 ,$red);
 imagesetpixel($img,72, 50 ,$red);

 //圆
 imageellipse($img, 100, 100, 100, 100,$green);
 //圆
 imagefilledellipse($img, 100, 100, 10, 10,$blue);
边框
//输出图像或保存图像
header("Content-Type:img/gif");
imagegif($img);
//释放资源
imagedestory($img);

画饼状图

//step 1创建图片资源
 $img=imagecreatetruecolor(200, 200);

// $img=imagecreate(200, 200);

 $white=imagecolorallocate($img, 255, 255, 255);
 $gray=imagecolorallocate($img, 0xC0, 0xC0, 0xC0);
 $darkgray=imagecolorallocate($img, 0x90, 0x90, 0x90);
 $navy=imagecolorallocate($img, 0, 0, 0x80);
 $darknavy=imagecolorallocate($img, 0, 0, 0x50);
 $red= imagecolorallocate($img, 0xFF, 0, 0);
 $darkred=imagecolorallocate($img, 0x90, 0, 0);

 imagefill($img, 0, 0, $white);

 //3D效果
 for($i=60; $i>50; $i--){
  imagefilledarc($img, 50, $i,100, 50, -160, 40, $darkgray, IMG_ARC_PIE);
  imagefilledarc($img, 50, $i,100, 50, 40, 75, $darknavy, IMG_ARC_PIE);
  imagefilledarc($img, 50, $i,100, 50, 75, 200, $darkred, IMG_ARC_PIE);
 }
  imagefilledarc($img, 50, $i,100, 50, -160, 40, $gray, IMG_ARC_PIE);
  imagefilledarc($img, 50, $i,100, 50, 40, 75, $navy, IMG_ARC_PIE);
  imagefilledarc($img, 50, $i,100, 50, 75, 200, $red, IMG_ARC_PIE);

 header("Content-Type:image/gif");
 imagegif($img);

 //释放资源
 imagedestroy($img);画文字

<?php

 //step 1创建图片资源
 $img=imagecreatetruecolor(200, 200);

// $img=imagecreate(200, 200);

 $white=imagecolorallocate($img, 255, 255, 255);
 $gray=imagecolorallocate($img, 0xC0, 0xC0, 0xC0);
 $darkgray=imagecolorallocate($img, 0x90, 0x90, 0x90);
 $navy=imagecolorallocate($img, 0, 0, 0x80);
 $darknavy=imagecolorallocate($img, 0, 0, 0x50);
 $red= imagecolorallocate($img, 0xFF, 0, 0);
 $darkred=imagecolorallocate($img, 0x90, 0, 0);

 imagefill($img, 0, 0, $gray);

 imagechar($img, 5, 100, 100, "A", $red);
 imagechar($img, 5, 120, 120, "B", $red);
 imagecharup($img, 5, 60, 60, "C", $red);
 imagecharup($img, 5, 80, 80, "D", $red);

 imagestring($img, 3, 10, 10, "Hello", $navy);
 imagestringup($img, 3, 10, 80, "Hello", $navy);

 imagettftext($img, 25, 60, 150, 150, $red, "simkai.ttf", "##");
 imagettftext($img, 12, -60, 50, 150, $red, "simli.ttf", "##");

 header("Content-Type:image/gif");
 imagegif($img);

 //释放资源
 imagedestroy($img);2、处理原有的图像

[!--infotagslink--]

相关文章

  • 使用PHP+JavaScript将HTML页面转换为图片的实例分享

    这篇文章主要介绍了使用PHP+JavaScript将HTML元素转换为图片的实例分享,文后结果的截图只能体现出替换的字体,也不能说将静态页面转为图片可以加快加载,只是这种做法比较interesting XD需要的朋友可以参考下...2016-04-19
  • C#从数据库读取图片并保存的两种方法

    这篇文章主要介绍了C#从数据库读取图片并保存的方法,帮助大家更好的理解和使用c#,感兴趣的朋友可以了解下...2021-01-16
  • Python 图片转数组,二进制互转操作

    这篇文章主要介绍了Python 图片转数组,二进制互转操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-09
  • Photoshop古装美女图片转为工笔画效果制作教程

    今天小编在这里就来给各位Photoshop的这一款软件的使用者们来说说把古装美女图片转为细腻的工笔画效果的制作教程,各位想知道方法的使用者们,那么下面就快来跟着小编一...2016-09-14
  • php抓取网站图片并保存的实现方法

    php如何实现抓取网页图片,相较于手动的粘贴复制,使用小程序要方便快捷多了,喜欢编程的人总会喜欢制作一些简单有用的小软件,最近就参考了网上一个php抓取图片代码,封装了一个php远程抓取图片的类,测试了一下,效果还不错分享...2015-10-30
  • jquery左右滚动焦点图banner图片鼠标经过显示上下页按钮

    jquery左右滚动焦点图banner图片鼠标经过显示上下页按钮...2013-10-13
  • 利用JS实现点击按钮后图片自动切换的简单方法

    下面小编就为大家带来一篇利用JS实现点击按钮后图片自动切换的简单方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2016-10-25
  • Photoshop枪战电影海报图片制作教程

    Photoshop的这一款软件小编相信很多的人都已经是使用过了吧,那么今天小编在这里就给大家带来了用Photoshop软件制作枪战电影海报的教程,想知道制作步骤的玩家们,那么下面...2016-09-14
  • python opencv通过4坐标剪裁图片

    图片剪裁是常用的方法,那么如何通过4坐标剪裁图片,本文就详细的来介绍一下,感兴趣的小伙伴们可以参考一下...2021-06-04
  • js实现上传图片及时预览

    这篇文章主要为大家详细介绍了js实现上传图片及时预览的相关资料,具有一定的参考价值,感兴趣的朋友可以参考一下...2016-05-09
  • 使用PHP下载CSS文件中的图片的代码

    共享一段使用PHP下载CSS文件中的图片的代码 复制代码 代码如下: <?php //note 设置PHP超时时间 set_time_limit(0); //note 取得样式文件内容 $styleFileContent = file_get_contents('images/style.css'); //not...2013-10-04
  • PHP swfupload图片上传的实例代码

    PHP代码如下:复制代码 代码如下:if (isset($_FILES["Filedata"]) || !is_uploaded_file($_FILES["Filedata"]["tmp_name"]) || $_FILES["Filedata"]["error"] != 0) { $upload_file = $_FILES['Filedata']; $fil...2013-10-04
  • C#中图片旋转和翻转(RotateFlipType)用法分析

    这篇文章主要介绍了C#中图片旋转和翻转(RotateFlipType)用法,实例分析了C#图片旋转及翻转Image.RotateFlip方法属性的常用设置技巧,需要的朋友可以参考下...2020-06-25
  • 微信小程序如何获取图片宽度与高度

    这篇文章主要给大家介绍了关于微信小程序如何获取图片宽度与高度的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-03-10
  • ps怎么制作图片阴影效果

    ps软件是现在很多人比较喜欢的,有着非常不错的使用效果,这次文章就给大家介绍下ps怎么制作图片阴影效果,还不知道制作方法的赶紧来看看。 ps图片阴影效果怎么做方法/...2017-07-06
  • OpenCV如何去除图片中的阴影的实现

    这篇文章主要介绍了OpenCV如何去除图片中的阴影的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-03-29
  • C#将图片和字节流互相转换并显示到页面上

    本文主要介绍用C#实现图片转换成字节流,字节流转换成图片,并根据图片路径返回图片的字节流,有需要的朋友可以参考下...2020-06-25
  • JavaScript 如何禁止用户保存图片

    这篇文章主要介绍了JavaScript 如何禁止用户保存图片,帮助大家完成需求,更好的理解和使用JavaScript,感兴趣的朋友可以了解下...2020-11-19
  • php上传图片学习笔记与心得

    我们在php中上传文件就必须使用#_FILE变量了,这个自动全局变量 $_FILES 从 PHP 4.1.0 版本开始被支持。在这之前,从 4.0.0 版本开始,PHP 支持 $HTTP_POST_FILES 数组。这...2016-11-25
  • SwiftUI图片缩放、拼图等处理教程

    SwiftUI是一种使用Swift语言在苹果设备上构建用户界面的创新且简单的方式,下面这篇文章主要给大家介绍了关于SwiftUI图片缩放、拼图等处理的相关资料,需要的朋友可以参考下...2021-08-23