第14章 处理图像

学习要点:

1.创建图像

2.简单小案例

在PHP5中,动态图象的处理要比以前容易得多。PHP5在php.ini文件中包含了GD扩展包,只需去掉GD扩展包的相应注释就可以正常使用了。PHP5包含的GD库正是升级的GD2库,其中包含支持真彩图像处理的一些有用的JPG功能。

一般生成的图形,通过PHP的文档格式存放,但可以通过HTML的图片插入方式SRC来直接获取动态图形。比如,验证码、水印、微缩图等。

一.创建图像

创建图像的一般流程:

1).设定标头,告诉浏览器你要生成的MIME类型。

2).创建一个图像区域,以后的操作都将基于此图像区域。

3).在空白图像区域绘制填充背景。

4).在背景上绘制图形轮廓输入文本。

5).输出最终图形。

6).清除所有资源。

7).其他页面调用图像。

设定标头指定MIME输出类型

<?php

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

?>

创建一个空白的图像区域

<?php

$im = imagecreatetruecolor(200,200);

?>

在空白图像区域绘制填充背景

<?php

$blue = imagecolorallocate($im,0,102,255);

imagefill($im,0,0,$blue);

?>

在背景上绘制图形轮廓输入文本

<?php

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

imageline($im,0,0,200,200,$white);

imageline($im,200,0,0,200,$white);

imagestring($im, 5, 80, 20, "Mr.Lee", $white);

?>

输出最终图形

<?php

imagepng($im);

?>

清除所有资源

<?php

imagedestroy($im);

?>

其他页面调用创建的图形

<img src="Demo4.php" alt="PHP创建的图片" />

二.简单小案例

简单验证码

<?php

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

for($Tmpa=0;$Tmpa<4;$Tmpa++){

$nmsg.=dechex(rand(0,15));

}

$im = imagecreatetruecolor(75,25);

$blue = imagecolorallocate($im,0,102,255);

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

imagefill($im,0,0,$blue);

imagestring($im,5,20,4,$nmsg,$white);

imagepng($im);

imagedestroy($im);

?>

加载已有的图像

<?php

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

define('__DIR__',dirname(__FILE__).'\\');

$im = imagecreatefrompng(__DIR__.'222.png');

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

imagestring($im,3,5,5,'http://www.yc60.com',$white);

imagepng($im);

imagedestroy($im);

?>

加载已有的系统字体

<?php

$text = iconv("gbk","utf-8","李炎恢");

$font = 'C:\WINDOWS\Fonts\SIMHEI.TTF';

imagettftext($im,20,0,30,30,$white,$font,$text);

?>

图像微缩

<?php

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

define('__DIR__',dirname(__FILE__).'\\');

list($width, $height) = getimagesize(__DIR__.'222.png');

$new_width = $width * 0.7;

$new_height = $height * 0.7;

$im2 = imagecreatetruecolor($new_width, $new_height);

$im = imagecreatefrompng(__DIR__.'222.png');

imagecopyresampled($im2, $im, 0, 0, 0, 0,

$new_width, $new_height, $width, $height);

imagepng($im2);

imagedestroy($im);

Imagedestroy($im2);

?>

PS:扫一遍图像函数手册

===============================================================

