当前位置:首页 » 存储配置 » 图片的存储与读取原理

图片的存储与读取原理

发布时间: 2022-05-07 18:45:46

① 数据在内存中是如何存储到的又是如何读取的

大概过程:
内存的每个单元都连到总线上的,CPU想写到内存中,将地址线的电位设置好,这时,除对应的地址外,其他地址都被屏蔽(具体屏蔽方式以电位为准),然后再向总线中的数据线写(设置数据对应的电位),再关闭地址线,就OK了。内存读的方式相似。

② 分析大文本与图像数据在数据库内部的存储原理。

图像数据在数据库内部的存储原理:
XML 是文本型的数据交换结构,对于字符类型的文本交换非常的方便,实际工作中我们往往需要通过 XML 将二进制格式的图形图像信息数据进行数据交换。本文从介绍 BASE64 编码的原理入手,通过采用 C 语言编写 DB2 的嵌入存储过程,实现了在数据库内存中将文本格式的图片文件到二进制 BLOB 字段之间的转换,并且就性能优化等提出若干建议,该设计思路和程序可以广泛的应用到图像图形数据在 XML 的存储和转换。

--------------------------------------------------------------------------------
回页首
XML 存储图形图像的基本原理

XML 作为一种非常广泛的数据交换的载体被广泛的应用到了各行各业的数据交换中。对于图形图像数据的转换,需要采用 Base64 编码将二进制格式的图形图像信息转换成文本格式再进行传输。

Base64 编码转换的思想是通过 64 个 ASCII 字符码对二进制数据进行重新编码组合,即将需要转换的数据每三个字节(24 位)为一组,再将这 24 位数据按每组 6 位进行重新划分,在每组的最高 2 位填充 0 最终成一个完整的 8 位字节。如果所要编码的数据的字节数不是 3 的整数倍,需要在最后一组数据填充 1 到 2 个字节的 0 字节。例如:我们对 ABC 进行 BASE64 的编码,ABC 的编码值:A(65), B(66), C(67)。再取二进制 A(01000001)B(01000010)C(01000011)连接起来构成 010000010100001001000011,然后按 6 位为单位分成 4 个数据块并在最高位填充两个 0 后形成 4 个字节的编码后的值(00010000)(00010100)(00001001)(00000011)。再将 4 个字节的数据转换成十进制数为(16)(20)(19)(3)。最后根据 BASE64 给出的 64 个基本字符表,查出对应的 ASCII 码字符(Q)(U)(J)(D)。这里的值实际就是数据在字符表中的索引。

BASE64 字符表:



某项目的数据交换采用 XML 的为介质,XML 的结构包括个人基本信息:姓名、性别、相片等信息,其中相片信息是采用经过 BASE64 函数转换后的文本型数据,图像图形信息通过 BASE64 进行数据转换后,形成文本格式的数据类型,再将相应的数据存放到 XML 中,最终形成可供交换的文本型的 XML 数据结构。

XML 的数据结构如下所示:

<?xml version=”1.0” encoding=”UTF-8” ?>
<HeadInfo>
<TotalNum>10<TotalNum>
<TransDate>2007-10-18</TransDate>
</HeadInfo>
<Data>
<Name> 张三 </Name>
<Sex> 男 </Sex>
<Photo>/9j/4AAQSkZJRgABAQAAAQABAAD......</Photo>
<Data>

--------------------------------------------------------------------------------
回页首
相片数据在 DB2 嵌入式 C 程序的实现方法

该项目要求能够在 DB2 数据库中将相片数据存储为二进制 BLOB 格式。我们采用 DATASTAGE 进行 XML 数据加载,将 XML 中的姓名、性别等基本数据项加载到相应的字段,其中文本型的相片数据则加载到 CLOB 字段中,再按照 BASE64 的编码规则进行逆向转码,整个数据流程如下图所示:

图 1. 相片存储流程图

