Example #1
0
/**
 * Обрезает анимированный .gif, оставляя только первый кадр.
 * Обрезанный гиф сохраняет в той же директории, где и оригинал, под тем же именем, только с префиксом 'na_'.
 * Если файл с таким именем (с префиксом) уже есть, то ничего не делает.
 * Возвращает в случае успеха имя обрезанного гифа, в случае ошибки (или это не анимированный гиф) -- имя оригинала.
 *
 * @param string $dir путь к оригиналу (от корня, без '/' в начале)
 * @param string $orig_name имя гифа оригинала.
 * @param string $alt_dir имя альтернативной директории для поиска файла (отличной от foto)
 * @return string имя обрезанного гифа
 */
function get_unanimated_gif($dir, $orig_name, $alt_dir = false)
{
    if (CFile::getext($orig_name) != 'gif') {
        return $orig_name;
    }
    $memBuff = new memBuff();
    $res = $memBuff->get($orig_name);
    if ($res) {
        return $res;
    }
    $orig_file = $alt_dir ? trim($alt_dir, '/') . '/' . $orig_name : "users/" . substr($dir, 0, 2) . "/" . $dir . "/foto/" . $orig_name;
    $orig_content = @file_get_contents(WDCPREFIX_LOCAL . '/' . $orig_file);
    $unan_content = unanimate_gif($orig_content);
    if ($unan_content !== false) {
        $unan_name = "na_" . $orig_name;
        $unan_file = dirname($orig_file) . "/" . $unan_name;
        $unan = new CFile($unan_file);
        if (!$unan->id) {
            $unan = new CFile($orig_file);
            $unan->name = $unan_name;
            $unan->size = strlen($unan_content);
            $put = $unan->putContent($unan_file, $unan_content);
            // Записываем измененный файл
            if ($put) {
                $memBuff->set($orig_name, $unan_name, 3600 * 12);
                return $unan_name;
            }
        } else {
            $memBuff->set($orig_name, $unan_name, 3600 * 12);
            return $unan_name;
        }
    }
    return $orig_name;
    // Если не смогли сохранить возвращаем оригинал
}
Example #2
0
 /**
  * Функция режет анимационные gif файлы сохраняя 1 кадр
  * 
  * @param string $file  Путь до файла
  * @return boolean 
  */
 public function getDisabledAnimateGIF($file = false)
 {
     if (!$file && $this->tmp_name) {
         $file = $this->tmp_name;
     } else {
         return false;
     }
     $orig_content = @file_get_contents($file);
     if (($unan_content = unanimate_gif($orig_content)) !== false) {
         file_put_contents($file, $unan_content);
     }
 }