我正在尝试开发一个可以将媒体文件格式从一种更改为另一种的插件/组件。具体来说,我需要它将“tiff”文件转换为“jpg”图像文件的数组/单个副本。
请指导,我如何实现它,或者是否有任何类型的教程链接,我可以从中下载它或寻求一些帮助来开发它。提前致谢。
我正在尝试开发一个可以将媒体文件格式从一种更改为另一种的插件/组件。具体来说,我需要它将“tiff”文件转换为“jpg”图像文件的数组/单个副本。
请指导,我如何实现它,或者是否有任何类型的教程链接,我可以从中下载它或寻求一些帮助来开发它。提前致谢。
我们在我们的 CMS(基于 CakePHP 1.2 构建;如果有任何我不知道的重大差异,很抱歉)使用行为来做到这一点。这使得控制器逻辑非常简单(实际上我们使用了一个烘焙控制器,根本没有任何修改)。
不幸的是,在 GD(PHP 中的默认图像处理库)中,TIFF 不是受支持的文件格式。您需要使用 ImageMagick 或等效工具自己进行实际转换,但在您的 CakePHP 项目中实现它的逻辑与我在这里描述的没有任何不同。
该行为(在我们的例子中)用于生成缩略图和页面分辨率的图像,并将上传的文件格式转换为 JPEG。
在其beforeSave()
方法中,它检查是否指定了数据(并且没有错误),然后tmp_name
从发布的数据中提取值(并删除发布的数据对象)。
在其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'