コード例 #1
0
ファイル: photo.mdl.php プロジェクト: vluo/myPoto
 function save_upload($album_id, $tmpfile, $filename, $new_photo = true, $photo_info = array())
 {
     $apath = str_pad($album_id, 6, '0', STR_PAD_LEFT);
     $apath = substr($apath, 0, 4) . '/' . substr($apath, 4, 2);
     $media_dirname = 'data/' . $apath;
     $thumb_dirname = 'data/t/' . $apath;
     $storlib =& loader::lib('storage');
     $imglib =& loader::lib('image');
     $exiflib =& loader::lib('exif');
     $fileext = file_ext($filename);
     $filepure = file_pure_name($filename);
     $key = str_replace('.', '', microtime(true));
     $tmpfs_lib =& loader::lib('tmpfs');
     $tmpfile_thumb = $tmpfs_lib->get_path($key . '_thumb.' . $fileext);
     if (file_exists($tmpfile)) {
         $setting =& Loader::model('setting');
         if (!$imglib->load($tmpfile)) {
             //如果不是有效的直接退出,并删除临时文件
             $tmpfs_lib->delete($tmpfile, true);
             return false;
         }
         if (!in_array($fileext, array('jpg', 'png', 'jpeg', 'gif', 'bmp'))) {
             $fileext = $imglib->getExtension();
         }
         if (isset($photo_info['cate_id'])) {
             $arr['cate_id'] = $photo_info['cate_id'];
         }
         if (!$new_photo) {
             $filepath = $photo_info['path'];
             $thumbpath = $photo_info['thumb'];
         } else {
             $use_old_img_name = $setting->get_conf('upload.use_old_imgname', false);
             //如果文件名是只包含数字
             if ($use_old_img_name && file_en_name($filepure)) {
                 //如果存在此图片,则生成唯一的名字
                 $filepath = $media_dirname . '/' . $filepure . '.' . $fileext;
                 $count = 1;
                 while (file_exists($filepath)) {
                     $filepath = $media_dirname . '/' . $filepure . '_' . $count . '.' . $fileext;
                     $count++;
                 }
             } else {
                 $filepath = $media_dirname . '/' . $key . '.' . $fileext;
             }
             $thumbpath = $thumb_dirname . '/' . $key . '.' . $fileext;
         }
         $arr['width'] = $imglib->getWidth();
         $arr['height'] = $imglib->getHeight();
         if ($fileext == 'jpg') {
             $exif = $exiflib->get_exif($tmpfile);
             if ($exif) {
                 $arr['exif'] = serialize($exif);
                 $taken_time = strtotime($exif['DateTimeOriginal']);
                 $arr['taken_time'] = $taken_time;
                 $arr['taken_y'] = date('Y', $taken_time);
                 $arr['taken_m'] = date('n', $taken_time);
                 $arr['taken_d'] = date('j', $taken_time);
             }
         }
         //如果开启自动裁剪大图片,将临时文件直接裁剪
         if ($setting->get_conf('upload.enable_cut_big_pic', false)) {
             $max_width = $setting->get_conf('upload.max_width', 1600);
             $max_height = $setting->get_conf('upload.max_height', 1600);
             if ($arr['width'] > $max_width || $arr['height'] > $max_height) {
                 $imglib->resizeScale($max_width, $max_height);
                 $imglib->save($tmpfile);
                 $arr['width'] = $imglib->getWidth();
                 $arr['height'] = $imglib->getHeight();
             }
         }
         //设置水印前生成缩略图
         $thumb_width = $setting->get_conf('upload.thumb_width', 180);
         $thumb_height = $setting->get_conf('upload.thumb_height', 180);
         if ($arr['width'] > $thumb_width || $arr['height'] > $thumb_height) {
             if ($setting->get_conf('upload.enable_thumb_cut', false)) {
                 $imglib->resizeCut($thumb_width, $thumb_height);
                 //裁剪
             } else {
                 $imglib->resizeScale($thumb_width, $thumb_height);
             }
             $imglib->save($tmpfile_thumb);
         } else {
             //图片过小的话则直接拷贝至缩略图
             @copy($tmpfile, $tmpfile_thumb);
         }
         $water_setting = $setting->get_conf('watermark');
         if ($water_setting['type'] != 0) {
             $imglib->load($tmpfile);
             if ($water_setting['type'] == 1) {
                 $water_setting['water_mark_type'] = 'image';
                 if (STORAGE_ENGINE != 'file') {
                     $ws_tmpfile = 'ws_tmp';
                     $ws_file_content = $storlib->read($water_setting['water_mark_image']);
                     if ($ws_file_content) {
                         $tmpfs_lib->write($ws_tmpfile, $ws_file_content);
                         $water_setting['water_mark_image'] = $tmpfs_lib->get_path($ws_tmpfile);
                         $imglib->waterMarkSetting($water_setting);
                         $imglib->waterMark();
                         $imglib->save($tmpfile);
                         $tmpfs_lib->delete($ws_tmpfile);
                     }
                 } else {
                     $imglib->waterMarkSetting($water_setting);
                     $imglib->waterMark();
                     $imglib->save($tmpfile);
                 }
             } elseif ($water_setting['type'] == 2) {
                 $water_setting['water_mark_type'] = 'font';
                 $water_setting['water_mark_font'] = $water_setting['water_mark_font'] ? ROOTDIR . 'statics/font/' . $water_setting['water_mark_font'] : '';
                 $imglib->waterMarkSetting($water_setting);
                 $imglib->waterMark();
                 $imglib->save($tmpfile);
             }
         }
         $imglib->close();
         if ($storlib->upload($filepath, $tmpfile)) {
             $arr['album_id'] = $album_id;
             $arr['path'] = $filepath;
             $arr['thumb'] = $thumbpath;
             if ($new_photo) {
                 $arr['name'] = isset($photo_info['name']) ? $photo_info['name'] : $filepure;
                 $arr['create_time'] = time();
                 $arr['create_y'] = date('Y');
                 $arr['create_m'] = date('n');
                 $arr['create_d'] = date('j');
             }
             $arr = $arr + $photo_info;
             //move thumb img
             $storlib->upload($thumbpath, $tmpfile_thumb);
             if ($new_photo) {
                 $photo_id = $this->save($arr);
                 if (!$photo_id) {
                     $storlib->delete($filepath);
                     $storlib->delete($thumbpath);
                 }
             } else {
                 $photo_id = $photo_info['id'];
                 $result = $this->update($photo_id, $arr);
             }
             //remove tmp files
             $tmpfs_lib->delete($tmpfile, true);
             $tmpfs_lib->delete($tmpfile_thumb, true);
             $plugin =& Loader::lib('plugin');
             $plugin->trigger('uploaded_photo', $photo_id);
             return $photo_id;
         } else {
             return false;
         }
     } else {
         return false;
     }
 }
