Media 本地媒体库 ==================== **不兼容提醒** *服务端版本 1.4.7+* **继承关系** ``` \Tuanduimao\Model | \Tuanduimao\Media ``` **相关数据表** `core_media` **相关代码文件** Media 类 `/service/lib/Media.php` \Tuanduimao\Model\Media `/model/Media.php` ## 调用示例 ```php $media = new \Tuanduimao\Media(); //**** 文件上传 // 上传图片 $rs = $media->uploadImage("/tmp/image.png"); // 本地文件 $rs = $media->uploadImage("http://some.url.com/image.png"); // 图片网址 // 裁切图片 $rs_crop = $media->crop($rs["media_id"], 100, 100, 200, 300); // 压缩图片 $rs_resize = $media->resize($rs_crop["media_id"], 20, 30); // 上传视频 $rs = $media->uploadVideo("/tmp/video.mp4"); // 本地视频文件 $rs = $media->uploadVideo("http://some.url.com/video.mp4"); // 视频网址 $rs = $media->saveVideoUrl("https://v.qq.com/x/cover/jzhtr2cgy35ejz0/v0024xn6ba9.html"); // 视频网站网址 (支持优酷、腾讯视频) // 视频缩略图 // ["jpg"=>"缩略图地址...", "gif"=>"动图地址..."] $info = $media->getVideoCover("/tmp/video.mp4"); // 视频文件地址 // 上传文件 $rs = $media->uploadFile("/tmp/file.pdf"); // 本地文件 $rs = $media->uploadFile("http://some.url.com/file.pdf"); // 文件网址 //**** 制作二维码 // 网址 $qr_content = ""; $media->qrcode(["text"=>"http://minapages.com"], $qr_content); header('Content-type: image/png'); echo $qr_content; // 小程序码 $qr_content = ""; $media->qrcode([ "text"=>"/article/id=100", "type"=>"wxapp", "appid"=>"wxappid" ], $qr_content); header('Content-type: image/png'); echo $qr_content; // 带logo 二维码 $qr_content = ""; $media->qrcode([ "text"=>"http://minapages.com" "width"=>300, "logo"=>"http://some.url.com/logo.jpg", "logowidth" => 32 ], $qr_content); header('Content-type: image/png'); echo $qr_content; //**** 制作文本域图片 $text_content = ""; $meida->text([ "width"=>300, "height"=>100, "font" => "黑体", "size" => 32, "text" => "这是一只懒狗" ], $text_content); header('Content-type: image/png'); echo $text_content; //**** 高级用法 // 私有文件 $media =new \Tuanduimao\Media(["private"=>true]); // 私有文件访问地址 $url = $media->privateURL("/2017/08/09/hello.png", "<tdm secret>", "<tdm appid>"); echo $url; // 访问其他团队猫实例的 Meida 文件 $media = new \Tuanduimao\Media(["host"=>"https://some.url.com"]); // 上传文件到其他团队猫实例 Briage $uploadimageAPIURL = \Tuanduimao\Media::briage("uploadimage",[ "private"=>"1", "host" => "https://some.url.com" ], "https://some.url.com", "<tdm secret>", "<tdm appid>" ); // 关闭 Briage \Tuanduimao\Media::briageclose(); ``` ## 上传组件调用示例 ### image 图片上传面板 第一步: 在控制器中 引入 JS & CSS ```php function action(){ ... return [ 'js' => [ "js/plugins/jquery-webeditor/panel.full.min.js" ], 'css'=>[ "js/plugins/jquery-webeditor/panel.full.min.css?important" ], 'crumb' => [ "图文" => APP::R('article','index'), "文章列表" => APP::R('article','index'), "编辑文章" => '', ], 'active'=> [ 'slug'=>'mina/pages/article/index' ] ]; ... } ``` 第二步: 在视图模板中, 创建 imagePanel 对象 ```html <script language="javscript"> // 图片管理面板 var imagePanel = new imageWebeditorPanel({ api: { save: '<?=App::URI("mina", "uploader", "imagesave")?>', latest: '<?=App::URI("mina", "uploader", "imagelatest")?>', // 最近上传接口 upload: '<?=App::URI("mina", "uploader", "imageupload")?>', // 图片上传接口 crop: '<?=App::URI("mina", "uploader", "imagecrop")?>', // 图片裁切接口 resize: '<?=App::URI("mina", "uploader", "imageresize")?>' // 压缩图片接口 }, cancel: function( selected ) { // 取消选择 console.log( selected ); }, multiple:1, // 最多可选图片数量 ( 默认9个 ) show:false // 是否打开界面 }); </script> ``` | 功能 | Action | | --- | --- | | 保存图片数据 | imagesave | | 最近上传图片列表 | imagelatest | | 图片上传接口 | imageupload | | 图片裁切接口 | imagecrop | | 图片压缩接口 | imageresize | | 类型 | API地址 | | --- | --- | | 公共图片API | `<?=App::URI("mina", "uploader", "<action>")?>` | | 私有图片API | `<?=App::URI("mina", "uploader", "<action>", ["private"=>1])?>` | | 第三方实例, 公共图片API | `<?=\Tuanduimao\Media::briage("<action>",["host" => "https://some.url.com"], "https://some.url.com", "<tdm secret>", "<tdm appid>" );?>` | | 第三方实例, 私有图片API | `<?=\Tuanduimao\Media::briage("<action>",["private"=>1, "host" => "https://some.url.com"], "https://some.url.com", "<tdm secret>", "<tdm appid>" );?>` | 第三步: 选中后的事件 ```html <script language="javscript"> ... // 插入图片组件 $('.image', '#tabs-components').click( function(){ imagePanel.show({ confirm: function( selected ) { // 选中图片 if ( selected.length === 0 ) return ; for( var i in selected ) { var img = selected[i]; // console.log(img); } }, multiple:3 // 最多选择 几个 }); }); ... </script> ``` ### file 文件上传面板 第一步: 在控制器中 引入 JS & CSS ```php function action(){ ... return [ 'js' => [ "js/plugins/jquery-webeditor/panel.full.min.js" ], 'css'=>[ "js/plugins/jquery-webeditor/panel.full.min.css?important" ], 'crumb' => [ "图文" => APP::R('article','index'), "文章列表" => APP::R('article','index'), "编辑文章" => '', ], 'active'=> [ 'slug'=>'mina/pages/article/index' ] ]; ... } ``` 第二步: 在视图模板中, 创建 imagePanel 对象 ```html <script language="javscript"> // 文件管理面板 var filePanel = new fileWebeditorPanel({ api: { latest: '<?=App::URI("mina", "uploader", "filelatest", ["type"=>"file"])?>', // 最近上传文件 upload: '<?=App::URI("mina", "uploader", "fileupload")?>', // 文件上传接口 save: '<?=App::URI("mina", "uploader", "filesave")?>', // 文件信息保存接口 } }); </script> ``` | 功能 | Action | | --- | --- | | 文件信息保存接口 | filesave | | 最近上传文件列表 | filelatest | | 文件上传接口 | fileupload | | 类型 | API地址 | | --- | --- | | 公共文件API | `<?=App::URI("mina", "uploader", "<action>")?>` | | 私有文件API | `<?=App::URI("mina", "uploader", "<action>", ["private"=>1])?>` | | 第三方实例, 公共文件API | `<?=\Tuanduimao\Media::briage("<action>",["host" => "https://some.url.com"], "https://some.url.com", "<tdm secret>", "<tdm appid>" );?>` | | 第三方实例, 私有文件API | `<?=\Tuanduimao\Media::briage("<action>",["private"=>1, "host" => "https://some.url.com"], "https://some.url.com", "<tdm secret>", "<tdm appid>" );?>` | 第三步: 选中后的事件 ```html <script language="javscript"> ... // 插入文件组件 $('.file', '#tabs-components').click( function(){ filePanel.show({ confirm: function( selected ) { // 选中文件 if ( selected.length === 0 ) return ; for( var i in selected ) { var file = selected[i]; console.log( file); } }, multiple:3 // 3 个文件 }); }); ... </script> ``` ## 方法 ### __construct() 构造函数 ```php /** * 媒体资源数据表 * @param array $param * boolen $param["private"] 默认 false 是否公开访问 * string $param["host"] 团队猫实例主目录, 默认为空代表本实例 * string $param["root"] 文件根目录,默认为系统指定的 public / pirvate 目录 */ function __construct( $param=[] ); ``` ### get() 根据对象路径,读取对象完整信息 ```php /** * 根据对象路径,读取对象完整信息 * @param string $path 对象路径 * @return array 返回对象完整信息 * string ["url"] 对象CDN访问地址 * string ["origin"] 原始图片访问地址 * string ["path"] 对象路径 * string ["mime"] 对象文件 MIME TYPE */ function get( $path ); ``` ### uploadImage() 上传图片 ```php /** * 上传图片 * @param [type] $file [description] * @return [type] [description] */ function uploadImage( $file_name, $ext=null, $override=true, $hidden=0 ) ``` ### crop() 裁切图片 ```php /** * 裁切图片 * @param [type] $origin_media_id [description] * @param [type] $x [description] * @param [type] $y [description] * @param [type] $width [description] * @param [type] $height [description] * @return [type] [description] */ function crop( $origin_media_id, $x, $y, $width, $height ) ``` ### resize() 调整图片大小 ```php /** * 调整图片大小 * @param [type] $origin [description] * @param [type] $width [description] * @param [type] $height [description] * @return [type] [description] */ function resize( $origin_media_id, $width, $height ) ``` ### zip() 制作压缩包 ```php /** * 生成一个压缩包 * @param array $data 文件清单 * * 示例: * $data = [ * "/path/of/img1.jpg" => "/数据目录/图片/图片1.jpg", * "/path/of/img2.jpg" => "/数据目录/图片/图片2.jpg", * "/path/of/img3.jpg" => "/数据目录/图片/图片3.jpg" * ]; * * @param array $option 压缩选项,默认 [] * boolean $option['output'] 是否直接在浏览器端输出 * string $option['name'] 下载的压缩包名称 (浏览器输出时有效) * string $option['password'] 解压密码, 默认没有密码 * * @return array $rs 返回文件媒体数据 * $rs['path'] 压缩包路径 * $rs['origin'] 压缩包下载原始地址 * $rs['url'] 压缩包下载地址 (CDN) * $rs['media_id'] 媒体ID * ... */ function zip( $data, $option = [] ) ``` ### uploadVideo() 上传视频 ```php /** * 上传视频 * @param [type] $file [description] * @return [type] [description] */ function uploadVideo( $file_name, $cover_path=null, $ext=null, $override=true, $hidden=0 ) ``` ### saveVideoUrl() 保存视频网站视频资源 ```php function saveVideoUrl( $url, $hidden=0 ); ``` ### getVideoCover() 截取视频文件,并生成缩写略图 ```php /** * 截取视频文件,并生成缩写略图 * @param [type] $media_id [description] * @param [type] $file_name [description] * @param [type] $ext [description] * @return [type] [description] */ function getVideoCover( $file_name, $media_id = null, $from=null, $to=null ) ``` ### uploadFile() 上传文件 ```php /** * 上传文件 * @param [type] $file [description] * @return [type] [description] */ function uploadFile( $file_name, $ext=null, $override=true, $hidden=0 ) ``` ### text() 制作文本域图片 ```php /** * 制作文本域图片 * @param array $option 参数表 * * int/string $option["width"] 文本域宽度 默认 100 像素 (auto 为根据文本自动计算) * int/string $option["height"] 文本域高度 默认 100 像素 (auto 为根据文本自动计算) * int $option["size"] 字体大小 * string $option["text"] 文本正文 * string $option["font"] 字体名称 * string $option["color"] 颜色代码 RBA格式 "rgba(0,0,0,1)" * string $option["background"] 背景颜色代码 RBA格式 "rgba(254,254,254,0.6)" 默认 rba(255,255,255,0) * string $option["type"] 排列方式 默认 horizontal 横排 horizontal 竖排 vertical * string $option["dir"] 文字方向 默认 ltr 左 → 右 ltr: 左 → 右 rtl 左 ← 右 * string $option["line"] 文字行高 与字体大小对比值 横排默认 1.5 竖排 2.0 * string $option["space"] 文字间距 与字体大小对比值 横排默认 0.2 * * @return null */ function text( $option, & $image ); ``` ### qrcode() 制作二维码/小程序码图片 ```php /** * 制作二维码/小程序码图片 * @param array $params 参数表 * string $params["text"] 二维码内容 * string $params["type"] 二维码类型 默认 url 网址, url: 网址 wxapp: 小程序码 wechat: 带参二维码(暂未实现) * int $params["appid"] 微信应用 apid * int $params["secret"] 微信应用 scret * int $params["config"] 团队猫配置项目ID (填写这个无需填写 appid/secret) * int $params["width"] 二维码宽度 * int $params["logo"] 嵌入的LOGO 图标地址 ( url 有效 ) * int $params["logowidth"] LOGO 宽度 * string $params["color"] 前景色颜色代码 RGBA格式 "rgba(0,0,0,1)" * string $params["background"] 背景颜色代码 RBA格式 "rgba(254,254,254,0.6)" 默认 rba(255,255,255,0) * * @return blob $image */ function qrcode( $params, & $resp ) ``` ### privateURL() 获取私有文件访问地址 **生成请求签名等数据** ```php /** * 获取私有文件访问地址 * * @param string $path 文件目录 * @param string $secret 团队猫 secret * @param string $appid 团队猫 appid * @return string url */ function privateURL( $path , $secret=null, $appid=null) ``` ### briage() *static* 获取文件上传API路由通道 **本函数主要用于上传文件到其他团队猫实例中** ```php /** * 获取文件上传API路由通道 (用于上传文件到其他团队猫实例中) * @param string $action 控制器 (@see 核心代码 /controller/mina/uploader.class.php ) * @param string $query GET 参数 * @param string $host 团队猫实例地址 * @param string $secret 团队猫实例的 Secret * @param string $appid 团队猫实例的 Appid * * @return string url /_a/mina/uploader/briage API路由地址 */ public static function briage( $action, $query, $host, $secret, $appid ) ``` ### briageclose() *static* 关闭文件上传API路由通道 **调用 briage() 任务处理完成后,需要调用 briageclose() 关闭通道。** ```php /** * 关闭文件上传API路由通道 * 调用 briage() 任务处理完成后,需要调用 briageclose() 关闭通道。 *(否则该通道一直有效) * @return */ public static function briageclose(); ``` ### getContent() 抓取文件内容 ```php /** * 抓取文件内容 * @param [type] $mixurl [description] * @param [type] $content [description] * @return boolen true / false */ function getContent( $mixurl, & $content ); ``` ### getImageUrl() 读取图片地址 ```php function getImageUrl( $media_id, $size = null ); ``` ### download() 下载媒体文件 ```php function download( $media_id, $name=null ); ``` ### displayImage() 显示图片 ```php function displayImage( $media_id, $size=null ); ```