`
什么世道
  • 浏览: 221567 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

自定义压缩图片格式

阅读更多

    之前一篇博文是关于BMP格式的读取和存储,BMP文件存储数据时,图像的扫描方式是按从左到右、从下到上的顺序。因为不采用其他任何压缩,因此,文件所占用的空间很大。

 

    而现在普遍使用的图片格式标准有jpg,gif等,

但这些都是有损压缩,以牺牲重复或不重要的资料为代价减少占用空间。

 

    于是,我们自己可以定义一种无损压缩图片格式,从而达到无损又小巧的图片存储

 

压缩格式一:

    假如一张图片中有一种颜色范围特别多,我们可以考虑用稀疏矩阵的来存储图片每个像素点的信息

而不将每个点的信息都记录下来。如我在window自带的画图中新建了一个BMP文件,随便画了一个图形

因为默认的背景色是白色,所以文件中图像信息部分十六进制编码都是FF,假如用稀疏矩阵来存储图片像素信息。

例如:

 

我们只需要存储32*3的阵列,而不存储16*16的阵列

6 3 00
6 4 00
6 5 00
10 8 E7
10 9 A9
... ... ...

那么,图片占用大小就大大缩减了。

 

定义mybmp格式如下

文件头(bitmap-file header)、信息头(information header)、彩色表(color table)和用稀疏矩阵定义图像数据阵列,它具有如下所示的形式。

 

public class mybmp_Fomat{

	/**
	 * file header(6 byte)
	 * 
	 * 
	 */
	class FILEHEADER {
		short bfType;// the type of file,
		int bfSize;// the size of file.
	}

	/**
	 * information header(16 byte)
	 * 
	 */
	class INFOHEADER {
		int biWidth;// the width of bmp file.(19-22 byte)
		int biHeight;// the height of bmp file.(23-26 byte)
		int mainSum;//比例最大的一种颜色的像素数目
		RGBQUAD mainColor; //比例最大的一种颜色的RGB
	}
	
	/**
	 * 其他颜色像素点的坐标(2 byte)
	 * 
	 */
	class Point{
		int x;
		int y;
	}

	/**
	 * color table(4 byte)
	 *  
	 */
	class RGBQUAD {
		byte rgbRed;// the red channel
		byte rgbGreen;// the Green channel
		byte rgbBlue;// the blue channel
		byte rgbReserved;// reserved,value of 0 only
	}

	/**
	 * Data Bits
	 * 
	 */
	class BITMAPINFO {
		Point[] points;
		RGBQUAD[] bmiColors;
	}
}

     

读取图片时,先获取图片信息头和文件头,在图片的长宽范围内,先将其他

颜色的位置填充对应的颜色,在将剩余的位置填充上主要颜色,无需颜色的处理。

 

     此bpm文件属性 95*101 白色像素点7184

    原BMP文件格式大小 14 + 40 + 4 *(biWidth*biHeight)= 28.4KB

    自定义文件格式文件的大小为6 + 16 + (2+4)*(biWidth*biHeight - mainSum)= 14.48KB

这样这张图片就节省了一半的空间。

 

压缩格式二:

    还可以用一种无损压缩方式来定义压缩图片格式,文件头和信息头与BMP文件无异,只是改变图片像素颜色部分的存储编码。用的哈夫曼编码压缩BMP的图片像素颜色信息。

    读取图片就直接用哈夫曼转码还原图片信息。这样就可以达到图片无损压缩的要求了。

 

 

  • 大小: 3.1 KB
1
1
分享到:
评论

相关推荐

    自定义图片压缩工具

    图片压缩工具类,【根据设置的宽高等比例压缩图片文件】、【 按照宽度还是高度进行压缩】、【 压缩制定大小图片】、【强制压缩/放大图片到固定的大小】

    TinyMCE自定义上传图片

    在这个场景中,我们将重点讨论如何在TinyMCE中实现自定义图片上传功能。 首先,我们需要理解TinyMCE的插件系统。TinyMCE的插件是可插入到编辑器中的独立功能模块,它们通常包含JavaScript代码,用于扩展编辑器的...

    html纯前端压缩图片神器,js压缩图片保持原有像素,html图片压缩自定义大小

    本文将详细介绍一个基于HTML、JavaScript(jQuery和LayUI库)的纯前端图片压缩工具,它能够帮助开发者在不改变原始像素的情况下压缩图片,并允许自定义压缩质量、缩放大小和图片类型。 标题中的"html纯前端压缩图片...

    自定义网络图片控件

    - 图片加载异常处理,如网络错误、图片格式不支持等。 - 适配不同屏幕尺寸和密度,保证图片显示效果一致性。 通过以上技术实现的自定义网络图片控件,不仅可以提升应用的性能,还能提供流畅的用户体验,同时具备...

    照片或图片格式转换软件,能够压缩图片大小

    照片或图片格式转换软件是解决这一问题的重要工具,它可以帮助用户轻松地将图片从一种格式转换为另一种,同时还能有效地压缩图片大小,以便于存储、传输和快速加载。以下是对这个主题的详细讲解。 1. **图片格式**...

    鲁班Luban压缩图片(仿微信朋友圈压缩图片)

    - **自定义策略**:开发者可以根据需求自定义压缩策略,如根据图片类型或内容进行不同级别的压缩。 6. **注意事项** - 考虑到内存限制,大量图片压缩时应避免一次性加载过多图片。 - 保持与目标平台的兼容性,...

    kindeditor(带压缩图片功能)

    在这个“kindeditor(带压缩图片功能)”的压缩包中,很可能包含了已经集成图片压缩功能的KindEditor源码或者插件。 在Web开发中,富文本编辑器是非常常见的一种组件,用于让用户在网页上像在桌面应用中那样编辑文本...

    压缩图片工具,只支持png压缩.rar

    有些工具可能还提供了自定义压缩级别,允许用户在压缩程度和图片质量之间做出平衡。 5. 压缩效益与注意事项: 尽管PNG压缩可以减小文件大小,但也要注意,过度压缩可能会导致图片质量下降,如颜色失真或边缘模糊。...

    picsizer图片压缩, 免费好用的图片压缩工具,支持自定义数据大小压缩,非常好用,可批量处理照片

    在"Picsizer图片压缩"中,支持常见的图片格式,如JPEG(JPG)、PNG、BMP等。特别是对于JPEG(JPG)格式,Picsizer能够智能地调整压缩级别,尽可能在保持图片视觉质量的同时减小文件大小。这是因为JPEG格式在压缩时...

    C# core 图片压缩 图片无损压缩 图片无损剪切 无损图片压缩 无损图片剪切

    对于更高级的功能,如自定义压缩算法或特殊效果,可以利用第三方库如ImageSharp,它提供了丰富的API用于图像处理,包括无损压缩和剪切。 综上所述,C# Core提供了多种方式来实现图片的无损压缩和剪切,无论是使用...

    图片压缩、批量压缩图片工具

    2. 自定义压缩设置:用户可以根据需求调整压缩级别,平衡图片质量和文件大小。 3. 批量处理:可以一次选择多个图片文件或整个文件夹进行压缩,大大提高工作效率。 4. 预览功能:在压缩前预览图片,以便确认压缩效果...

    压缩图片方式,压缩图片方式

    4. **图片格式转换** - 根据需要,可以将图片转换为不同的格式来优化存储空间。例如,如果不需要透明背景,可以将PNG转换为JPEG,后者通常具有更高的压缩比率。 5. **系统自带工具** - **Mac**:使用预览应用,...

    基于Android 压缩图片库【100013310】

    可以自定义压缩后是否使用原图名字命名 可以自定义压缩质量范围 可以选择缩放压缩或者采样率压缩 可以自定义执行器 可以自定义是否忽略透明度(忽略则质量差些,大小也将减小一半) OOM catch,避免 Crash 可以清除...

    java代码保存宽高不变压缩图片(失真不大).docx

    这个方法可以根据需要进行扩展,比如支持批量处理或自定义压缩参数。 总的来说,这段Java代码提供了一个实用的工具,能够在不失真过大(通过调整压缩质量)的前提下,根据图片原始大小智能地压缩图片,满足不同场景...

    android自定义背景图片伸缩滑动仿2015qq空间顶部刷新阻尼效果

    2. 优化图像资源,使用适当格式和压缩,减少内存占用。 3. 使用合适的布局和视图复用策略,如RecyclerView,以提高滚动性能。 4. 对于滑动动画,使用硬件加速可以提升性能。 总的来说,实现自定义的ScrollView和...

    集体压缩图片小工具

    常见的图片格式如JPEG就采用了有损压缩,而PNG和GIF则支持无损压缩。 集体压缩图片小工具主要运用了有损压缩技术,特别是针对JPEG格式,通过调整压缩级别来控制图片的质量与大小。它可能还提供了调整分辨率的功能,...

    图片裁剪自定义控件

    本文将详细讨论“图片裁剪自定义控件”的相关知识点,包括如何实现圆形和矩形裁剪,双击放大、手动缩放以及拖拽功能,并介绍其中涉及到的jQuery插件。 首先,我们要理解图片裁剪的基本原理。图片裁剪通常涉及到两个...

    用来压缩图片大小的工具

    标题中的“用来压缩图片大小的工具”指的是一个用于减小图像文件体积的软件或应用程序,主要针对的是JPEG(jpg)格式的图片。在数字图像处理领域,图片的大小往往受到像素数量、颜色深度以及压缩算法的影响。这类...

    Labview按钮自定义控件素材(png图片)

    2. **PNG图片**:PNG是一种无损压缩的位图格式,常用于图像文件,因其透明度支持和高质量的图像保留而被广泛使用。在LabVIEW中,PNG图片作为自定义控件的背景或元素,可以实现各种美观效果,如渐变色、边框、图标等...

    js使用lrz压缩图片,上传七牛

    - 可自定义压缩质量、最大宽度和高度,灵活控制图片尺寸和质量。 - 压缩速度快,用户体验好。 - 提供丰富的API,方便开发者集成到项目中。 2. **图片压缩原理**: 图片压缩通常分为有损和无损两种。lrz采用的是...

Global site tag (gtag.js) - Google Analytics