目录搜索
欢迎目录快速参考图基本信息服务器要求许可协议变更记录关于CodeIgniter安装下载 CodeIgniter安装指导从老版本升级疑难解答介绍开始CodeIgniter 是什么?CodeIgniter 速记表支持特性应用程序流程图模型-视图-控制器架构目标教程内容提要加载静态内容创建新闻条目读取新闻条目结束语常规主题CodeIgniter URL控制器保留字视图模型辅助函数使用 CodeIgniter 类库创建你自己的类库使用 CodeIgniter 适配器创建适配器创建核心系统类钩子 - 扩展框架的核心自动装载资源公共函数URI 路由错误处理缓存调试应用程序以CLI方式运行管理应用程序处理多环境PHP替代语法安全开发规范类库参考基准测试类日历类购物车类配置类Email 类加密类文件上传类表单验证详解FTP 类图像处理类输入类Javascript 类语言类装载类迁移类输出类分页类模板解析器类安全类Session 类HTML 表格类引用通告类排版类单元测试类URI 类User-Agent 类表单验证XML-RPC 和 XML-RPC 服务器Zip 编码类缓存适配器适配器参考适配器数据库类Active Record 类数据库缓存类自定义函数调用数据库配置连接你的数据库数据库快速入门例子代码字段数据数据库维护类查询辅助函数数据库类查询生成查询记录集表数据事务数据库工具类JavaScript类辅助函数参考数组辅助函数CAPTCHA 辅助函数Cookie Helper日期辅助函数目录辅助函数下载辅助函数Email 辅助函数文件辅助函数表单辅助函数HTML辅助函数Inflector 辅助函数语言辅助函数数字辅助函数路径辅助函数安全辅助函数表情辅助函数字符串辅助函数文本辅助函数排版辅助函数URL 辅助函数XML 辅助函数
文字

CodeIgniter 用户指南 版本 2.1.0

编辑文档、查看近期更改请 登录 或 注册  找回密码
查看原文

图像处理类

CodeIgniter 的图像处理类可以使你完成以下的操作:

  • 调整图像大小
  • 创建缩略图
  • 图像裁剪
  • 图像旋转
  • 添加图像水印

可以很好的支持三个主流的图像库:GD/GD2, NetPBM, 和 ImageMagick。

注意: 添加水印操作仅仅在使用GD/GD2时可用。另外,即使支持其他的图像处理库,但是为了计算图像的属性,GD是必需的。然而,将使用你制定的库来进行图像处理操作。

初始化类

像 CodeIgniter 的大多数类一样,图像处理类在你的控制器里使用 $this->load->library 方法来初始化:

$this->load->library('image_lib');

在图像处理库被载入后就已经做好被使用的准备了。你将用来调用所有图像处理方法的图像处理库对象是:$this->image_lib

处理一个图像

不管你想进行何种图像处理操作(调整大小,图像裁剪,图像旋转,添加水印),通常过程都是一样的。你先设置一些你想进行的图像操作的参数,然后调用四个可用方法中的一个。例如,创建一个图像缩略图:

$config['image_library'] = 'gd2';
$config['source_image'] = '/path/to/image/mypic.jpg';
$config['create_thumb'] = TRUE;
$config['maintain_ratio'] = TRUE;
$config['width'] = 75;
$config['height'] = 50;

$this->load->library('image_lib', $config);

$this->image_lib->resize();

以上代码告诉image_resize函数去查找位于source_image目录且名为mypic.jpg的图片,然后运用GD2图像库创建75 X 50像素的缩略图。 当 maintain_ratio 选项设为可用时,生成的缩略图将在保持纵横比例的同时,尽可能的在宽度和高度上接近所设定的widthheight。缩略图将被命名为类似 mypic_thumb.jpg的形式

注意: 为了让图像类能进行所有操作,包含图片的文件夹必须开启可写权限。

Note: Image processing can require a considerable amount of server memory for some operations. If you are experiencing out of memory errors while processing images you may need to limit their maximum size, and/or adjust PHP memory limits.

处理函数

