首页 > 编程知识 正文

php图片文字证书生成,php图片文字识别源码

时间:2023-12-27 01:51:13 阅读:323051 作者:RIGS

本文目录一览:

php 如何把文字转成图片显示(象验证码那样)

需要安装PHP GD2库. 基本要用到以下几个函数

//设置一个图片文件名字

$png_name = time() . '.png';

//画一个200*50的方框的图片

$img = imagecreate(200, 50); 

//设置背景颜色(白色)

$bg_color = imagecolorallocate($img, 255, 255, 255); 

//设置字体颜色(黑色)

$txt_color = imagecolorallocate($img, 0, 0, 0); 

//给图片添上背景颜色

imagefilledrectangle($img, 0, 0, 200, 50, $bg_color); 

//取一个字符,然后画在方块中,其中:

21 是字体大小

$deg 是字体偏斜角度(0-360°)

$x 是横坐标(在图片中,这里是0-200)

$y 是纵坐标(在图片中,这里是0-50)

$txt_color 是字体颜色

captcha.ttf 是字体库

$letter 是要写入的字符

imagefttext($img, 21, $deg, $x, $y, $txt_color, 'captcha.ttf', $letter);

//在图片中画一个点,用以干扰,所以坐标是随机的

imagesetpixel($img, rand()%200, rand()%50, $txt_color);

//在图片中画一条线,同样用以干扰,坐标随机(两组rand()确定了线段的起点和终点)

imageline($img, rand()%200, rand()%50, rand()%200, rand()%50, $bg_color);

//将$img输出为文件.

imagepng($img, $png_name);

PHP图片生成

给你一个php 图像处理类,完全能实现你的功能,你自己研究一下吧

?php

class image

