|
来源:http://trac.seagullproject.org/wiki/Howto/WorkingWithImages/CodeExamples/Basics 基础包含图像工具库 require_once SGL_CORE_DIR . '/Image.php'; 创建一个图像实例。 $image = new SGL_Image(); 注意构造函数可以接收两个可选参数,如,图像文件名和该图像所属模块名。 $image = new SGL_Image('riga.jpg');
即使我们省略了图像文件名,图像文件名也会被设置。在这种情况下,图像文件名为: SGL_Image#generateUniqueFileName() 在创建实例后获取自动生成的图像文件名。 $image = new SGL_Image(); $imageName = $image->getFileName(); 正如上面提到的,模块名可以作为一个可选参数传递给构造函数。 $image = new SGL_Image('riga.jpg', 'mymodule');
模块名影响图像文件的存取路径。默认情况下,如果省略了模块名,保存路径相当于SGL_UPLOAD_DIR常量指定的值。而如果指定了模块名,那么路径就应该是: SGL_MOD_DIR . '/' . $moduleName . '/www/images' 获取图像的保存路径。 $image = new SGL_Image(); $savePath = $image->getPath(); // $savePath equals to SGL_UPLOAD_DIR 或 $image = new SGL_Image(null, 'media'); $savePath = $image->getPath(); // $savePath equals to SGL_MOD_DIR/media/www/images SGL_Image#getPath()是一个特殊方法,可以被静态调动也可以实例调用。下面的代码可以实现和上面代码一样的效果。 $savePath = SGL_Image::getPath('media'); // $savePath equals to SGL_MOD_DIR/media/www/images
为什么要提供一个指定图像路径的功能而不使用SGL_UPLOAD_DIR呢?在Media模块中是没用的,因为所有的图像是通过一个封装类显示的,如FileMgr#_cmd_previewMedia(),所以用户的权限被限制在这儿了,因为不可能直接通过HTTP请求访问SGL_UPLOAD_DIR目录。如果指定了模块名,其实是软链接在起作用(Media, Ecomm, Cms - 这些新的模块使用软链接将所有的数据保存在一个地方)。所以,如果你需要创建一个图像相关的模块,而该模块不需要设置用户对图像的权限,就可以尝试使用软链接和这个图像工具。还有一个特殊的方法(即可静态调用又可实例调用)。 SGL_Image#getUrl() 返回指向图像文件夹的URL。 $image = new SGL_Image(null, 'gallery'); $url = $image->getUrl(); // $url equals to SGL_BASE_URL/gallery/images $url = SGL_Image::getUrl('gallery'); // $url equals to SGL_BASE_URL/gallery/images
Please note, if module name is not specified in constructor or, in case of static call, as argument for , PEAR_Error object will be returned. 请注意,如果没在构造函数中或者是静态调用时指定模块名作为SGL_Image::getUrl()的参数,会返回PEAR_Error对象。
$image = new SGL_Image();
$url = $image->getUrl();
if (PEAR::isError($url)) {
echo 'module name is not specified';
}
|