有五个处理函数可以调用:

  • $this->image_lib->resize()
  • $this->image_lib->crop()
  • $this->image_lib->rotate()
  • $this->image_lib->watermark()
  • $this->image_lib->clear()

当调用成功时,这些函数会返回 TRUE, 否则会返回 FALSE. 如果调用失败时,用以下函数可以获取错误信息:

echo $this->image_lib->display_errors();

像下面这样当调用失败时显示错误,是一个好的例子来有条件的使用处理函数:

if ( ! $this->image_lib->resize())
{
    echo $this->image_lib->display_errors();
}

注意: 你可以随意的给错误使用HTML的格式。像下面这样,添加打开/关闭标记符:

$this->image_lib->display_errors('<p>', '</p>');

参数

你可以用下面的参数来对图像处理进行调配,既而满足你的要求。

注意,不是所有的参数都可以应用到任何得函数中。例如,x/y 轴参数只能被图像裁剪使用。但是,宽度和高度参数对裁剪函数是无效的。 "可用性" 列指明了哪些函数是可以使用对应的参数的。

可用性图列:

  • R - 调整图像大小
  • C - 图像裁剪
  • X - 图像旋转
  • W - 添加图像水纹
参数 默认值 选项 描述 可用性
image_library GD2 GD, GD2, ImageMagick, NetPBM 设置图像库 R, C, X, W
library_path 设置 ImageMagick 或 NetPBM 库在服务器上的路径。要使用其中任何一个,你都需要设置它们的路径 R, C, X
source_image 设置原始图像的名字/路径。 对路径而言,只能是相对或绝对的服务器路径,不能使用URL。 R, C, S, W
dynamic_output FALSE TRUE/FALSE (布尔值) 决定新图像的生成是要写入硬盘还是动态的存在。注意,如果是动态生成的话,图像生成后是不能在页面中定位的。它简单地以header定义为image的动态图像形式显示在你的浏览器中。 R, C, X, W
quality 90 1 - 100 设置图像的品质。品质越高,图像文件越大 R, C, X, W
new_image None None 设置图像的目标名/路径。 当复制图像时,你会用到这个参数的。这个路径必须是相对或绝对的服务器路径,不能是URL R, C, X, W
width None None 设置你想要得图像宽度。 R, C
height None None 设置你想要得图像高度 R, C
create_thumb FALSE TRUE/FALSE (boolean) 让图像处理函数产生一个预览图像 R
thumb_marker _thumb 指定预览图像的标示。它将在被插入文件扩展名之前。例如,mypic.jpg 将会变成 mypic_thumb.jpg R
maintain_ratio TRUE TRUE/FALSE (boolean) 指定是否在缩放或使用硬值的时候使图像保持原始的纵横比例。 R, C
master_dim auto auto, width, height 指定一个选项作为缩放和创建缩略图时的主轴。例如,你想要将一张图片缩放到100×75像素。如果原来的图像的大小不能完美的缩放到这个尺寸,那么由这个参数决定把哪个轴作为硬值。"auto" 依据图片到底是过高还是过长自动设定轴。 R
rotation_angle None 90, 180, 270, vrt, hor 指定图片旋转的角度。PHP的旋转是逆时针的,如果想向右转90度就得把这个参数定义为270。 X
x_axis None None 为图像的裁剪设定X轴上的长度。例如,设为30就是将图片左边的30像素裁去。 C
y_axis None None 为图像的裁剪设定Y轴上的长度。例如,设为30就是将图片顶端的30像素裁去。 C

在配置文件中设置参数

如果你不喜欢用以上的方式设置参数,你还能通过配置文件来设置它们。只要创建一个名为image_lib.php的文件, 在该文件中加入一个 $config 数组。 然后将这个文件保存到: config/image_lib.php ,它将会被自动调用。 如果你将参数保存在配置文件里,你就不需要再使用 $this->image_lib->initialize 函数。

$this->image_lib->resize()

这个图像大小调整函数让你能调整原始图像的大小,创建一个备份(调整过的和未调整过的),或者创建一个缩略图。

创建一个备份和创建一个缩略图之间没有实际上的区别,除了缩略图的文件名会有一个预定义的后缀(如, mypic_thumb.jpg)。