コード例 #2
0
ファイル: upload.ctl.php プロジェクト: vluo/myPoto
 function save_import()
 {
     need_login('page');
     @set_time_limit(0);
     $timestamp = time();
     $dir = $this->getPost('dir');
     $autodel = $this->getPost('autodel') ? true : false;
     $savemode = intval($this->getPost('save_mode'));
     $album_id = intval($this->getRequest('aid'));
     if (substr($dir, 0, 1) == '/' || substr($dir, 1, 1) == ':') {
         //如果是绝对地址
         $dirpath = $dir;
     } else {
         $dirpath = ROOTDIR . $dir;
     }
     //判断扫描的文件夹是否存在
     if (!is_dir($dirpath)) {
         showError(lang('scan_dir_not_exists'));
     }
     if (!is_readable($dirpath)) {
         showError(lang('dir_cannot_read'));
     }
     //开始扫描文件夹
     $alldir = getdirlist($dirpath);
     if (!$alldir) {
         showError(lang('dir_has_no_files'));
     }
     $tmpfslib =& loader::lib('tmpfs');
     $imglib =& loader::lib('image');
     $supportType = $imglib->supportType();
     $album_num = 0;
     $photos_num = 0;
     foreach ($alldir as $dir => $files) {
         if (count($files) <= 0) {
             continue;
         }
         if ($savemode == 2) {
             $dirname = file_base($dir);
             $dirname = file_en_name($dirname) ? $dirname : date('Y-m-d', $timestamp) . '_' . rand(10, 99);
             $data = array('name' => $dirname, 'create_time' => $timestamp, 'enable_comment' => 1, 'cate_id' => 0);
             //创建相册
             $album_id = $this->mdl_album->save($data);
             $album_num++;
         }
         foreach ($files as $file) {
             $file_ext = file_ext($file);
             if (!in_array($file_ext, $supportType)) {
                 continue;
             }
             //将存储的图片读取到临时文件
             $tmpfile = time() . rand(1000, 9999) . '.' . $file_ext;
             $tmpfslib->write($tmpfile, file_get_contents($file));
             $tmpfilepath = $tmpfslib->get_path($tmpfile);
             if ($this->mdl_photo->save_upload($album_id, $tmpfilepath, file_base($file))) {
                 if ($autodel) {
                     @unlink($file);
                 }
                 $photos_num++;
             }
         }
         if ($savemode == 2) {
             $this->mdl_album->update_photos_num($album_id);
             $this->mdl_album->check_repare_cover($album_id);
         }
     }
     if ($savemode == 1) {
         $this->mdl_album->update_photos_num($album_id);
         $this->mdl_album->check_repare_cover($album_id);
     }
     $msg = lang('import_success', $album_num, $photos_num);
     $this->output->set('result_msg', $msg);
     $this->output->set('album_id', $album_id);
     //面包屑
     $crumb_nav = array();
     $crumb_nav[] = array('name' => lang('upload_photo'));
     $this->page_crumb($crumb_nav);
     $page_title = lang('upload_photo') . ' - ' . $this->setting->get_conf('site.title');
     $page_keywords = $this->setting->get_conf('site.keywords');
     $page_description = $this->setting->get_conf('site.description');
     $this->page_init($page_title, $page_keywords, $page_description);
     $this->render();
 }