CakePHP中的媒体文件转换器插件/组件

时间:2012-07-23 06:25:47

标签: cakephp cakephp-2.0 cakephp-2.1

我正在尝试开发一个可以将媒体文件格式从一个更改为另一个的插件/组件。具体来说,我需要它将“tiff”文件转换为“jpg”图像文件的数组/单个副本。

请指导,我如何实现它,或者是否有任何类型的教程链接,我可以从哪里下载它或采取一些帮助来开发它。提前谢谢。

1 个答案:

答案 0 :(得分:3)

我们使用行为在我们的CMS(基于CakePHP 1.2构建;对不起,如果有任何重大差异,我不知道)中这样做了。这使得控制器逻辑变得非常简单(事实上我们使用烘焙控制器而根本没有任何修改)。

不幸的是,TIFF不是GD中支持的文件格式(PHP中的默认图像处理库)。你需要使用ImageMagick或一个等效的工具来进行实际的转换,但是在CakePHP项目中实现它的逻辑与我在这里描述的没有任何不同。

行为(在我们的例子中)用于生成缩略图和页面分辨率的图像,并将上传的文件格式转换为JPEG格式。

beforeSave()方法中,它检查了数据是否已指定(并且没有错误),然后从发布的数据中提取tmp_name值(并删除已发布的数据对象)。 / p>

afterSave()方法中,它实际上执行了图像转换任务(将生成的图像放在磁盘上的预期位置),然后使用上传的图像ID更新扩展模型上的所有外键。我们在afterSave()操作中执行此操作,因此我们有一个数据库ID用于命名磁盘上的文件。

afterDelete()方法中,我们取消链接磁盘上的文件。

使用模型中的行为就像告诉模型一样简单(ContentImage是行为的名称):

var $actsAs = array('ContentImage');

虽然我们也使用该模型来定义输出目录,因为我们有一些实现该行为的模型,并且感觉这是正确的事情,例如在模型中:

function getThumbnailDir() {
    return WWW_ROOT.'img'.DS.'upload'.DS.'thumb';
}

并且在行为本身中输出路径变为:

$Model->getThumbnailDir().DS.$Model->id.'.jpg'