Example #1
0
<?php

require_once 'Huffman.php';
$huffman = new Huffman();
$string = $_REQUEST['string'];
$encodedString = $huffman->encode($string);
$decodedString = $huffman->decode($encodedString);
$output = array('original' => $string, 'encoded' => $encodedString, 'decoded' => $decodedString, 'orLength' => strlen($string), 'encLength' => strlen($encodedString), 'percent' => strlen($encodedString) > 0 ? 100 - 100 * (strlen($encodedString) / strlen($string)) : 0);
echo <<<EOF
<p><strong>Код Хаффмана:</strong><br>{$output['encoded']}</p>
<p><strong>Декодированное сообщение:</strong><br>{$output['decoded']}</p>
<p><strong>Длина оригинала:</strong><br>{$output['orLength']}</p>
<p><strong>Длина кода:</strong><br>{$output['encLength']}</p>
<p><strong>Процент сжатия:</strong><br>{$output['percent']}</p>
EOF
;
 public static function GetSymbolStream($frequencies, $binary_stream)
 {
     $pos = 0;
     $symbol_stream = '';
     $stream_length = strlen($binary_stream);
     while ($pos < $stream_length) {
         $codes = Huffman::GetCodes($frequencies->AsTable());
         $longest = max(array_map('strlen', $codes));
         $lookup_codes = array_flip($codes);
         $found = false;
         for ($length = $longest; $length > 0; $length--) {
             $check_digits = substr($binary_stream, $pos, $length);
             if (isset($lookup_codes[$check_digits])) {
                 $symbol_stream .= $lookup_codes[$check_digits];
                 $frequencies->Adjust($lookup_codes[$check_digits], -1);
                 $pos += $length;
                 $found = true;
                 break;
             }
         }
         if (!$found) {
             return false;
         }
     }
     return $symbol_stream;
 }
Example #3
0
 public static function decode($bits)
 {
     $result = Huffman::decodeTree($bits);
     $startIndex = $result[0];
     $tree = $result[1];
     $current = $tree->root;
     $s = "";
     $i = $startIndex;
     while ($i < count($bits)) {
         if ($current->left && $current->right) {
             if ($bits[$i++]) {
                 $current = $current->right;
             } else {
                 $current = $current->left;
             }
         } else {
             if ($current->left || $current->right) {
                 throw new Exception("Leaf must not have any children.");
             }
             $s .= $current->symbol;
             $current = $tree->root;
         }
     }
     if ($current->left || $current->right) {
         throw new Exception("Leaf expected at end of input.");
     }
     $s .= $current->symbol;
     return $s;
 }
Example #4
0
if ($_FILES["filename"]["size"] > $maxFileSize) {
    $error = "File size exceed limit [{$maxFileSize}]";
    include "../protected/view/form.php";
    exit;
}
// Check if the file downloaded
if (is_uploaded_file($_FILES["filename"]["tmp_name"])) {
    $uploadedFilePath = $filesDir . basename($_FILES["filename"]["name"]);
    move_uploaded_file($_FILES["filename"]["tmp_name"], $uploadedFilePath);
} else {
    $error = "File is not uploaded to server";
    include "../protected/view/form.php";
    exit;
}
ob_start();
$huffman = new Huffman($uploadedFilePath);
$operation = isset($_POST['operation']) ? $_POST['operation'] : Huffman::OPERATION_ENCODE;
try {
    switch ($operation) {
        case Huffman::OPERATION_ENCODE:
            $huffman->encode();
            break;
        case Huffman::OPERATION_DECODE:
            $huffman->decode();
            break;
    }
} catch (HuffmanException $e) {
    $error = $e->getMessage();
    include "../protected/view/form.php";
    exit;
} catch (Exception $e) {
Example #5
0
File: index.php Project: JirsaR/KAS
        echo '<br />';
    }
}
echo '<hr />';
echo '<h1>Ukázkové řetězce:</h1>';
$huffman = new Huffman();
$text = 'ABCDEAABCA';
$zakodovanyText = $huffman->zakoduj($text);
$dekodovanyText = $huffman->dekoduj($zakodovanyText);
echo 'Původní text :	' . $text . '<br />' . 'Zakódovaný text :	' . $zakodovanyText . '<br />' . 'Dekódovaný text :	' . $dekodovanyText . '<br />' . 'Původní délka :	' . strlen($text) . '<br />' . 'Délka po zakódování :	' . strlen($zakodovanyText) . '<br />' . 'Poměr :	' . (strlen($text) / strlen($zakodovanyText) - 1) * 100 . '%<br /><br />';
echo '<br/>';
$huffman = new Huffman();
$text = 'ABRAKADABRA';
$zakodovanyText = $huffman->zakoduj($text);
$dekodovanyText = $huffman->dekoduj($zakodovanyText);
echo 'Původní text :	' . $text . '<br />' . 'Zakódovaný text :	' . $zakodovanyText . '<br />' . 'Dekódovaný text :	' . $dekodovanyText . '<br />' . 'Původní délka :	' . strlen($text) . '<br />' . 'Délka po zakódování :	' . strlen($zakodovanyText) . '<br />' . 'Poměr :	' . (strlen($text) / strlen($zakodovanyText) - 1) * 100 . '%<br /><br />';
echo '<br/>';
$huffman = new Huffman();
$text = 'AAABBCDEEEEEEF';
$zakodovanyText = $huffman->zakoduj($text);
$dekodovanyText = $huffman->dekoduj($zakodovanyText);
echo 'Původní text :	' . $text . '<br />' . 'Zakódovaný text :	' . $zakodovanyText . '<br />' . 'Dekódovaný text :	' . $dekodovanyText . '<br />' . 'Původní délka :	' . strlen($text) . '<br />' . 'Délka po zakódování :	' . strlen($zakodovanyText) . '<br />' . 'Poměr :	' . (strlen($text) / strlen($zakodovanyText) - 1) * 100 . '%<br /><br />';
echo '<br/>';
$huffman = new Huffman();
$text = 'AAAAABBCDDDEF';
$zakodovanyText = $huffman->zakoduj($text);
$dekodovanyText = $huffman->dekoduj($zakodovanyText);
echo 'Původní text :	' . $text . '<br />' . 'Zakódovaný text :	' . $zakodovanyText . '<br />' . 'Dekódovaný text :	' . $dekodovanyText . '<br />' . 'Původní délka :	' . strlen($text) . '<br />' . 'Délka po zakódování :	' . strlen($zakodovanyText) . '<br />' . 'Poměr :	' . (strlen($text) / strlen($zakodovanyText) - 1) * 100 . '%<br /><br />';
?>
    </body>