用户的相片每天的更新数据为 30 万条,而且每个相片的平均大于 32KB,为了获得最佳的数据库性能,选择采用 C 存储过程的方式开发了 BASE64 的转换函数。每次函数读取存储在 CLOB 字段的文本格式数据全部存储到内存中,并且通过 decode 函数在内存中进行转码,转码后再存入数据库中。

程序的清单 1 是逐行读取 CLOB 字段,并且调用 decode 函数进行转码;程序的清单 2 是 decode 函数的关键性代码。完整的程序见源代码下载部分。

清单 1. 读入 CLOB,写入 BLOB 字段

EXEC sql BEGIN DECLARE SECTION;
SQL TYPE IS CLOB(100 K) clobResume; //CLOB 结构体变量
SQL TYPE IS BLOB(100 K) blobResume; //BLOB 结构体变量

sqlint16 bobind;
sqlint16 lobind;
sqlint16 cobind;
sqlint32 idValue;

EXEC SQL END DECLARE SECTION;
int clob2bin(void)
{
// 声明 SQLCA 结构
struct sqlca sqlca;
int charNb;
int lineNb;
long n;
n=0;

// 定义数据库游标
EXEC SQL DECLARE c1 CURSOR WITH HOLD FOR
SELECT czrkxp_a
FROM CZRK_blob for update;
EXEC SQL OPEN c1;

// 活动 CLOB 字段的信息,已经 CLOB 字段的大小
EXEC SQL FETCH c1 INTO :clobResume:cobind;
// 循环读取 CLOB 字段,并且调用 DECODE 转码函数
while (sqlca.sqlcode != 100)
{
if (cobind < 0)
{
printf(“ NULL LOB indicated.\n”);
}
else
{
n++;
decode(); // 文本格式到二进制流的转码函数
printf(“\nCurrent Row =%ld”,n);
// 数据写入 BLOB 字段
EXEC SQL update czrk_blob set czrkxp_blob = :blobResume
where current of c1; ;
// 提交事务
EXEC SQL COMMIT;
}
EXEC SQL FETCH c1 INTO :clobResume:cobind ;
}
// 关闭游标
EXEC SQL CLOSE c1;
EXEC SQL COMMIT;
return 0;
}

清单 2. 文本文件到二进制文件的转换

void decode( void )
{
unsigned char in[4], out[3], v;
int I, len;
long j,k;
j = -1;
k=0;
// 将读入 CLOB 结构体变量的数据进行转换
while( j < clobResume.length){
for( len = 0, I = 0; I < 4 && ( j < clobResume.length ); i++ ) {
v = 0;
while((j < clobResume.length) && v == 0 ) {
j++;
v = (unsigned char) clobResume.data[j];
v = (unsigned char) ((v < 43 || v > 122) ? 0 : cd64[ v – 43 ]);
if( v ) {
v = (unsigned char) ((v == ‘$’) ? 0 : v – 61);
}
}
if( j < clobResume.length ) {
len++;
if( v ) {
in[ I ] = (unsigned char) (v – 1);
}
}
else {
in[i] = 0;
}
}
if( len ) {
decodeblock( in, out );
// 写入到 BLOB 结构体变量中
for( I = 0; I < len – 1; i++ ) {
blobResume.data[k] = out[i];
k++;
}
}
}
blobResume.length= k;
}

--------------------------------------------------------------------------------
回页首
数据的转换效率和优化建议

在 IBM P570 数据库服务器上运行,该程序的运行效率非常高,先后进行了几个数量级的测试,最终平均测试的转换效率为:每 1 万笔数据记录,转换的效率 55 秒,即 182 条 / 秒。值得注意的是,整个转换过程占用 CPU 的量并不特别大,主要的性能瓶颈在磁盘阵列中。

以后可以进一步在以下方面进行调优,确保程序转换的效率更高:

1)采用多进程调用的方式,以获得更高的并发数量;

2)采用每 10 次或者 100 次提交事务的方式,减少访问磁盘的次数;

3)将 CLOB 和 BLOB 分别放置在不同的表空间上,并且将表空间分布在在多个磁盘上,获得最佳的磁盘访问速度。

