當前位置:首頁 » 存儲配置 » 圖片的存儲與讀取原理

圖片的存儲與讀取原理

發布時間: 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^)ノ

熱點內容
android線程調用 發布:2024-09-22 21:33:11 瀏覽:796
訪問寧靜 發布:2024-09-22 21:31:09 瀏覽:246
使用命令窗口編譯java 發布:2024-09-22 21:25:23 瀏覽:163
md5加密函數 發布:2024-09-22 21:02:32 瀏覽:702
成都php工資 發布:2024-09-22 20:55:16 瀏覽:438
sql表刪除恢復 發布:2024-09-22 20:50:12 瀏覽:443
python字元串查找中文 發布:2024-09-22 20:50:12 瀏覽:596
演算法有多少種 發布:2024-09-22 20:48:44 瀏覽:332
艾薇多多安卓版怎麼樣 發布:2024-09-22 20:48:02 瀏覽:801
linux工程師證書 發布:2024-09-22 20:07:37 瀏覽:413