{

var $w_pct = 50; //透明度

var $w_quality = 80; //质量

var $w_minwidth = 300; //最小宽

var $w_minheight = 300; //最小高

var $thumb_enable; //是否生成缩略图

var $watermark_enable; //是否生水印

var $interlace = 0; //图像是否为隔行扫描的

var $fontfile; //字体文件

var $w_img ; //默认水印图

function __construct()

{

global $SITE_CONFING;

$this-thumb_enable = $SITE_CONFING['thumb_enable'];

$this-watermark_enable = $SITE_CONFING['watermark_enable'];

$this-set($SITE_CONFING['watermark_minwidth'], $SITE_CONFING['watermark_minheight'], $SITE_CONFING['watermark_quality'], $SITE_CONFING['watermark_pct'], $SITE_CONFING['watermark_fontfile'],$SITE_CONFING['watermark_img']);

}

function image()

{

$this-__construct();

}

function set($w_minwidth = 300, $w_minheight = 300, $w_quality = 80, $w_pct = 100,$fontfile,$w_img)

{

$this-w_minwidth = $w_minwidth;

$this-w_minheight = $w_minheight;

$this-w_quality = $w_quality;

$this-w_pct = $w_pct;

$this-fontfile = $fontfile;

$this-w_img = $w_img;

}

function info($img)

{

$imageinfo = getimagesize($img); //返回图像信息数组 0=宽的像素 1=高的像素 2=是图像类型的标记 3 =是文本字符串,内容为“height="yyy" width="xxx"”,

if($imageinfo === false) return false;

$imagetype = strtolower(substr(image_type_to_extension($imageinfo[2]),1)); //获取图像文件类型 $imageinfo[2]是图像类型的标记

$imagesize = filesize($img); //图像大小

$info = array(

'width'=$imageinfo[0],

'height'=$imageinfo[1],

'type'=$imagetype,

'size'=$imagesize,

'mime'=$imageinfo['mime']

);

return $info;

}

function thumb($image, $filename = '', $maxwidth = 200, $maxheight = 50, $suffix='_thumb', $autocut = 0)

{

if(!$this-thumb_enable || !$this-check($image)) return false;

$info = $this-info($image); //获取图片信息

if($info === false) return false;

$srcwidth = $info['width']; //源图宽

$srcheight = $info['height']; //源图高

$pathinfo = pathinfo($image);

$type = $pathinfo['extension']; //取得扩展名

if(!$type) $type = $info['type']; //如果没有取到,用$info['type']

$type = strtolower($type);

unset($info);

$scale = min($maxwidth/$srcwidth, $maxheight/$srcheight); //获取缩略比例

//获取按照源图的比列

$createwidth = $width = (int)($srcwidth*$scale); //取得缩略宽

$createheight = $height = (int)($srcheight*$scale); //取得缩略高

$psrc_x = $psrc_y = 0;

if($autocut) //按照缩略图的比例来获取

{

if($maxwidth/$maxheight$srcwidth/$srcheight $maxheight=$height) //如果缩略图按比列比源图窄的话

{

$width = $maxheight/$height*$width; //宽按照相应比例做处理

$height = $maxheight; //高不变

}

elseif($maxwidth/$maxheight$srcwidth/$srcheight $maxwidth=$width)//如果缩略图按比列比源图宽的话

{

$height = $maxwidth/$width*$height;

$width = $maxwidth;

}

$createwidth = $maxwidth;

$createheight = $maxheight;

}

$createfun = 'imagecreatefrom'.($type=='jpg' ? 'jpeg' : $type); //找到不同的图像处理函数

$srcimg = $createfun($image); //新建图像

if($type != 'gif' function_exists('imagecreatetruecolor'))

$thumbimg = imagecreatetruecolor($createwidth, $createheight); //新建一个真彩色图像

else

$thumbimg = imagecreate($width, $height); //新建一个基于调色板的图像

if(function_exists('imagecopyresampled')) //重采样拷贝部分图像并调整大小,真彩

//imagecopyresampled(新图,源图,新图左上角x距离,新图左上角y距离,源图左上角x距离,源图左上角y距离,新图宽,新图高,源图宽,源图高)

imagecopyresampled($thumbimg, $srcimg, 0, 0, $psrc_x, $psrc_y, $width, $height, $srcwidth, $srcheight);

else //拷贝部分图像并调整大小,调色板

imagecopyresized($thumbimg, $srcimg, 0, 0, $psrc_x, $psrc_y, $width, $height, $srcwidth, $srcheight);

if($type=='gif' || $type=='png')

{

//imagecolorallocate 为一幅图像分配颜色

$background_color = imagecolorallocate($thumbimg, 0, 255, 0); // 给基于调色板的图像填充背景色, 指派一个绿色

// imagecolortransparent 将某个颜色定义为透明色

imagecolortransparent($thumbimg, $background_color); // 设置为透明色,若注释掉该行则输出绿色的图

}

// imageinterlace 激活或禁止隔行扫描

if($type=='jpg' || $type=='jpeg') imageinterlace($thumbimg, $this-interlace);

$imagefun = 'image'.($type=='jpg' ? 'jpeg' : $type);

//imagejpeg imagegif imagepng

if(empty($filename)) $filename = substr($image, 0, strrpos($image, '.')).$suffix.'.'.$type; //获取文件名

//aaa.gif aaa_thumb.gif

$imagefun($thumbimg, $filename); //新建图像

imagedestroy($thumbimg); //销毁缩略图

imagedestroy($srcimg); //销毁源图

return $filename;

}

//watermark(源图,生成文件,生成位置,水印文件,水印文本,背景色)

function watermark($source, $target = '', $w_pos = 0, $w_img = '', $w_text = '', $w_font = 12, $w_color = '#cccccc')

{

if(!$this-watermark_enable || !$this-check($source)) return false;

if(!$target) $target = $source;

if ($w_img == '' $w_text == '')

$w_img = $this-w_img;

$source_info = getimagesize($source);

$source_w = $source_info[0]; //获取宽

$source_h = $source_info[1]; //获取高

if($source_w $this-w_minwidth || $source_h $this-w_minheight) return false; //宽和高达不到要求直接返回

switch($source_info[2]) //新建图片

{

case 1 :

$source_img = imagecreatefromgif($source);

break;

case 2 :

$source_img = imagecreatefromjpeg($source);

break;

case 3 :

$source_img = imagecreatefrompng($source);

break;

default :

return false;

}

if(!empty($w_img) file_exists($w_img)) //水印文件

{

$ifwaterimage = 1; //是否水印图

$water_info = getimagesize($w_img); //水印信息

$width = $water_info[0];

$height = $water_info[1];

switch($water_info[2])

{

case 1 :

$water_img = imagecreatefromgif($w_img);

break;

case 2 :

$water_img = imagecreatefromjpeg($w_img);

break;

case 3 :

$water_img = imagecreatefrompng($w_img);

break;

default :

return;

}

}

else

{

$ifwaterimage = 0;

//imagettfbbox 本函数计算并返回一个包围着 TrueType 文本范围的虚拟方框的像素大小。

//imagettfbbox ( 字体大小, 字体角度, 字体文件,文件 )

$temp = imagettfbbox(ceil($w_font*1.2), 0, $this-fontfile, $w_text);//取得使用 truetype 字体的文本的范围

$width = $temp[4] - $temp[6]; //右上角 X 位置 - 左上角 X 位置

$height = $temp[3] - $temp[5]; //右下角 Y 位置- 右上角 Y 位置

unset($temp);

}

switch($w_pos)

{

case 0: //随机位置

$wx = rand(0,($source_w - $width));

$wy = rand(0,($source_h - $height));

break;

case 1: //左上角

$wx = 5;

$wy = 5;

break;

case 2: //上面中间位置

$wx = ($source_w - $width) / 2;

$wy = 0;

break;

case 3: //右上角

$wx = $source_w - $width;

$wy = 0;

break;

case 4: //左面中间位置

$wx = 0;

$wy = ($source_h - $height) / 2;

break;

case 5: //中间位置

$wx = ($source_w - $width) / 2;

$wy = ($source_h - $height) / 2;

break;

case 6: //底部中间位置

$wx = ($source_w - $width) / 2;

$wy = $source_h - $height;

break;

case 7: //左下角

$wx = 0;

$wy = $source_h - $height;

break;

case 8: //右面中间位置

$wx = $source_w - $width;

$wy = ($source_h - $height) /2;

break;

case 9: //右下角

$wx = $source_w - $width;

$wy = $source_h - $height ;

break;

default: //随机

$wx = rand(0,($source_w - $width));

$wy = rand(0,($source_h - $height));

break;

}

if($ifwaterimage) //如果有水印图

{

//imagecopymerge 拷贝并合并图像的一部分

//参数(源图,水印图,拷贝到源图x位置,拷贝到源图y位置,从水印图x位置,从水印图y位置,高,宽,透明度)

imagecopymerge($source_img, $water_img, $wx, $wy, 0, 0, $width, $height, $this-w_pct);

}

else

{

if(!empty($w_color) (strlen($w_color)==7))

{

$r = hexdec(substr($w_color,1,2)); //获取红色

$g = hexdec(substr($w_color,3,2)); //获取绿色

$b = hexdec(substr($w_color,5)); //获取蓝色

}

else

{

return;

}

//imagecolorallocate 基于调色板的图像填充背景色

//imagestring 水平地画一行字符串

//imagestring(源图,字体大小,位置X,位置Y,文字,颜色)

//参数($image, float $size, float $angle, int $x, int $y, int $color, string $fontfile, string $text)

imagettftext($source_img,$w_font,0,$wx,$wy,imagecolorallocate($source_img,$r,$g,$b),$this-fontfile,$w_text);

//imagestring($source_img,$w_font,$wx,$wy,$w_text,imagecolorallocate($source_img,$r,$g,$b));

}

//输出到文件或者浏览器

switch($source_info[2])

{

case 1 :

imagegif($source_img, $target); //以 GIF 格式将图像输出到浏览器或文件

break;

case 2 :

imagejpeg($source_img, $target, $this-w_quality); //以 JPEG 格式将图像输出到浏览器或文件

break;

case 3 :

imagepng($source_img, $target); //以 PNG 格式将图像输出到浏览器或文件

break;

default :

return;

}

if(isset($water_info))

{

unset($water_info); //销毁

}

if(isset($water_img))

{

imagedestroy($water_img); //销毁

}

unset($source_info);

imagedestroy($source_img);

return true;

}

//gd库必须存在,后缀为jpg|jpeg|gif|png,文件存在,imagecreatefromjpeg或者imagecreatefromgif存在

function check($image)

{

return extension_loaded('gd')

preg_match("/.(jpg|jpeg|gif|png)/i", $image, $m)

file_exists($image)

function_exists('imagecreatefrom'.($m[1] == 'jpg' ? 'jpeg' : $m[1]));

//imagecreatefromjpeg

//imagecreatefromgif

//imagecreatefrompng

}

}