③ 图片在计算机是怎样存储的

图像在计算机中被分割成很多个像素,然后每个像素用2进制描述其亮度、色度等信息,这就是图像编码,编码后形成图像文件,当观看图像时则正好相反,用解码解成图像。不同格式的图片有不同的编解码方式,以应对不同的需求。

④ 图片的保存格式及解释

一、BMP图像文件格式

BMP是一种与硬件设备无关的图像文件格式,使用非常广。它采用位映射存储格式,除了图像深度可选以外,不采用其他任何压缩,因此,BblP文件所占用的空间很大。BMP文件的图像深度可选lbit、4bit、8bit及24bit。BMP文件存储数据时,图像的扫描方式是按从左到右、从下到上的顺序。
由于BMP文件格式是Windows环境中交换与图有关的数据的一种标准,因此在Windows环境中运行的图形图像软件都支持BMP图像格式。
典型的BMP图像文件由三部分组成:位图文件头数据结构,它包含BMP图像文件的类型、显示内容等信息;位图信息数据结构,它包含有BMP图像的宽、高、压缩方法,以及定义颜色等信息。

二、 PCX图像文件格式
PCX这种图像文件的形成是有一个发展过程的。最先的PCX雏形是出现在ZSOFT公司推出的名叫PC PAINBRUSH的用于绘画的商业软件包中。以后,微软公司将其移植到 Windows环境中,成为Windows系统中一个子功能。先在微软的Windows3.1中广泛应用,随着Windows的流行、升级,加之其强大的图像处理能力,使PCX同GIF、TIFF、BMP图像文件格式一起,被越来越多的图形图像软件工具所支持,也越来越得到人们的重视。

PCX是最早支持彩色图像的一种文件格式,现在最高可以支持256种彩色,如图4-25所示,显示256色的彩色图像。PCX设计者很有眼光地超前引入了彩色图像文件格式,使之成为现在非常流行的图像文件格式。

PCX图像文件由文件头和实际图像数据构成。文件头由128字节组成,描述版本信息和图像显示设备的横向、纵向分辨率,以及调色板等信息:在实际图像数据中,表示图像数据类型和彩色类型。PCX图像文件中的数据都是用PCXREL技术压缩后的图像数据。

PCX是PC机画笔的图像文件格式。PCX的图像深度可选为l、4、8bit。由于这种文件格式出现较早,它不支持真彩色。PCX文件采用 RLE行程编码,文件体中存放的是压缩后的图像数据。因此,将采集到的图像数据写成PCX文件格式时,要对其进行RLE编码:而读取一个PCX文件时首先要对其进行RLE解码,才能进一步显示和处理。

三、TIFF图像文件格式

TIFF(TaglmageFileFormat)图像文件是由Als和Microsoft公司为桌上出版系统研制开发的一种较为通用的图像文件格式。TIFF格式灵活易变,它又定义了四类不同的格式:TIFF-B适用于二值图像:TIFF-G适用于黑白灰度图像;TIFF-P适用于带调色板的彩色图像:TIFF-R适用于RGB真彩图像。

TIFF支持多种编码方法,其中包括RGB无压缩、RLE压缩及JPEG压缩等。

TIFF是现存图像文件格式中最复杂的一种,它具有扩展性、方便性、可改性,可以提供给IBMPC等环境中运行、图像编辑程序。

TIFF图像文件由三个数据结构组成,分别为文件头、一个或多个称为IFD的包含标记指针的目录以及数据本身。

TIFF图像文件中的第一个数据结构称为图像文件头或IFH。这个结构是一个TIFF文件中唯一的、有固定位置的部分;IFD图像文件目录是一个字节长度可变的信息块,Tag标记是TIFF文件的核心部分,在图像文件目录中定义了要用的所有图像参数,目录中的每一目录条目就包含图像的一个参数。

四、 GIF文件格式

