RLE压缩及优化--图片压缩

分类: 开发经验以及优化 2005-03-23 17:55 535人阅读 评论(0) 收藏 举报

简单的说RLE压缩就是将一串连续的相同数据转化为特定的格式达到压缩的目的。

下面都对byte流压缩。
如输入数据
LPBTE pByte={1,1,1,1,1,1};
压缩的数据为6,1
压缩了4个字符。

但是在数据流里面不能直接这么替换,而应该使用特殊的控制字符,否则无法解压。

比如pByte={6,1,0,1,1,1,1,1,1};

这样有两个6,1无法判断是原有的6,1还是{1,1,1,1,1,1}压缩后的代码。

所以应该有控制字符。
(1)
为了达到最大压缩率,可以先扫描源数据流,使用最少出现的字符做控制字符。

如 pByte={6,1,0,1,1,1,1,1,1,...};
扫描后发现0为最少出现的字符。

我们使用0作为压缩的控制,其他字符代表他本身。源数据里面的0,用0,0来表示。
那么pByte压缩后为
6,1,0,0,0,6,1 ......

解压时 BYTE a,b,c;

a=依次扫描压缩数据,如果输入字符为非控制字符,则直接输出到解压流。

如果为控制字符,b=其下一字符是否也为控制字符,如果是,在输出流输出控制字符的代码。

如果不是c=读压缩流,然后输出b个c到输出流。

注意:该处对于>Ctrlcode 的编码需要自己计算偏移.

如ctrl=2.那么n=3时应该修正为2.

刚才介绍的方法是最大压缩率的,但是因为对每个输入字符需要检查,速度不算快。

(2)
为了增加解压速度,可以采用其他的编码方式。
主要方法是不对每个输入字符进行检查,只检查较少次就达到几乎相同的压缩率。

来看看这个改进的方法。

仔细观察,其实对不重复的字符也可以用控制n+数据的方式表示。这里的n带表n个未压缩数据。

还是刚才的数据。
pByte={6,1,0,1,1,1,1,1,1}
不用扫描选择0为控制

压缩为3,{6,1,0,} 0,  6, 1
   n      ctrl n m

解压就非常方便了

扫描数据读一个字符,
{
n=read;
if(n)
          {  
字符拷贝n个
          }
else
{
n=read();
m=read;
write (n个m);
}

}

(3)优化

对(1)的优化。
观察得知,1,1,1这样的数据压缩率为0,
所以当n<=3时不用压缩。
而直接写为1,1,1样的格式。

另外如果有多个控制字符连续。也可以压缩。
观察ctrl=0;
0,0,0,0
如果用控制编码为8个0
而压缩编码为0,4,0 所以控制字符连续两个即可压缩。

对(2):

只对压缩编码优化。

1,2,3,4,1,1
如果死套公式,为
4,1,2,3,4,0,2,1
反倒增加2个字节。
如果用
6,1,2,3,4,1,1只增加一个字节。

转载于:https://www.cnblogs.com/xiayong123/archive/2012/01/09/3717165.html

