| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199 | import $store from '@/sheep/store';import { staticUrl } from '@/sheep/config';const cdn = (url = '', cdnurl = '') => {  if (!url) return '';  if (url.indexOf('http') === 0) {    return url;  }  if (cdnurl === '') {    cdnurl = $store('app').info.cdnurl;  }  return cdnurl + url;};export default {  // 添加cdn域名前缀  cdn,  // 对象存储自动剪裁缩略图  thumb: (url = '', params) => {    url = cdn(url);    return append_thumbnail_params(url, params);  },  // 静态资源地址  static: (url = '', staticurl = '') => {    if (staticurl === '') {      staticurl = staticUrl;    }    if (staticurl !== 'local') {      url = cdn(url, staticurl);    }    return url;  },  // css背景图片地址  css: (url = '', staticurl = '') => {    if (staticurl === '') {      staticurl = staticUrl;    }    if (staticurl !== 'local') {      url = cdn(url, staticurl);    }    // #ifdef APP-PLUS    if (staticurl === 'local') {      url = plus.io.convertLocalFileSystemURL(url);    }    // #endif    return `url(${url})`;  },};/** * 追加对象存储自动裁剪/压缩参数 * * @return string */function append_thumbnail_params(url, params) {  const filesystem = $store('app').info.filesystem;  if (filesystem === 'public') {    return url;  }  let width = params.width || '200'; // 宽度  let height = params.height || '200'; // 高度  let mode = params.mode || 'lfit'; // 缩放模式  let quality = params.quality || 90; // 压缩质量  let gravity = params.gravity || 'center'; // 剪裁质量  let suffix = '';  let crop_str = '';  let quality_str = '';  let size = width + 'x' + height;  switch (filesystem) {    case 'aliyun':      // 裁剪      if (!gravity && gravity != 'center') {        // 指定了裁剪区域        mode = 'mfit';        crop_str = '/crop,g_' + gravityFormat('aliyun', gravity) + ',w_' + width + ',h_' + height;      }      // 质量压缩      if (quality > 0 && quality < 100) {        quality_str = '/quality,q_' + quality;      }      // 缩放参数      suffix = 'x-oss-process=image/resize,m_' + mode + ',w_' + width + ',h_' + height;      // 拼接裁剪和质量压缩      suffix += crop_str + quality_str;      break;    case 'qcloud':      let mode_str = 'thumbnail';      if (mode == 'fill' || (!gravity && gravity != 'center')) {        // 指定了裁剪区域        mode_str = 'crop';        mode = 'fill';        crop_str = '/gravity/' + gravityFormat('qcloud', gravity);      }      // 质量压缩      if (quality > 0 && quality < 100) {        quality_str = '/rquality/' + quality;      }      switch (mode) {        case 'lfit':          size = '' + size + '>';          break;        case 'mfit':          size = '!' + size + 'r';        case 'fill':          break;        case 'pad':          size = size + '/pad/1';          break;        case 'fixed':          size = size + '!';          break;      }      suffix = 'imageMogr2/' + mode_str + '/' + size + crop_str + quality_str;      break;    case 'qiniu':      if (mode == 'fill' || (!gravity && gravity != 'center')) {        // 指定了裁剪区域,全部转为 mfit        mode = 'mfit';        crop_str = '/gravity/' + gravityFormat('qiniu', gravity) + '/crop/' + size;      }      // 质量压缩      if (quality > 0 && quality < 100) {        quality_str = '/quality/' + quality;      }      switch (mode) {        case 'lfit':        case 'pad': // 七牛不支持在缩放之后,尺寸不足时,填充背景色,所以这里和 lfit 模式一样          size = size + '>';          break;        case 'mfit':          size = '!' + size + 'r';          break;        case 'fill':          // 会被转为 mfit          break;        case 'fixed':          size = size + '!';          break;      }      suffix = 'imageMogr2/thumbnail/' + size + crop_str + quality_str;      break;  }  return url + '?' + suffix;}/** * 裁剪区域格式转换 * * @param string $type aliyun|qcloud|qiniu * @param string $gravity 统一的裁剪区域字符 * * @return string */function gravityFormatMap(type, gravity) {  let gravityFormat = {    aliyun: {      north_west: 'nw', // 左上      north: 'north', // 中上      north_east: 'ne', // 右上      west: 'west', // 左中      center: 'center', // 中部      east: 'east', // 右中      south_west: 'sw', // 左下      south: 'south', // 中下      south_east: 'se', // 右下    },    qcloud: {      northwest: 'nw', // 左上      north: 'north', // 中上      northeast: 'ne', // 右上      west: 'west', // 左中      center: 'center', // 中部      east: 'east', // 右中      southwest: 'sw', // 左下      south: 'south', // 中下      southeast: 'se', // 右下    },    qiniu: {      NorthWest: 'nw', // 左上      North: 'north', // 中上      NorthEast: 'ne', // 右上      West: 'west', // 左中      Center: 'center', // 中部      East: 'east', // 右中      SouthWest: 'sw', // 左下      South: 'south', // 中下      SouthEast: 'se', // 右下    },  };  return gravityFormat[type][gravity];}
 |