最简单的压缩代码

 

None.gif          static   string  InFilePath  =   @" C:\Documents and Settings\wuy\桌面\新建 文本文档.txt " ;
None.gif        
static   string  OutFilePath  =   @" C:\Documents and Settings\wuy\桌面\新建 文本文档.zip " ;
None.gif
None.gif        
private   void  button1_Click( object  sender, EventArgs e)
ExpandedBlockStart.gifContractedBlock.gif        
dot.gif {
InBlock.gif            FileInfo file 
= new FileInfo(InFilePath);
InBlock.gif            Crc32 crc 
= new Crc32();
InBlock.gif            ZipOutputStream ou
=new ZipOutputStream(File.Create(OutFilePath));
InBlock.gif            ou.SetLevel(
9);    //压缩等级,越第越大   0~9;
InBlock.gif

InBlock.gif            FileStream fs 
= File.OpenRead(InFilePath);
InBlock.gif            Byte[] buffer 
= new byte[file.Length];
InBlock.gif            fs.Read(buffer, 
0, buffer.Length);
InBlock.gif            ZipEntry entry 
= new ZipEntry("aa.txt");  //压缩后的文件属性
InBlock.gif            
//entry.DateTime = DateTime.Now;
InBlock.gif            
//entry.Size = fs.Length;
InBlock.gif
            fs.Close();
InBlock.gif            
//crc.Reset();                              //内存算法,基本没用
InBlock.gif           
// crc.Update(buffer);
InBlock.gif            
//entry.Crc = crc.Value;
InBlock.gif
            ou.PutNextEntry(entry);
InBlock.gif            ou.Write(buffer, 
0, buffer.Length);
InBlock.gif            ou.Finish();
InBlock.gif            ou.Close();
ExpandedBlockEnd.gif        }

None.gif
posted on 2006-11-07 15:38 吴勇 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/wuyong/archive/2006/11/07/553006.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的PPM数据压缩代码实现,基于霍夫曼编码算法: ```python import heapq import struct class Node: def __init__(self, freq, symbol=None, left=None, right=None): self.freq = freq self.symbol = symbol self.left = left self.right = right def __lt__(self, other): return self.freq < other.freq def build_huffman_tree(freq_table): heap = [] for symbol, freq in freq_table.items(): heapq.heappush(heap, Node(freq, symbol)) while len(heap) > 1: left = heapq.heappop(heap) right = heapq.heappop(heap) parent = Node(left.freq + right.freq, left=left, right=right) heapq.heappush(heap, parent) return heap[0] def build_freq_table(data): freq_table = {} for symbol in data: if symbol in freq_table: freq_table[symbol] += 1 else: freq_table[symbol] = 1 return freq_table def encode_huffman_tree(node, code_table, code=''): if node.symbol is not None: code_table[node.symbol] = code else: encode_huffman_tree(node.left, code_table, code+'0') encode_huffman_tree(node.right, code_table, code+'1') def compress_ppm_data(data): freq_table = build_freq_table(data) huffman_tree = build_huffman_tree(freq_table) code_table = {} encode_huffman_tree(huffman_tree, code_table) encoded_data = '' for symbol in data: encoded_data += code_table[symbol] # padding padding_len = 8 - len(encoded_data) % 8 encoded_data += '0' * padding_len # write encoded data to binary file with open('compressed.ppm', 'wb') as f: # write huffman tree write_huffman_tree(huffman_tree, f) # write padding length f.write(struct.pack('B', padding_len)) # write encoded data for i in range(0, len(encoded_data), 8): byte = encoded_data[i:i+8] f.write(struct.pack('B', int(byte, 2))) def write_huffman_tree(node, f): if node.symbol is not None: f.write(b'\x01') f.write(struct.pack('B', ord(node.symbol))) else: f.write(b'\x00') write_huffman_tree(node.left, f) write_huffman_tree(node.right, f) def main(): with open('image.ppm', 'rb') as f: data = f.read() # compress ppm data compress_ppm_data(data) if __name__ == '__main__': main() ``` 上述代码中,`compress_ppm_data`函数用于压缩PPM数据,首先通过`build_freq_table`函数构建数据中每个字符出现的频率表,然后使用`build_huffman_tree`函数构建霍夫曼树,再通过`encode_huffman_tree`函数将霍夫曼树编码为一个二进制字符串,最后将数据按照霍夫曼编码转换为字符串,并进行填充,将结果写入到二进制文件中。`write_huffman_tree`函数用于将霍夫曼树写入到二进制文件中。 需要注意的是,这只是一个简单的实现,实际情况中还需要考虑更多的细节和优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值