RLE压缩及优化--图片压缩相关推荐

  1. Python模块学习 - 用tinify模块压缩和优化图片

    Python模块学习 - 用tinify模块压缩和优化图片 tinify模块 功能描述:TinyPNG和TinyJPG网站提供了压缩和优化.png和.jpg格式图片的功能.虽然可以很轻松地使用网页版进 ...

  2. 性能优化——图片压缩、加载和格式选择

    本文首发于政采云前端团队博客:性能优化--图片压缩.加载和格式选择 https://www.zoo.team/article/images-compress 前言 相信大家都听说过 "258 ...

  3. Android性能优化——图片压缩的终极选择libjpeg-turbo

    文章目录 概述 需求分析 各种压缩方式 libjepg-turbo+jnigraphics 介绍 编译 使用 引用文章 概述 之前在网络上搜索Android图片压缩,能看到各种各样的关于图片压缩的文章 ...

  4. [Python模块学习]用tinify模块压缩和优化图片

    tinify模块 by: uizuizui 功能描述:TinyPNG和TinyJPG网站提供了压缩和优化.png和.jpg格式图片的功能.虽然可以很轻松地使用网页版进行操作,但是在搭建个人博客的时候, ...

  5. java jpeg压缩解码_图片压缩(iOS)

    场景很简单,上传图片前压缩图片,节省流量和发图时间.最近看了看 iOS 的静态图片压缩,这里记个笔记.本人之前没学过 iOS 和 Swift,本文是一篇入门文章,描述不到位之处请大家多多批评斧正. ̄ω ...

  6. python图像文件压缩_python实现图片压缩代码实例

    前言 项目中大量用到图片加载,由于图片太大,加载速度很慢,因此需要对文件进行统一压缩 一:导入包 from PIL import Image import os 二:获取图片文件的大小 def get ...

  7. jpg如何压缩?jpg图片压缩大小怎么改?

    日常使用的jpg图片太多,时间久了,就会占用电脑的内存空间,非常影响我们的使用和储存,这时候需要压缩jpg.其实想要将jpg图片压缩大小的话,可以使用压缩图的图片处理工具,利用jpg压缩(https: ...

  8. 迅捷在线压缩将JPG图片压缩的方法

    将我们的图片在线压缩的方法有很多种,图片的格式也分为很多种,我们需要将jpg格式的图片进行压缩,那么我们是怎么进行在线压缩的呢?下面就让小编简单的给大家介绍一下. 步骤一:等准备好之后就可以直接进入到 ...

  9. java 图片压缩100k_Java 实现图片压缩的两种方法

    问题背景. 典型的情景:Nemo社区中,用户上传的图片免不了要在某处给用户做展示. 如用户上传的头像,那么其他用户在浏览该用户信息的时候,就会需要回显头像信息了. 用户上传的原图可能由于清晰度较高而体 ...

最新文章

  1. 华为4G路由器成软银快速部署宽带业务新利器
  2. 计算机osi模型的功能osi,OSI基本参考模型是什么 OSI基本参考模型各层功能介绍【图文】...
  3. http协议以及get和post请求
  4. android设置系统横屏方案
  5. 2016年 第07届 蓝桥杯 Java B组 决赛真题详解及小结
  6. git中如何合并某个指定文件?
  7. ios15 LJScrollPageVC第三方框架的使用
  8. P2168 [NOI2015] 荷马史诗(哈夫曼编码树)
  9. 工作290:js日期操作
  10. 系统架构设计师 - 第三方认证服务
  11. java环境变量设置详解_JAVA环境变量配置详解(Windows)
  12. 微信小程序 页面如何自动滚动到底部
  13. Android 匿名共享内存Java接口分析
  14. 后台访问突然出现一串代码,且不能显示页面
  15. 无线通信中的IQ调制,BPSK调制,QPSK调制,16QAM调制的理解
  16. CSS+DIV-网页变幻(HTML篇)
  17. javaSE之异常详解(1)
  18. 计算机人脸识别算哪个专业,人脸识别属于计算机什么领域(图文)
  19. BT.656标准简介-内同步并口-以及波形测量
  20. 最全ARM体系结构知识:汇编、架构、异常级别和安全状态

热门文章

  1. 雷军是这样评价马斯克的
  2. 怎么把GMS的软件转到HMS
  3. Elasticsearch查询速度为什么这么快?
  4. 为什么中国没有类似于windows的操作系统?
  5. Go语言并发模型:使用 context
  6. SpringMVC_day1_常用注解
  7. 为SQL Server Always On可用性组配置故障转移群集,存储控制器和仲裁配置
  8. sql简介_SQL简介
  9. 使用SSIS包将多个Excel文件中的数据导入SQL Server表中
  10. Android在WindowManagerService和ActivityManagerService中的Token