GIF(Graphics Interchange Format)的原义是“图像互换格式”,是CompuServe公司在 1987年开发的图像文件格式。GIF文件的数据,是一种基于LZW算法的连续色调的无损压缩格式。其压缩率一般在50%左右,它不属于任何应用程序。目前几乎所有相关软件都支持它,公共领域有大量的软件在使用GIF图像文件。

GIF图像文件的数据是经过压缩的,而且是采用了可变长度等压缩算法。所以GIF的图像深度从lbit到8bit,也即GIF最多支持256 种色彩的图像。GIF格式的另一个特点是其在一个GIF文件中可以存多幅彩色图像,如果把存于一个文件中的多幅图像数据逐幅读出并显示到屏幕上,就可构成一种最简单的动画。

GIF解码较快,因为采用隔行存放的GIF图像,在边解码边显示的时候可分成四遍扫描。第一遍扫描虽然只显示了整个图像的八分之一,第二遍的扫描后也只显示了1/4,但这已经把整幅图像的概貌显示出来了。在显示GIF图像时,隔行存放的图像会给您感觉到它的显示速度似乎要比其他图像快一些,这是隔行存放的优点。

五、JPEG文件格式

JPEG是Joint Photographic Experts Group(联合图像专家组)的缩写,文件后辍名为“.jpg”或“.jpeg”,是最常用的图像文件格式,由一个软件开发联合会组织制定,是一种有损压缩格式,能够将图像压缩在很小的储存空间,图像中重复或不重要的资料会被丢失,因此容易造成图像数据的损伤。JPEG格式压缩的主要是高频信息,对色彩的信息保留较好,适合应用于互联网,可减少图像的传输时间,可以支持24bit真彩色,也普遍应用于需要连续色调的图像。

六、TGA格式

TGA格式(Tagged Graphics)是由美国Truevision公司为其显示卡开发的一种图像文件格式,文件后缀为“.tga”,已被国际上的图形、图像工业所接受。 TGA的结构比较简单,属于一种图形、图像数据的通用格式,在多媒体领域有很大影响,是计算机生成图像向电视转换的一种首选格式。

TGA图像格式最大的特点是可以做出不规则形状的图形、图像文件,一般图形、图像文件都为四方形,若需要有圆形、菱形甚至是缕空的图像文件时,TGA可就派上用场了! TGA格式支持压缩,使用不失真的压缩算法。

七、EXIF格式

EXIF的格式是1994年富士公司提倡的数码相机图像文件格式,其实与JPEG格式相同,区别是除保存图像数据外,还能够存储摄影日期、使用光圈、快门、闪光灯数据等曝光资料和附带信息以及小尺寸图像。

八、 FPX图像文件格式

FPX图像文件格式(扩展名为fpx)是由柯达、微软、HP及Live PictureInc联合研制,并于1996年6月正式发表,FPX是一个拥有多重分辩率的影像格式,即影像被储存成一系列高低不同的分辩率,这种格式的好处是当影像被放大时仍可维持影像的质素,另外,当修饰FPX影像时,只会处理被修饰的部分,不会把整幅影像一并处理,从而减小处理器及记忆体的负担,使影像处理时间减少。

九、SVG格式

SVG是可缩放的矢量图形格式。它是一种开放标准的矢量图形语言,可任意放大图形显示,边缘异常清晰,文字在SVG图像中保留可编辑和可搜寻的状态,没有字体的限制,生成的文件很小,下载很快,十分适合用于设计高分辨率的Web图形页面。

十、PSD文件格式

这是Photoshop图像处理软件的专用文件格式,文件扩展名是.psd,可以支持图层、通道、蒙板和不同色彩模式的各种图像特征,是一种非压缩的原始文件保存格式。扫描仪不能直接生成该种格式的文件。PSD文件有时容量会很大,但由于可以保留所有原始信息,在图像处理中对于尚未制作完成的图像,选用PSD格式保存是最佳的选择。

十一、CDR文件格式

CDR格式是着名绘图软件CorelDRAW的专用图形文件格式。由于CorelDRAW是矢量图形绘制软件,所以CDR可以记录文件的属性、位置和分页等。但它在兼容度上比较差,所有CorelDraw应用程序中均能够使用,但其他图像编辑软件打不开此类文件。