<?php
/* // * 创建图像 *
//第一步,设置输出图片的类型
header('Content-Type:image/png'); //第二步,创建一个空白的画布,并返回画布的句柄
$img = imagecreatetruecolor(200, 200); //第三步,在空白的画布上面填充背景颜色,并返回此时的句柄
//创建背景颜色
$background_color = imagecolorallocate($img,135,206,250 );
//填充颜色
imagefill($img, 0, 0, $background_color); //第四步,在背景上面,绘制文字,线条等其他图形。
//创建一个白颜色
$white = imagecolorallocate($img, 255, 255, 255);
//画一条线
imageline($img, 0, 0, 200, 200, $white);
//也可以输出字符串
imagestring($img, 5, 40, 90, "HF_Ultrastrong", $white); //第五步,输出创建的图像,可以输出png,jpeg,wbmp,gif
imagepng($img); //第六步,销毁所使用的资源
imagedestroy($img);
*/ /*
// * 创建验证码 *
//文件头...
header("Content-type: image/png");
//创建真彩色白纸
$im = @imagecreatetruecolor(50, 20) or die("建立图像失败");
//获取背景颜色
$background_color = imagecolorallocate($im, 255, 255, 255);
//填充背景颜色(这个东西类似油桶)
imagefill($im,0,0,$background_color);
//获取边框颜色
$border_color = imagecolorallocate($im,200,200,200);
//画矩形,边框颜色200,200,200
imagerectangle($im,0,0,49,19,$border_color); //逐行炫耀背景,全屏用1或0
for($i=2;$i<18;$i++){
//获取随机淡色
$line_color = imagecolorallocate($im,rand(200,255),rand(200,255),rand(200,255));
//画线
imageline($im,2,$i,47,$i,$line_color);
} //设置字体大小
$font_size=12; //设置印上去的文字
$Str[0] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
$Str[1] = "abcdefghijklmnopqrstuvwxyz";
$Str[2] = "01234567891234567890123456"; //获取第1个随机文字
$imstr[0]["s"] = $Str[rand(0,2)][rand(0,25)];
$imstr[0]["x"] = rand(2,5);
$imstr[0]["y"] = rand(1,4); //获取第2个随机文字
$imstr[1]["s"] = $Str[rand(0,2)][rand(0,25)];
$imstr[1]["x"] = $imstr[0]["x"]+$font_size-1+rand(0,1);
$imstr[1]["y"] = rand(1,3); //获取第3个随机文字
$imstr[2]["s"] = $Str[rand(0,2)][rand(0,25)];
$imstr[2]["x"] = $imstr[1]["x"]+$font_size-1+rand(0,1);
$imstr[2]["y"] = rand(1,4); //获取第4个随机文字
$imstr[3]["s"] = $Str[rand(0,2)][rand(0,25)];
$imstr[3]["x"] = $imstr[2]["x"]+$font_size-1+rand(0,1);
$imstr[3]["y"] = rand(1,3); //写入随机字串
for($i=0;$i<4;$i++){
//获取随机较深颜色
$text_color = imagecolorallocate($im,rand(50,180),rand(50,180),rand(50,180));
//画文字
imagechar($im,$font_size,$imstr[$i]["x"],$imstr[$i]["y"],$imstr[$i]["s"],$text_color);
} //显示图片
imagepng($im);
//销毁图片
imagedestroy($im);
*/ ?>

