Images.php 4.97 KB
<?php
/**
 * User: Zip
 * Date: 15/10/28
 * Time: 下午13:08
 */
namespace Plugin;
class Images
{
    private static $domain = '.static.yhbimg.com';
    private static $default_image = '/2015/08/25/02/01dd632a6e07bfef457ce4beda21dd6413.png';
    private static $domainList = array(
        '01' => array(
            'img10.static.yhbimg.com',
            'img11.static.yhbimg.com',
        ),
        '02' => array(
            'img12.static.yhbimg.com',
            'img13.static.yhbimg.com'
        ),
        'yhb-head' => 'head.static.yhbimg.com'
    );
    
    private static $staticDomain = array(
        'bucket' => ''
    );
    
    private static $qiniuDomain = 'yhfair.qiniudn.com';
    
    /**
     * 缩略图模板
     * @param $fileName
     * @param $bucket
     * @param string $position ()
     * @param string $background
     * @return string
     */
    static function template($fileName, $bucket = 'yhfair', $mode = 1)
    {

        return self::url($fileName, $bucket, $mode);
    }
    
    /**
     * 
     * @param unknown $fileName
     * @param string $bucket
     * @return string
     */
    public static function getSourceUrl($fileName, $bucket = 'yhfair')
    {
        if(preg_match('|http://|', $fileName)){
            return $fileName;
        }
        $domain = self::getDomain($bucket, $fileName);
        return 'http://' . $domain . '/' . $bucket . $fileName;
    }
    
    /**
     * 根据尺寸获得图片url
     * @param unknown $fileName
     * @param unknown $width
     * @param unknown $height
     * @param number $mode
     * @param string $bucket
     * @return mixed
     */
    public static function getImageUrl($fileName, $width, $height, $mode = 1, $bucket = 'yhfair'){
       if(!preg_match('|http://|', $fileName)){
           $fileName = self::template($fileName, $bucket, $mode);
       }
       return str_replace('{width}', $width, str_replace('{height}', $height, str_replace('{mode}', $mode, $fileName)));
    }
    
    /**
     * 缩略图模板
     * @param $fileName
     * @param $bucket
     * @param string $position ()
     * @param string $background
     * @return string
     */
    static function template2($fileName, $bucket, $position = 'center', $background = 'd2hpdGU=')
    {
        $domain = self::getDomain($bucket, $fileName);
        $key = $bucket . $fileName;
        return self::MakeBaseUrl($domain, $key) . '?imageMogr2/thumbnail/{width}x{height}/extent/{width}x{height}/background/' . $background . '/position/' . $position.'/quality/90';
    }
    
    /**
     * 获取图片URL模板
     * @param $fileName
     * @param int $mode
     * @param string $bucket
     * @return string
     */
    public static function url($fileName, $bucket = 'yhfair', $mode = 1)
    {
        $domain = self::getDomain($bucket, $fileName);
        return self::getImgTemplateUrl($bucket . $fileName, $mode, $domain);
    }
    
    public static function getDomain($bucket, $fileName)
    {
        $domain = '';
        if(!empty(self::$domainList[$bucket])){
            $domain = self::$domainList[$bucket];
        }else{
            $node = mb_substr($fileName, 15, 2);
            if (!empty(self::$domainList[$node])) {
                $domainList = self::$domainList[$node];
                $nodeNum = sprintf('%u', crc32($fileName)) % count($domainList);
                $domain = $domainList[$nodeNum];
            }
        }
        return $domain;
    }
    
    /**
     * 获取模板的图片地址
     * @param $fileName
     * @param int $width
     * @param int $height
     * @param int $mode
     * @param null $domain
     * @return string
     */
    private static function getImgTemplateUrl($fileName, $mode = 1, $domain = null)
    {
        if ($domain == null) {
            $domain = self::$qiniuDomain;
        }
        $baseUrl = self::MakeBaseUrl($domain, $fileName);
        return self::MakeTemplateRequest($baseUrl);
    }
    
    private static function MakeBaseUrl($domain, $key) // => $baseUrl
    {
        $keyEsc = str_replace("%2F", "/", rawurlencode($key));
        return "http://$domain/$keyEsc";
    }
    
        private static function MakeTemplateRequest($url)
        {
        $ops = array();
            $ops[] = '{mode}';
            $ops[] = 'w/{width}';
            $ops[] = 'h/{height}';
                if (empty($ops)) {
            return $url;
            }
            return $url . "?imageView/" . implode('/', $ops);
        }

    /**
     * 获取老的图片地址
     * @param $fileName
     * @param $bucket
     * @param $width
     * @param $height
     * @param string $position
     * @param string $background
     * @return mixed
     */
    public static function getUrl($fileName,$width,$height,$bucket, $position = 'center', $background = 'd2hpdGU=')
    {
        if(empty($fileName)){
            $fileName = self::$default_image;
        }
        $url = self::template2($fileName, $bucket, $position, $background);
        return str_replace(array('{width}','{height}'),array($width,$height),$url);
    }
}