LZW压缩算法
Freigeben: 2016-07-25 09:07:59
Original
1590 Leute haben es durchsucht
PHP实现的LZW压缩算法
-
/**
- * @link http://code.google.com/p/php-lzw/
- * @author Jakub Vrana, http://php.vrana.cz/
- * @copyright 2009 Jakub Vrana
- * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0
- */
-
- /** LZW compression
- * @param string data to compress
- * @return string binary data
- */
- function lzw_compress($string) {
- // compression
- $dictionary = array_flip(range("\0", "\xFF"));
- $word = "";
- $codes = array();
- for ($i=0; $i $x = $string[$i];
- if (strlen($x) && isset($dictionary[$word . $x])) {
- $word .= $x;
- } elseif ($i) {
- $codes[] = $dictionary[$word];
- $dictionary[$word . $x] = count($dictionary);
- $word = $x;
- }
- }
-
- // convert codes to binary string
- $dictionary_count = 256;
- $bits = 8; // ceil(log($dictionary_count, 2))
- $return = "";
- $rest = 0;
- $rest_length = 0;
- foreach ($codes as $code) {
- $rest = ($rest $rest_length += $bits;
- $dictionary_count++;
- if ($dictionary_count > (1 $bits++;
- }
- while ($rest_length > 7) {
- $rest_length -= 8;
- $return .= chr($rest >> $rest_length);
- $rest &= (1 }
- }
- return $return . ($rest_length ? chr($rest }
-
- /** LZW decompression
- * @param string compressed binary data
- * @return string original data
- */
- function lzw_decompress($binary) {
- // convert binary string to codes
- $dictionary_count = 256;
- $bits = 8; // ceil(log($dictionary_count, 2))
- $codes = array();
- $rest = 0;
- $rest_length = 0;
- for ($i=0; $i $rest = ($rest $rest_length += 8;
- if ($rest_length >= $bits) {
- $rest_length -= $bits;
- $codes[] = $rest >> $rest_length;
- $rest &= (1 $dictionary_count++;
- if ($dictionary_count > (1 $bits++;
- }
- }
- }
-
- // decompression
- $dictionary = range("\0", "\xFF");
- $return = "";
- foreach ($codes as $i => $code) {
- $element = $dictionary[$code];
- if (!isset($element)) {
- $element = $word . $word[0];
- }
- $return .= $element;
- if ($i) {
- $dictionary[] = $word . $element[0];
- }
- $word = $element;
- }
- return $return;
- }
- $data = "";
- $compressed = lzw_compress($data);
- var_dump($data === lzw_decompress($compressed));
- ?>
复制代码
|
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
-
2024-10-22 09:46:29
-
2024-10-13 13:53:41
-
2024-10-12 12:15:51
-
2024-10-11 22:47:31
-
2024-10-11 19:36:51
-
2024-10-11 15:50:41
-
2024-10-11 15:07:41
-
2024-10-11 14:21:21
-
2024-10-11 12:59:11
-
2024-10-11 12:17:31