PHP - 图像处理的更多相关文章

  1. Atitit 图像处理和计算机视觉的分类 三部分 图像处理 图像分析 计算机视觉

    Atitit 图像处理和计算机视觉的分类 三部分 图像处理 图像分析 计算机视觉 1.1. 按照当前流行的分类方法,可以分为以下三部分:三部分 图像处理 图像分析 计算机视觉1 1.2. 图像处理需要 ...

  2. Atitit 图像处理的摩西五经attilax总结

    Atitit 图像处理的摩西五经attilax总结 1. 数字图像处理(第三版)1 2. 图像处理基础(第2版)(世界著名计算机教材精选)1 3. 计算机视觉特征提取与图像处理(第三版)2 4. Op ...

  3. Atitit 图像处理的心得与疑惑 attilax总结

    Atitit 图像处理的心得与疑惑 attilax总结 1.1. 使用类库好不好??还是自己实现算法1 1.2. 但是,如果遇到类库体积太大,后者没有合适的算法,那就只能自己开发算法了1 1.3. 如 ...

  4. Atitit 图像处理 调用opencv 通过java  api   attilax总结

    Atitit 图像处理 调用opencv 通过java  api   attilax总结 1.1. Opencv java api的支持 opencv2.4.2 就有了对java api的支持1 1. ...

  5. Atitit MATLAB 图像处理 经典书籍attilax总结

    Atitit MATLAB 图像处理 经典书籍attilax总结 1.1. MATLAB数字图像处理1 1.2. <MATLAB实用教程(第二版)>((美)穆尔 著)[简介_书评_在线阅读 ...

  6. Atitit 图像处理类库大总结attilax qc20

    Atitit 图像处理类库大总结attilax qc20 1.1. 选择与组合不同的图像处理类库1 1.2. Halcon 貌似商业工具,功能强大.1 1.3. Openvc  Openvc功能也是比 ...

  7. Atitit MATLAB 图像处理attilax总结

    Atitit MATLAB 图像处理attilax总结 1.1. 下载 Matlab7.0官方下载_Matlab2012 v7.0 官方简体中文版-办公软件-系统大全.html1 1.2. Matla ...

  8. 使用MATLAB对图像处理的几种方法(下)

     试验报告 一.试验原理: 图像点处理是图像处理系列的基础,主要用于让我们熟悉Matlab图像处理的编程环境.灰度线性变换和灰度拉伸是对像素灰度值的变换操作,直方图是对像素灰度值的统计,直方图均衡是对 ...

  9. 使用MATLAB对图像处理的几种方法(上)

    实验一图像的滤波处理 一.实验目的 使用MATLAB处理图像,掌握均值滤波器和加权均值滤波器的使用,对比两种滤波器对图像处理结果及系统自带函数和自定义函数性能的比较,体会不同大小的掩模对图像细节的影响 ...

  10. 图像处理中任意核卷积(matlab中conv2函数)的快速实现。

    卷积其实是图像处理中最基本的操作,我们常见的一些算法比如:均值模糊.高斯模糊.锐化.Sobel.拉普拉斯.prewitt边缘检测等等一些和领域相关的算法,都可以通过卷积算法实现.只不过由于这些算法的卷 ...

随机推荐

  1. [置顶] 程序员必知(二):位图(bitmap)

    位图是什么? 位图就是数组,一般来说是bit型的数组,具有快速定位某个值的功能,这种思想有很广泛的应用,比如下边两题: 1 找出一个不在5TB个整数中存在的数 假设整数是32位的,总共有4GB个数,我 ...

  2. HTML5 按字母顺序排列的标签列表 new : HTML5 中的新标签。

    标签 描述 <!--...--> 定义注释. <!DOCTYPE>  定义文档类型. <a> 定义超链接. <abbr> 定义缩写. <acron ...

  3. Regex阅读笔记(一)之入门

    在检查一行文本时,^代表一行的开始,$代表结束. 字符数组:[],在里面列举任意多个字符,可以匹配其中任意一个字符,字符组元字符'-'表示一个范围. ^$表示一个空行(没有任何字符,包括空白字符) [ ...

  4. .net运行时和核心类库源码(部分源码)微软官方下载

    部分类库代码:http://referencesource.microsoft.com/download.html 运行时clr源码: http://www.microsoft.com/en-us/d ...

  5. 转: RequireJS Optimizer 的使用和配置方法

    RequireJS Optimizer 是 RequireJS 自带的前端优化工具,可以对 RequireJS 项目中的JavaScript和CSS 代码使用 UglifyJS 或者 Closure ...

  6. Go与Docker的几本书的作者

    http://thenewstack.io/ebookseries/http://thenewstack.io/building-a-web-server-in-go/

  7. perl学习(4) 子程序

    子程序,类比c语言中的函数,在形式上个人认为最大的区别:没有形参 1.1.定义子程序 1.2.调用 #! /usr/bin/perl sub marine { $n += 1 ; print &quo ...

  8. Eclipse中设置tomcat的启动内存

    现象:眼下每次使用Eclipse启动Tomcat 的时候常常出现OutOfMemoryError thrown from the UncaughtExceptionHandler in thread ...

  9. 【JavaScript】==与===对比

    1.对于string,number等基础类型,==和===是有区别的 1)不同类型间比较,==之比较“转化成同一类型后的值”看“值”是否相等,===如果类型不同,其结果就是不等 2)同类型比较,直接进 ...

  10. AFNetworking 3.0x版本最新特性

    AFNetworking是一款在OS X和iOS下都令人喜爱的网络库.为了迎合iOS新版本的升级, AFNetworking在3.0版本中删除了基于 NSURLConnection API的所有支持. ...