之前一篇博文是关于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的图片像素颜色信息。
读取图片就直接用哈夫曼转码还原图片信息。这样就可以达到图片无损压缩的要求了。
相关推荐
图片压缩工具类,【根据设置的宽高等比例压缩图片文件】、【 按照宽度还是高度进行压缩】、【 压缩制定大小图片】、【强制压缩/放大图片到固定的大小】
在这个场景中,我们将重点讨论如何在TinyMCE中实现自定义图片上传功能。 首先,我们需要理解TinyMCE的插件系统。TinyMCE的插件是可插入到编辑器中的独立功能模块,它们通常包含JavaScript代码,用于扩展编辑器的...
本文将详细介绍一个基于HTML、JavaScript(jQuery和LayUI库)的纯前端图片压缩工具,它能够帮助开发者在不改变原始像素的情况下压缩图片,并允许自定义压缩质量、缩放大小和图片类型。 标题中的"html纯前端压缩图片...
- 图片加载异常处理,如网络错误、图片格式不支持等。 - 适配不同屏幕尺寸和密度,保证图片显示效果一致性。 通过以上技术实现的自定义网络图片控件,不仅可以提升应用的性能,还能提供流畅的用户体验,同时具备...
照片或图片格式转换软件是解决这一问题的重要工具,它可以帮助用户轻松地将图片从一种格式转换为另一种,同时还能有效地压缩图片大小,以便于存储、传输和快速加载。以下是对这个主题的详细讲解。 1. **图片格式**...
在这个“kindeditor(带压缩图片功能)”的压缩包中,很可能包含了已经集成图片压缩功能的KindEditor源码或者插件。 在Web开发中,富文本编辑器是非常常见的一种组件,用于让用户在网页上像在桌面应用中那样编辑文本...
有些工具可能还提供了自定义压缩级别,允许用户在压缩程度和图片质量之间做出平衡。 5. 压缩效益与注意事项: 尽管PNG压缩可以减小文件大小,但也要注意,过度压缩可能会导致图片质量下降,如颜色失真或边缘模糊。...
- **自定义策略**:开发者可以根据需求自定义压缩策略,如根据图片类型或内容进行不同级别的压缩。 6. **注意事项** - 考虑到内存限制,大量图片压缩时应避免一次性加载过多图片。 - 保持与目标平台的兼容性,...
在"Picsizer图片压缩"中,支持常见的图片格式,如JPEG(JPG)、PNG、BMP等。特别是对于JPEG(JPG)格式,Picsizer能够智能地调整压缩级别,尽可能在保持图片视觉质量的同时减小文件大小。这是因为JPEG格式在压缩时...
对于更高级的功能,如自定义压缩算法或特殊效果,可以利用第三方库如ImageSharp,它提供了丰富的API用于图像处理,包括无损压缩和剪切。 综上所述,C# Core提供了多种方式来实现图片的无损压缩和剪切,无论是使用...
这个方法可以根据需要进行扩展,比如支持批量处理或自定义压缩参数。 总的来说,这段Java代码提供了一个实用的工具,能够在不失真过大(通过调整压缩质量)的前提下,根据图片原始大小智能地压缩图片,满足不同场景...
- 可自定义压缩质量、最大宽度和高度,灵活控制图片尺寸和质量。 - 压缩速度快,用户体验好。 - 提供丰富的API,方便开发者集成到项目中。 2. **图片压缩原理**: 图片压缩通常分为有损和无损两种。lrz采用的是...
2. 自定义压缩设置:用户可以根据需求调整压缩级别,平衡图片质量和文件大小。 3. 批量处理:可以一次选择多个图片文件或整个文件夹进行压缩,大大提高工作效率。 4. 预览功能:在压缩前预览图片,以便确认压缩效果...
4. **图片格式转换** - 根据需要,可以将图片转换为不同的格式来优化存储空间。例如,如果不需要透明背景,可以将PNG转换为JPEG,后者通常具有更高的压缩比率。 5. **系统自带工具** - **Mac**:使用预览应用,...
可以自定义压缩后是否使用原图名字命名 可以自定义压缩质量范围 可以选择缩放压缩或者采样率压缩 可以自定义执行器 可以自定义是否忽略透明度(忽略则质量差些,大小也将减小一半) OOM catch,避免 Crash 可以清除...
3. **压缩操作**:利用易语言的库函数或者自定义算法,对图片数据进行压缩处理。如果易语言本身没有内置的压缩功能,可以调用外部库,如动态链接库(DLL)或者.NET组件,这些组件通常包含各种图像处理和压缩算法。 ...
2. 优化图像资源,使用适当格式和压缩,减少内存占用。 3. 使用合适的布局和视图复用策略,如RecyclerView,以提高滚动性能。 4. 对于滑动动画,使用硬件加速可以提升性能。 总的来说,实现自定义的ScrollView和...
常见的图片格式如JPEG就采用了有损压缩,而PNG和GIF则支持无损压缩。 集体压缩图片小工具主要运用了有损压缩技术,特别是针对JPEG格式,通过调整压缩级别来控制图片的质量与大小。它可能还提供了调整分辨率的功能,...
2. **PNG图片**:PNG是一种无损压缩的位图格式,常用于图像文件,因其透明度支持和高质量的图像保留而被广泛使用。在LabVIEW中,PNG图片作为自定义控件的背景或元素,可以实现各种美观效果,如渐变色、边框、图标等...
本文将详细讨论“图片裁剪自定义控件”的相关知识点,包括如何实现圆形和矩形裁剪,双击放大、手动缩放以及拖拽功能,并介绍其中涉及到的jQuery插件。 首先,我们要理解图片裁剪的基本原理。图片裁剪通常涉及到两个...