所有列在上面表中的参数对这个函数可用,除了这三个:rotation_angle, x_axis, and y_axis。

创建一个缩略图

resize函数能用来创建缩略图(并保留原图) 只要你把这个参数设为TRUE:

$config['create_thumb'] = TRUE;

这一个参数决定是否创建一个缩略图。

创建一个备份

resize函数能创建一个图像的备份(并保留原图) 只要你通过以下参数设置一个新的路径或者文件名:

$config['new_image'] = '/path/to/new_image.jpg';

注意以下规则:

  • 如果只指定新图像的名字,那么它会被放在原图像所在的文件夹下。
  • 如果只指定路径,新图像会被放在指定的文件夹下,并且名字和原图像相同。
  • 如果同时定义了路径和新图像的名字,那么新图像会以指定的名字放在指定的文件夹下。

调整原图像的大小

如果上述两个参数(create_thumb, and new_image)均未被指定,resize函数的处理结果将直接作用于原图像。

$this->image_lib->crop()

crop函数的用法与resize函数十分接近,除了它需要你设置用于裁剪的X和Y值(单位是像素),如下:

$config['x_axis'] = '100';
$config['y_axis'] = '40';

前面那张表中所列的所有参数都可以用于这个函数,除了这些:rotation_angle, width, height, create_thumb, new_image.

这是一个如何裁剪一张图片的示例:

$config['image_library'] = 'imagemagick';
$config['library_path'] = '/usr/X11R6/bin/';
$config['source_image'] = '/path/to/image/mypic.jpg';
$config['x_axis'] = '100';
$config['y_axis'] = '60';

$this->image_lib->initialize($config);

if ( ! $this->image_lib->crop())
{
    echo $this->image_lib->display_errors();
}

注意:如果没有一个可视化的界面,是很难裁剪一张图片的。因此,除非你打算制作这么一个界面,否则这个函数并不是很有用。事实上我们(译注:指Ellislab公司,CodeIgniter的发行者)在自己开发的CMS系统ExpressionEngine的相册模块中添加的一个基于JavaScript的用户界面来选择裁剪的区域。

$this->image_lib->rotate()

rotate()函数需要通过参数设置旋转的角度:

$config['rotation_angle'] = '90';

以下是5个可选项:

  1. 90 - 逆时针旋转90度。
  2. 180 - 逆时针旋转180度。
  3. 270 - 逆时针旋转270度。
  4. hor - 水平翻转。
  5. vrt - 垂直翻转。

下面是旋转图片的一个例子:

$config['image_library'] = 'netpbm';
$config['library_path'] = '/usr/bin/';
$config['source_image'] = '/path/to/image/mypic.jpg';
$config['rotation_angle'] = 'hor';

$this->image_lib->initialize($config);

if ( ! $this->image_lib->rotate())
{
    echo $this->image_lib->display_errors();
}

$this->image_lib->clear()

clear函数重置所有之前用于处理图片的值。当你用循环来处理一批图片时,你可能会想使用它。

$this->image_lib->clear();

 

图像水印处理

水印处理功能需要 GD/GD2 库的支持.

水印处理的两种类型

你可以使用以下两种图像水印处理方式:

  • Text: 水印信息将以文字方式生成,要么使用你所指定的TrueType字体,要么使用GD库所支持的内部字体。如果你要使用TrueType版本,那么你安装的GD库必须是以支持TrueType的形式编译的(大多数时候是,不是所有)。
  • Overlay: 水印信息将以图像方式生成,新生成的水印图像(通常是透明的 PNG 或者 GIF)将覆盖在原图像上.

水印处理一个图像

类似使用其他类型图像函数(resizing, cropping, and rotating), 你也要对水印处理函数进行参数设置来生成你要得结果. 例子如下:

$config['source_image'] = '/path/to/image/mypic.jpg';
$config['wm_text'] = 'Copyright 2006 - John Doe';
$config['wm_type'] = 'text';
$config['wm_font_path'] = './system/fonts/texb.ttf';
$config['wm_font_size'] = '16';
$config['wm_font_color'] = 'ffffff';
$config['wm_vrt_alignment'] = 'bottom';
$config['wm_hor_alignment'] = 'center';
$config['wm_padding'] = '20';

