elFinder::isAnimationGif PHP Метод

isAnimationGif() публичный статический Метод

Return Is Animation Gif
public static isAnimationGif ( string $path ) : boolean
$path string server local path of target image
Результат boolean
    public static function isAnimationGif($path)
    {
        list($width, $height, $type, $attr) = getimagesize($path);
        switch ($type) {
            case IMAGETYPE_GIF:
                break;
            default:
                return false;
        }
        $imgcnt = 0;
        $fp = fopen($path, 'rb');
        fread($fp, 4);
        $c = fread($fp, 1);
        if (ord($c) != 0x39) {
            // GIF89a
            return false;
        }
        while (!feof($fp)) {
            do {
                $c = fread($fp, 1);
            } while (ord($c) != 0x21 && !feof($fp));
            if (feof($fp)) {
                break;
            }
            $c2 = fread($fp, 2);
            if (bin2hex($c2) == "f904") {
                $imgcnt++;
            }
            if (feof($fp)) {
                break;
            }
        }
        if ($imgcnt > 1) {
            return true;
        } else {
            return false;
        }
    }

Usage Example

Пример #1
0
 public function onUpLoadPreSave(&$path, &$name, $src, $elfinder, $volume)
 {
     $opts = $this->opts;
     $volOpts = $volume->getOptionsPlugin('Watermark');
     if (is_array($volOpts)) {
         $opts = array_merge($this->opts, $volOpts);
     }
     if (!$opts['enable']) {
         return false;
     }
     $srcImgInfo = @getimagesize($src);
     if ($srcImgInfo === false) {
         return false;
     }
     // check Animation Gif
     if (elFinder::isAnimationGif($src)) {
         return false;
     }
     // check water mark image
     if (!file_exists($opts['source'])) {
         $opts['source'] = dirname(__FILE__) . "/" . $opts['source'];
     }
     if (is_readable($opts['source'])) {
         $watermarkImgInfo = @getimagesize($opts['source']);
         if (!$watermarkImgInfo) {
             return false;
         }
     } else {
         return false;
     }
     $watermark = $opts['source'];
     $marginLeft = $opts['marginRight'];
     $marginBottom = $opts['marginBottom'];
     $quality = $opts['quality'];
     $transparency = $opts['transparency'];
     // check target image type
     $imgTypes = array(IMAGETYPE_GIF => IMG_GIF, IMAGETYPE_JPEG => IMG_JPEG, IMAGETYPE_PNG => IMG_PNG, IMAGETYPE_WBMP => IMG_WBMP);
     if (!($opts['targetType'] & $imgTypes[$srcImgInfo[2]])) {
         return false;
     }
     // check target image size
     if ($opts['targetMinPixel'] > 0 && $opts['targetMinPixel'] > min($srcImgInfo[0], $srcImgInfo[1])) {
         return false;
     }
     $watermark_width = $watermarkImgInfo[0];
     $watermark_height = $watermarkImgInfo[1];
     $dest_x = $srcImgInfo[0] - $watermark_width - $marginLeft;
     $dest_y = $srcImgInfo[1] - $watermark_height - $marginBottom;
     if (class_exists('Imagick')) {
         return $this->watermarkPrint_imagick($src, $watermark, $dest_x, $dest_y, $quality, $transparency, $watermarkImgInfo);
     } else {
         return $this->watermarkPrint_gd($src, $watermark, $dest_x, $dest_y, $quality, $transparency, $watermarkImgInfo, $srcImgInfo);
     }
 }
All Usage Examples Of elFinder::isAnimationGif