/**

缩略图

1.新建一个图像资源 通过 imagecreatefromgif imagecreatefromjpeg imagecreatefrompng

2.imagecopyresampled 拷贝图像,并调整大小

水印:图片水印,文字水印

1. 创建图像

2.加水印

图片水印:imagecopymerge 把2张图合并在一起

文字水印:imagettftext 向图像写入文字

*/

?

php生成图片显示文字

img src="img.php?color=redfrist='123'second='456'" /

这样就可以了吧

怎么用php生成图像,生成验证码

?php

//验证码类

class ValidateCode {

 private $charset = 'abcdefghkmnprstuvwxyzABCDEFGHKMNPRSTUVWXYZ23456789';//随机因子

 private $code;//验证码

 private $codelen = 4;//验证码长度

 private $width = 90;//宽度

 private $height = 40;//高度

 private $img;//图形资源句柄

 private $font;//指定的字体

 private $fontsize = 20;//指定字体大小

 private $fontcolor;//指定字体颜色

 //构造方法初始化

 public function __construct() {

  $this-font = dirname(__FILE__).'/font/elephant.ttf';//注意字体路径要写对,否则显示不了图片

 }

 //生成随机码

 private function createCode() {

  $_len = strlen($this-charset)-1;

  for ($i=0;$i$this-codelen;$i++) {

   $this-code .= $this-charset[mt_rand(0,$_len)];

  }

 }