$this->image_lib->initialize($config);

$this->image_lib->watermark();

上面的例子是使用16像素 True Type 字体来生成文本水印"Copyright 2006 - John Doe" 该水印将出现在离图像底部20像素的中底部位置,

注意: 当调用图像类处理图像时,任何目标图片文件必须有 "写入"的权限, 例如:777.

水印处理参数

这个表里列举了两种水印处理 (text or overlay) 的可设置的参数

参数 默认值 选项 描述
wm_type text text, overlay 设置想要使用的水印处理类型.
source_image 设置原图像的名字和路径. 路径必须是相对或绝对路径,但不能是URL.
dynamic_output FALSE TRUE/FALSE (布尔值) 决定新的图片文件应该被写入磁盘还是动态生成。说明: 如果你选择动态生成, 那么每次就只能显示一张图片, 而且它还不能被定位在页面上, 仅仅是把原始图片动态输出到浏览器中,并且带上image header.
quality 90 1 - 100 设置图片的质量。数字越大,质量越高, 文件就越大。
padding 一个数字 填充量, 以像素为单位, 在实际应用中将被设置为水印与图片边缘的距离。
wm_vrt_alignment bottom top, middle, bottom 设置水印图像的垂直对齐方式。
wm_hor_alignment center left, center, right 设置水印图像的水平对齐方式。
wm_hor_offset 你可以指定一个水平偏移量(以像素为单位)用于设置水印的位置。偏移量通常是向右移动水印, 除非你把水平对齐方式设置为"right", 那么你的偏移量将会向左移动水印。
wm_vrt_offset 你可以指定一个垂直偏移量(以像素为单位)用于设置水印的位置。偏移量通常是向下移动水印, 除非你把垂直对齐方式设置为"bottom", 那么你的偏移量将会向上移动水印。

Text参数

这个表格显示了Text类型水印的可用参数。

参数 默认值 选项 描述
wm_text 你想作为水印显示的文本。通常是一份版权声明。
wm_font_path 你想使用的TTF字体在服务器上的路径。如果你没有使用这个选项,系统将使用原生的GD字体。
wm_font_size 16 文字的大小。 说明: 如果你没有使用上面的TTF字体选项,那么这个数值必须是 1-5 之间的一个数字。否则, 你可以使用任意一个用于你的字体的有效像素大小。
wm_font_color ffffff 字体颜色,以十六进制给出。注意, 你必须给出完整的6位数的十六进制值(例如993300), 而不是3位数的简化值(例如fff)。
wm_shadow_color 阴影的颜色, 以十六进制给出。如果此项为空,那么阴影将不会被使用。注意, 你必须给出完整的6位数的十六进制值(例如993300), 而不是3位数的简化值(例如fff)。
wm_shadow_distance 3 阴影与文字之间的距离(以像素为单位)。

Overlay 参数

这个表格显示了Overlay类型水印的可用参数。

参数 默认值 选项 描述
wm_overlay_path 你想要用作水印的图片在你服务器上的路径。只在你使用了overlay方法时需要。
wm_opacity 50 1 - 100 图像不透明度(opacity)。你可以指定你的水印图片的不透明度(例如transparency)。这将使水印模糊化,从而不会掩盖住底层原始图片的细节。通常设置为50。
wm_x_transp 4 一个数字 如果你的水印图片是一个PNG或GIF图片, 你可以指定一种颜色用来使图片变得"透明"。这项设置(以及下面那项)将允许你指定这种颜色。它的原理是, 通过指定"X"和"Y"坐标值(从左上方开始测量)来确定图片上对应位置的某个像素, 这个像素所代表的颜色就是你要设置为透明的颜色。
wm_y_transp 4 一个数字 与前一个选项一起, 允许你指定某个像素的坐标值, 这个像素所代表的颜色就是你要设置为透明的颜色。

 

翻译贡献者: aykirk, bnlt, Hex, huangnaiang, lamtin, sydcurie, szlinz, tangjianft, yinzhili
最后修改: 2012-03-07 14:09:27
上一篇:下一篇: