image集成了图片的管理功能,即图片的上传、修改(生成大中小图、缩略图、添加水印等)、储存等功能。
通过模板标签,打开图片上传页面,返回图片唯一标识符或者原图地址。再通过表单传到后台。当需要调用图片的时候,通过唯一标识符从数据库中读取原图地址,通过img标签显示。
图片添加水印处理过程:当向系统提交图片处理,并不是立即处理,而是先将要进行的图片处理任务提交到系统队列,以每次两张的速度进行处理(队列默认速度为30秒)。在处理过程中watermark方法会调用image_clip类中的image_watermark方法(该方法中通过set_tools获取本文开头部分四个工具中的某一个,如果系统ECAE_MODE被宏定义过且不为false,则选用ecae工具,否则由IMAGE_TOOL参数定义,如果以上参数均未定义或者,则默认用php最基本的GD工具库。并调用相关工具的watermark方法),最后返回image的数据流。
image工具中,内置了四个图像处理工具(修改大小和合成水印),实现image_interface_tool接口(目前只提供修改大小的resize方法和添加水印的watermark方法)。在实际使用中,因为已经封装在image_clip类中,所以在实际使用中需要调用image_clip类的image_resize方法和image_watermark方法,而不是直接调用工具。
ecae
ECAE平台中为了提高图片处理的性能舍弃了原有的GD类库提供了一款比GD库性能更高、效果更佳的图片处理方式。
GD
php处理图形的扩展库,GD库提供了一系列用来处理图片的API,使用GD库可以处理图片,或者生成图片。 在网站上GD库通常用来生成缩略图,或者用来对图片加水印,或者用来生成汉字验证码,或者对网站数据生成报表等。
imagick
一个可以供PHP调用ImageMagick功能的PHP扩展。使用这个扩展可以使PHP具备和ImageMagick相同的功能。能够读写、操作185种基本格式图片文件。
magickwand
是PHP的一个扩展程序,通过它建立起与ImageMagick的交互,进行图片的处理。它是默认的GD图象函数库的绝佳替代方案。从安全性和易用性来说,在PHP中使用MagickWand比使用命令行ImageMagick要安全快捷的多。另外 imagick也可用于PHP中作为ImageMagick的替代方案。
页面提交表单中,需要加入如下input标签:
<{input type="image" name="$name" width=160 height=90}>
点击‘选择’后就可以打开图片上传页面:
或者是使用image_button类型的input标签:
<{input type="image_button" name="$name"}>
点击“上传图片”按钮同样可以打开图片上传页面。
本地上传方式、现有图片选择方式、网络图片选择方式。
需要注意的地方:
该标签为模板标签,所以不支持css样式,如果需要修改大小,需要用标签的width属性和height属性。
使用该input标签上传到控制器的内容为一条图片的唯一标识字符串(图片保存在“项目名/public/images”目录下)。
控制器中接收到的数据是String(32)类型的变量(如图所示)。
在控制器中,可以通过base_storager::image_path($image_id,$image_size)方法获得图片的真实地址。
在开发过程中,如需使用图片,在数据库中记录该唯一标识符即可。
$image_src=base_storager::image_path($image_id);//原图路径 $image_src=base_storager::image_path($image_id,$image_size);//对应尺寸缩略图
参数为:图片唯一标识符,图片大小(为字符串类型:'l'代表大图,'m'代表中图,'s'代表小图)。
在模板中,通过如下方法获取图片:
<img src="$image_src">//通过控制器获取图片地址再传到前台 <img src="<{$image_id|storager}>">//获取原图 <img src="<{$image_id|storager:'l'}>">//获取大图 <img src="<{$image_id|storager:'m'}>">//获取中图 <img src="<{$image_id|storager:'s'}>">//获取小图
图片管理位于“控制面板”->“图片管理”。
包括“图片管理”和“商品图片配置”分别对应“数据库图片表”和kvstore中的image设置。(图片关联表在商品图片设置等其它设置类似设置地方修改)
image应用为我们提供了两条命令来维护图片
image:resize filesystem filesystem图片重新生成 image:resize refreshmodify 强制刷新图片最新更新时间
image:resize filesystem [large|middle|small] [$image_id]其中:image:resize filesystem为命令开头,[large|middle|small]表示重新生成的缩略图为大图、中图、小图,[$image_id]为需要修改的图片的唯一标识符(数据库主键参数)。
image:resize refreshmodify [$image_id]
其中:image:resize filesystem为命令开头,[$image_id]为需要修改的图片的唯一标识符(数据库主键参数)。