/** * Обрезает анимированный .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; // Если не смогли сохранить возвращаем оригинал }
/** * Функция режет анимационные 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); } }