十二、PCD文件格式

PCD是Kodak PhotoCD的缩写,文件扩展名是.pod,是Kodak开发的一种Photo CD文件格式,其他软件系统只能对其进行读取。该格式使用YCC色彩模式定义图像中的色彩。YCC和CIE色彩空间包含比显示器和打印设备的RGB色和 CMYK色多得多的色彩。PhotoCD图像大多具有非常高的质量。

十三、DXF文件格式

DXF是Drawing Exchange Format的缩写,扩展名是.dxf,是AutoCAD中的图形文件格式,它以ASCII方式储存图形,在表现图形的大小方面十分精确,可被CorelDraw和3DS等大型软件调用编辑。

十四、UFO文件格式

它是着名图像编辑软件Ulead Photolmapct的专用图像格式,能够完整地记录所有 Photolmapct处理过的图像属性。值得一提的是,UFO文件以对象来代替图层记录图像信息。

十五、EPS文件格式

EPS是Encapsulated PostScript的缩写,是跨平台的标准格式,扩展名在PC平台上是.eps,在Macintosh平台上是.epsf,主要用于矢量图像和光栅图像的存储。EPS格式采用 PostScript语言进行描述,并且可以保存其他一些类型信息,例如多色调曲线、Alpha通道、分色、剪辑路径、挂网信息和色调曲线等,因此EPS 格式常用于印刷或打印输出。Photoshop中的多个EPS格式选项可以实现印刷打印的综合控制,在某些情况下甚至优于TIFF格式。

十六、PNG图像文件格式

PNG(Portable Networf Graphics)的原名称为“可移植性网络图像”,是网上接受的最新图像文件格式。PNG能够提供长度比GIF小30%的无损压缩图像文件。它同时提供 24位和48位真彩色图像支持以及其他诸多技术性支持。由于PNG非常新,所以目前并不是所有的程序都可以用它来存储图像文件,但Photoshop可以处理PNG图像文件,也可以用PNG图像文件格式存储。

⑤ 图片存在硬盘上的原理是什么

BMP就是按照你说的那种方式存放图片的~~JPEG就是一种图片压缩格式 通过特定的算法将图片编码 减小图片的体积~~

⑥ 图象储存原理是什么啊

图像主要分位图和矢量图。

对位图而言,一般来讲不论图像使用的是哪种颜色格式,每个颜色通道都是一个二维的矩阵,所以存贮图像的基本方法就是把矩阵存下来。
一种办法是直接存贮矩阵,例如BMP图像。
一种办法是将矩阵作变换(比如Fouier展开,SVD分解,小波展开之类的)之后存贮必要的信息(比如基底前的系数),这种方法通常会进行截断,然后得到压缩的数据,比如JPG就是利用小波变换来存贮的。

对于矢量图而言,一般只存贮样条函数的控制点的信息,所以可以任意缩放。

⑦ 图像在数据库中的存储方法有哪些 如果将图像先存入缓冲区,再存入数据库,缓冲区如何实现为什么要用

两种,
1、一种是将图片转化成二进制数据流存入数据库中;
2、一种是保存图片的路径,然后前台读取路径去调用图片;
特点:
相关的代码网络一下应该会有,第二种方法实现上比较简单,就是存储路径,然后根据路径读取对应的图片显示出来。第一种就比较麻烦,要先把图片转化成二进制数据,读取时就是从数据库读取对应数据再转化成图片显示出来。

图片存储缓存的话需要通过图片转化为数据流进行存放在数据库里面,调用的时候按照数据流找到图片存放路径转化出来就可以。

⑧ 如何用SQL语句实现图片的存储和读取

如:
System.IO.MemoryStream mstream = new System.IO.MemoryStream();
//将控件htmlRichTextBox_imgText里面的内容全部当作图片存储
this.htmlRichTextBox_img.SaveFile(mstream, RichTextBoxStreamType.RichText);
//将流转换成数组
byte[] bWrite = mstream.ToArray();