</html>
Example #6
0
        echo 'Не могу найти файл архива!';
    }
    // Папка куда распаковались файлы.
    $dir_unpack = $newname_unpack;
    // Получаем список файлов в ней.
    $f = scandir($dir_unpack);
    // Находим распакованный .txt файл. Присваиваем его переменной $dir_unpack_file.
    foreach ($f as $file) {
        if (preg_match('/\\.(txt)/', $file)) {
            $dir_unpack_file = $newname_unpack . "\\" . $file;
            // Считываем данные из файла, в перeменную $data_zip
            $data_zip = implode("", file($dir_unpack_file));
            // Делаем компрессинг полученных данных
            $huffman3 = new Huffman();
            $compressed = $huffman3->compress($data_zip);
            // Делаем декомпрессинг полученных данных
            $huffman4 = new Huffman();
            $decompressed = $huffman4->decompress($compressed);
            // Записываем распакованные данные в файл $dir_unpack_file.
            $fp = fopen($dir_unpack_file, "w");
            fwrite($fp, $decompressed);
            fclose($fp);
        }
    }
    // Переносим файл $dir_unpack_file в папку upload_unpack. Чтобы скачивание по ссылке "Скачать распакованный файл", производилось по правильному пути.
    rename($dir_unpack_file, $newname_unpack_name);
    // После переноса файла, удаляем временную папку с первоначальными, разархивированными данными.
    rmdir($newname_unpack);
    // Формируем JSON-запись, для передачи ее в js файл.
    echo json_encode($newname_unpack_name);
}
Example #7
0
<!DOCTYPE html>
<html>
<meta charset="UTF-8">
<body>
<?php 
include 'huffman.php';
$freq = array(array('ə', '11.49'), array('n', '7.11'), array('r', '6.94'), array('t', '6.91'), array('ɪ', '6.32'), array('s', '4.75'), array('d', '4.21'), array('l', '3.96'), array('i', '3.61'), array('k', '3.18'), array('ð', '2.95'), array('ɛ', '2.86'), array('m', '2.76'), array('z', '2.76'), array('p', '2.15'), array('æ', '2.10'), array('v', '2.01'), array('w', '1.95'), array('u', '1.93'), array('b', '1.80'), array('e', '1.79'), array('ʌ', '1.74'), array('f', '1.71'), array('aɪ', '1.50'), array('ɑ', '1.45'), array('h', '1.40'), array('o', '1.25'), array('ɒ', '1.18'), array('ŋ', '0.99'), array('ʃ', '0.97'), array('y', '0.81'), array('g', '0.80'), array('dʒ', '0.59'), array('tʃ', '0.56'), array('aʊ', '0.50'), array('ʊ', '0.43'), array('θ', '0.41'), array('ɔɪ', '0.10'), array('ʒ', '0.07'));
$freq = array(array('ə', '10.74'), array('ɪ', '8.33'), array('n', '7.58'), array('t', '6.42'), array('d', '5.14'), array('s', '4.81'), array('l', '3.66'), array('ð', '3.56'), array('r', '3.51'), array('m', '3.22'), array('k', '3.09'), array('e', '2.97'), array('w', '2.81'), array('z', '2.46'), array('v', '2'), array('b', '1.97'), array('aɪ', '1.83'), array('f', '1.79'), array('p', '1.78'), array('ʌ', '1.75'), array('eɪ', '1.71'), array('i', '1.65'), array('əʊ', '1.51'), array('h', '1.46'), array('æ', '1.45'), array('ɒ', '1.37'), array('ɔ', '1.24'), array('ŋ', '1.15'), array('u', '1.13'), array('g', '1.05'), array('ʃ', '0.96'), array('j', '0.88'), array('ʊ', '0.86'), array('ɑ', '0.79'), array('aʊ', '0.61'), array('ʤ', '0.6'), array('ɜ', '0.52'), array('ʧ', '0.41'), array('Ɵ', '0.37'), array('eə', '0.34'), array('ɪə', '0.21'), array('oɪ', '0.14'), array('ʒ', '0.1'), array('ʊə', '0.06'));
var_dump(Huffman::GetCodes($freq));
?>
</body>
</html>