 //生成背景

 private function createBg() {

  $this-img = imagecreatetruecolor($this-width, $this-height);

  $color = imagecolorallocate($this-img, mt_rand(157,255), mt_rand(157,255), mt_rand(157,255));

  imagefilledrectangle($this-img,0,$this-height,$this-width,0,$color);

 }

 //生成文字

 private function createFont() {

  $_x = $this-width / $this-codelen;

  for ($i=0;$i$this-codelen;$i++) {

   $this-fontcolor = imagecolorallocate($this-img,mt_rand(0,156),mt_rand(0,156),mt_rand(0,156));

   imagettftext($this-img,$this-fontsize,mt_rand(-30,30),$_x*$i+mt_rand(1,5),$this-height / 1.4,$this-fontcolor,$this-font,$this-code[$i]);

  }

 }

 //生成线条、雪花

 private function createLine() {

  //线条

  for ($i=0;$i6;$i++) {

   $color = imagecolorallocate($this-img,mt_rand(0,156),mt_rand(0,156),mt_rand(0,156));

   imageline($this-img,mt_rand(0,$this-width),mt_rand(0,$this-height),mt_rand(0,$this-width),mt_rand(0,$this-height),$color);

  }

  //雪花

  for ($i=0;$i100;$i++) {

   $color = imagecolorallocate($this-img,mt_rand(200,255),mt_rand(200,255),mt_rand(200,255));

   imagestring($this-img,mt_rand(1,5),mt_rand(0,$this-width),mt_rand(0,$this-height),'*',$color);

  }

 }

 //输出

 private function outPut() {

  header('Content-type:image/png');

  imagepng($this-img);

  imagedestroy($this-img);

 }

 //对外生成

 public function doimg() {

  $this-createBg();

  $this-createCode();

  $this-createLine();

  $this-createFont();

  $this-outPut();

 }

 //获取验证码

 public function getCode() {

  return strtolower($this-code);

 }

}

用php代码怎么以背景图片加上文字生成新的图片,然后在标题处绝对调用该图片?

?php

ob_clean(); //清除输出缓存

header("Content-type:image/jpeg"); //设置输出类型

$img="images/test.jpg"; //背景图片名

if(isset($_GET["img"]))$img=$_GET["img"]; //也可以通过img参数传入

$im=imagecreatefromjpeg($img); //读入背景图片

$text="文字内容"; //要加上的文字内容

if(isset($_GET["text"]))$text=$_GET["text"]; //也可以通过text参数传入

$fontFile="xxx.ttf"; //字体文件名,必须要

$fontSize=36; //字体尺寸

$fontColor=ImageColorAllocate($im,0,0,0); //字体颜色,这里是黑色

$textAngle=0; //文字显示的角度,0表示水平显示

$textLeft=20; //文字显示的x坐标

$textTop=60; //文字显示的y坐标

imagefttext($im,$fontSize,$textAngle,$textLeft,$textTop,$fontColor,$fontFile,$text); //把文字覆盖到图片上

Imagejpeg($im); //输出图片

ImageDestroy($im); //销毁图片

?

把以上文字保存为php文件,比如 img.php

然后在需要调用图片的地方用 img src="img.php?img=背景图片文件路径text=要加上的文字"/ 来调用

比如 img src="img.php?img=images/back.jpgtext=你好"/

PHP图片中文验证码生成问题

重新写了一下,这里不能print那个字符串..不然会出错

因为启动了session 之前不能有输出

最终$_SESSION['yzm']就是图片上的验证码..

--------------------

?php

session_start();

$im = imagecreatetruecolor(80,30);

$bg = imagecolorallocate($im,0,0,0);

$te = imagecolorallocate($im,255,255,255);

for($i=0;$i5;$i++)

{

$te2 = imagecolorallocate($im,rand(0,255),rand(0,255),rand(0,255));

imageline($im,rand(0,80),0,80,rand(0,30),$te2);

}

for($i=0;$i200;$i++)

{

imagesetpixel($im,rand()%100,rand()%30,$te2);

}

srand((float) microtime() * 10000000);

$input = array("步","步","高","请","转","到","图","像","我","非","常","高","兴");

$rand_keys = array_rand($input, 4);

$_SESSION['yzm'] = $t = $input[$rand_keys[0]].$input[$rand_keys[1]].$input[$rand_keys[2]].$input[$rand_keys[3]];

imagettftext($im,12,0,10,20,$te,'stxingka.ttf',$t);

header("content-type: image/jpeg");

imagejpeg($im);

?

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。