jzdoc.Entities.s_sample obj = new s_sample();
...................................
obj.img1 = bWrite;
..............................................
jzdoc.dbsvr.Default.Save<s_sample>(obj);

⑨ 图片数据存储与读取,及格式是什么

任何文件数据在硬盘中查看都是这个样子的,不单单是图片数据才是这个样子的哦。视频、音乐、文本等形式的文件在硬盘中查看也是这个样子的。文件中所有的要素,比如你说的格式等,都包含在里面了。在这种形式的数据下,就没有什么格式的概念了,只有数据的概念。这些数据是对文件的二进制码编译而成的十六进制码。众所周知,计算机只能读取二进制码,十六进制码是不能被计算机识别的,那为什么查看硬盘数据时显示的是十六进制码而不是二进制码呢?因为,如果我们直接查看二进制码的话,很不方便。首先,二进制码很长,阅读起来很费时,其次,二进制码只有0、1两个字符,不方便记忆,为了方便人们查看和修改硬盘中的数据,就把二进制码改成十六进制的显示方式,这样识别起来就方便多了。那么要说方便,改成十进制读起来不是更方便吗,但是十六进制可以得到更短的字符串,修改起来更方便。比如01110110这个数,十进制的值是118,十六进制的值是76,可见,十六进制可以得到更短的字符串。
最右边的那些乱码是十六进制码以ASCII码显示的结果。ASCII码是美国信息交换标准码,共128个,包括52个英文字母大小写、10个阿拉伯数字和英文标点及一些控制符。比如第一行倒数第四个十六进制码49,对应的ASCII码是73,而73正是字母”I“的编号。那些乱七八糟的汉字和符号是由于所对应的十六进制码不在ASCII码的范围内,所以就乱了。详细就不展开了,如有兴趣,可以在网络上搜索答案。

⑩ MySQL储存图片的原理

要说它的原理就要先从它的结构及其作用谈起了:盘片被划分成一系列同心环,圆心是盘片中心,每个同心环称为一个磁道,所有半径相同的磁道组成一个柱面。磁道被沿半径线划分成一个个小的段,每个段称为一个扇区,每个扇区是磁盘的最小存储单元。为了简单起见,我们下面假设磁盘只有一个盘片和一个磁头。
当磁盘读取数据时,系统会将数据逻辑地址传给磁盘,磁盘的控制电路按照寻址逻辑将逻辑地址翻译成物理地址,即确定要读的数据在哪个磁道,哪个扇区。

为了读取这个扇区的数据,需要将磁头放到这个扇区上方,为了实现这一点,磁头需要移动对准相应磁道,这个过程称为寻道,所耗费时间称为寻道时间,然后磁盘旋转将目标扇区旋转到磁头下,这个过程耗费的时间称为旋转时间。

即一次磁盘的读写操作完成过程由三个动作组成:

寻道(时间):磁头移动定位到指定磁道。

旋转延迟(时间):等待指定扇区从磁头下旋转经过。

数据传输(时间):数据在磁盘与内存之间的实际传输

经过这三个动作就可以完成储存照片这个过程了
希望我的回答对您有用,谢谢ヽ(^0^)ノ

热点内容
存储过程远程数据库 发布:2024-09-22 23:32:12 浏览:518
存储挂载空间 发布:2024-09-22 23:29:49 浏览:95
android显示电量 发布:2024-09-22 23:16:48 浏览:282
pythonasciitoutf8 发布:2024-09-22 23:15:50 浏览:232
8110pos机后台密码是多少 发布:2024-09-22 22:59:10 浏览:607
数理算法 发布:2024-09-22 22:54:33 浏览:53
python学习视频 发布:2024-09-22 22:49:37 浏览:777
智联尊享是什么配置 发布:2024-09-22 22:48:40 浏览:588
沧州的编程 发布:2024-09-22 22:18:58 浏览:836
安卓为什么切换到鸿蒙有些软件不见了 发布:2024-09-22 22:14:48 浏览:895