r>[0126] 本公開的實施例提供的技術方案可以包括以下有益效果:
[0127] 本公開中,SVG的文件源碼中記錄有圖形元素的繪制信息,通過將圖形元素的繪制 信息轉(zhuǎn)換為數(shù)字,能獲得數(shù)字格式的圖形元素的繪制信息;由于將繪制信息采用數(shù)字表示, 使得壓縮后SVG文件能減少SVG的占用空間,減少資源浪費。
[0128] 本公開中,由于編碼規(guī)則中記錄有圖形元素與開始標記和結(jié)束標記的對應關系, 因此可以利用開始標記和結(jié)束標記區(qū)分SVG文件中的不同的圖形元素,有利于在對壓縮文 件進行解析時區(qū)分不同的圖形元素。
[0129] 本公開中,編碼規(guī)則中記錄有圖形元素名與數(shù)字的對應關系、屬性名與數(shù)字的對 應關系,以及屬性值的數(shù)據(jù)類型與數(shù)字的對應關系,因此可以根據(jù)上述關系將圖形元素名、 屬性名、屬性值的數(shù)據(jù)類型和屬性值編碼成對應的數(shù)字,編碼規(guī)則為文件源碼中不同含義 的字符串設置對應的數(shù)字,因此壓縮文件中的數(shù)字能表示圖形元素的繪制信息,有利于對 壓縮文件的解碼。
[0130] 本公開中,當源碼中涉及引用時可以創(chuàng)建引用關系,引用關系為包括索引與引用 對象標識的對應關系,因此,可將引用對象的源碼替換為索引進行編碼,從而減少壓縮文件 的占用空間。
[0131] 本公開中,將多個顯示樣式屬性信息記錄都記錄在預設的目標顯示樣式屬性中, 可以減少壓縮文件的占用空間,并且壓縮后的文件內(nèi)容更易解析。
[0132] 本公開中,由于路徑屬性信息中包括命令字符和與命令字符對應的數(shù)據(jù),根據(jù) ASCII編碼系統(tǒng)可以快速地將命令字符轉(zhuǎn)換為數(shù)字,該方式易于實現(xiàn),轉(zhuǎn)換速度快。
[0133] 本公開中,通過LEB128編碼格式對整型、浮點數(shù)或雙精度數(shù)進行編碼,可以減少 SVG壓縮文件的占用字節(jié)數(shù)。
[0134] 本公開中,通過創(chuàng)建字符串引用關系記錄索引和所述字符串在字符串池的存儲位 置的對應關系,可以將字符串轉(zhuǎn)換為索引進行編碼,能顯著減少壓縮文件的占用空間。
[0135] 本公開中,可縮放矢量圖形的壓縮文件中包括數(shù)字格式的圖形元素的繪制信息, 根據(jù)編碼規(guī)則可以解碼出該數(shù)字對應的圖形元素的繪制信息,從而可以根據(jù)所述繪制信息 快速地繪制出圖形元素,得到所述可縮放矢量圖形。
[0136] 本公開中,編碼規(guī)則中預設設定了圖形元素的開始標記和結(jié)束標記,通過開始標 記和結(jié)束標記可以快速區(qū)分壓縮文件中不同的圖形元素的繪制信息;編碼規(guī)則還預先設定 繪制信息與數(shù)字的對應關系,按照編碼規(guī)則可以將壓縮文件中的數(shù)字解碼出所述圖形元素 的繪制信息。
[0137] 本公開中,編碼規(guī)則中記錄有圖形元素名與數(shù)字的對應關系、屬性名與數(shù)字的對 應關系,以及屬性值的數(shù)據(jù)類型與數(shù)字的對應關系,因此可以根據(jù)上述關系從壓縮文件的 數(shù)字解碼出相對應的圖形元素名、屬性名、屬性值的數(shù)據(jù)類型和屬性值,根據(jù)上述繪制信息 能快速地繪制出圖形元素,提高可縮放矢量圖形的繪制速度。
[0138] 本公開中,當根據(jù)數(shù)字解碼出對象索引時,可以根據(jù)預設的對象引用關系獲得與 對象索引對應的存儲位置,根據(jù)該存儲位置可以查找到該引用對象,從而快速地獲得圖形 元素的繪制信息。
[0139] 本公開中,當根據(jù)數(shù)字解碼出字符串索引時,可以根據(jù)預設的字符串引用關系獲 得與索引對應的存儲位置,根據(jù)該存儲位置可以從字符串池中獲得字符串,從而快速地獲 得圖形元素的繪制信息。
[0140] 本公開中,通過創(chuàng)建系統(tǒng)可繪制對象抽象類的派生類的對象,可以將SVG引入智 能終端的操作系統(tǒng)中,將繪制信息賦值給對象中的成員函數(shù),通過加載對象,可以利用所述 成員函數(shù)快速地繪制出圖形元素。
[0141] 應當理解的是,以上的一般描述和后文的細節(jié)描述僅是示例性和解釋性的,并不 能限制本公開。
【附圖說明】
[0142] 此處的附圖被并入說明書中并構(gòu)成本說明書的一部分,示出了符合本公開的實施 例,并與說明書一起用于解釋本公開的原理。
[0143] 圖1A是本公開根據(jù)一示例性實施例示出的一種可縮放矢量圖形的壓縮方法的流 程圖。
[0144] 圖1Β是本公開根據(jù)一示例性實施例示出的一種SVG的示意圖。
[0145] 圖2是本公開根據(jù)一示例性實施例示出的一種可縮放矢量圖形的繪制方法的流 程圖。
[0146] 圖3是本公開根據(jù)一示例性實施例示出的一種可縮放矢量圖形的壓縮裝置框圖。
[0147] 圖4是本公開根據(jù)一示例性實施例示出的另一種可縮放矢量圖形的壓縮裝置框 圖。
[0148] 圖5是本公開根據(jù)一示例性實施例示出的另一種可縮放矢量圖形的壓縮裝置框 圖。
[0149] 圖6是本公開根據(jù)一示例性實施例示出的另一種可縮放矢量圖形的壓縮裝置框 圖。
[0150] 圖7是本公開根據(jù)一示例性實施例示出的另一種可縮放矢量圖形的壓縮裝置框 圖。
[0151] 圖8是本公開根據(jù)一示例性實施例示出的另一種可縮放矢量圖形的壓縮裝置框 圖。
[0152] 圖9是本公開根據(jù)一示例性實施例示出的另一種可縮放矢量圖形的壓縮裝置框 圖。
[0153] 圖10是本公開根據(jù)一示例性實施例示出的另一種可縮放矢量圖形的壓縮裝置框 圖。
[0154] 圖11是本公開根據(jù)一示例性實施例示出的一種可縮放矢量圖形的繪制裝置框 圖。
[0155] 圖12是本公開根據(jù)一示例性實施例示出的另一種可縮放矢量圖形的繪制裝置框 圖。
[0156] 圖13是本公開根據(jù)一示例性實施例示出的另一種可縮放矢量圖形的繪制裝置框 圖。
[0157] 圖14是本公開根據(jù)一示例性實施例示出的另一種可縮放矢量圖形的繪制裝置框 圖。
[0158] 圖15是本公開根據(jù)一示例性實施例示出的另一種可縮放矢量圖形的繪制裝置框 圖。
[0159] 圖16是本公開根據(jù)一示例性實施例示出的另一種可縮放矢量圖形的繪制裝置框 圖。
[0160] 圖17是本公開根據(jù)一示例性實施例示出的一種用于可縮放矢量圖形的壓縮裝置 的框圖。
[0161] 圖18是本公開根據(jù)一示例性實施例示出的一種用于可縮放矢量圖形的繪制裝置 的框圖。
【具體實施方式】
[0162] 這里將詳細地對示例性實施例進行說明,其示例表示在附圖中。下面的描述涉及 附圖時,除非另有表示,不同附圖中的相同數(shù)字表示相同或相似的要素。以下示例性實施例 中所描述的實施方式并不代表與本公開相一致的所有實施方式。相反,它們僅是與如所附 權利要求書中所詳述的、本公開的一些方面相一致的裝置和方法的例子。
[0163] 在本公開使用的術語是僅僅出于描述特定實施例的目的,而非旨在限制本公開。 在本公開和所附權利要求書中所使用的單數(shù)形式的"一種"、"所述"和"該"也旨在包括多 數(shù)形式,除非上下文清楚地表示其他含義。還應當理解,本文中使用的術語"和/或"是指 并包含一個或多個相關聯(lián)的列出項目的任何或所有可能組合。
[0164] 應當理解,盡管在本公開可能采用術語第一、第二、第三等來描述各種信息,但這 些信息不應限于這些術語。這些術語僅用來將同一類型的信息彼此區(qū)分開。例如,在不脫離 本公開范圍的情況下,第一信息也可以被稱為第二信息,類似地,第二信息也可以被稱為第 一信息。取決于語境,如在此所使用的詞語"如果"可以被解釋成為"在……時"或"當…… 時"或"響應于確定"。
[0165] 如圖1A所示,圖1A是本公開根據(jù)一示例性實施例示出的一種可縮放矢量圖形的 壓縮方法的流程圖,該方法可以用于終端中,包括以下步驟:
[0166] 在步驟101中,獲取待壓縮的可縮放矢量圖形。
[0167] 在步驟102中,獲取所述可縮放矢量圖形的文件源碼;所述文件源碼中記錄有所 述圖形元素的繪制信息。
[0168] 在步驟103中,將所述圖形元素的繪制信息按預設的編碼規(guī)則轉(zhuǎn)換為數(shù)字,獲得 所述可縮放矢量圖形的壓縮文件。
[0169] 其中,編碼規(guī)則包括繪制信息與數(shù)字的對應關系。
[0170] 本公開實施例中,終端可以為智能終端,例如可以是智能手機、平板電腦、 PDA(PersonalDigitalAssistant,個人數(shù)字助理)、電子書閱讀器、多媒體播放器等等。
[0171] 其中,步驟101中,可縮放矢量圖形SVG是基于可擴展標記語言,用于描述二維矢 量圖形的一種圖形格式。
[0172] 步驟102中,SVG采用文本來描述矢量化的圖形,這使得SVG圖像文件可以像HTML 網(wǎng)頁一樣具有可讀性。當采用圖像工具輸出SVG后,可以用任何文字處理工具打開SVG圖 像,并可看到用來描述圖像的文件源碼,文件源碼通常包含一個或多個圖形元素,并且包含 一系列描述點、線、簡單圖形、路徑等基本圖形元素的繪制信息,例如圖形的位置、顏色、大 小等信息。只要掌握了SVG語法,就可以通過文件源碼讀出SVG圖像中的內(nèi)容。
[0173] 例如,如圖1B所示,是本公開實施例示出的一種SVG的示意圖,以下是該SVG的文 件源碼。
[0174] < ?xmlversion=〃L0〃standalone= 〃no〃 ? >
[0175] 〈丨DOCTYPEsvgPUBLIC"-//W3C//DTDSVG1. 1//EN"
[0176] "http://www.w3.org/Graphics/SVG/Ll/DTD/svgll.dtd">
[0177] 〈svgwidth= "100%"height= "100%"version= "1. 1〃
[0178] xmlns= 〃http://www.w3.org/2000/svg">
[0179] < !-Γmcomment->
[0180] 〈circlecx= 〃100"cy= 〃50"r= "40"stroke= "black"
[0181] stroke-width= 〃2"fill="redV>
[0182] 其中,第一行包含了XML聲明。standalone屬性規(guī)定此SVG文件是否是"獨立的", 或含有對外部文件的引用。standalone= "no"意味著SVG文檔會引用一個外部文件。在 這里,外部文件是指DTD文件。
[0183] 第二和第三行引用了這個外部的SVGDTD文件。該DTD文件位于"http://www. w3.org/Graphics/SVG/1. 1/DTD/svgll.dtd"。也即表示,該DTD文件位于W3C,含有所有W3C 允許的SVG元素。
[0184] 從第四行代碼的〈svg>開始,即表示SVG中圖形元素的繪制信息,代碼中包括開啟 標簽<svg>和關閉標簽</svg>,〈svg>是指根元素。width和height屬性可設置此SVG文 檔的寬度和高度。version屬性可定義所使用的SVG版本,xmlns屬性可定義SVG命名空 間。
[0185] 〈circle〉標簽用來創(chuàng)建一個圓,即表示圓圖形元素。cx屬性和cy屬性定義圓中 心的X和y坐標,r屬性定義圓的半徑。
[0186] stroke屬性和stroke-width屬性屬于顯示樣式屬性,用于控制如何顯示形狀的 輪廓。上述文件中把圓的輪廓設置為2px寬,黑色邊框。
[0187] fi 11屬性用于設置形狀內(nèi)的顏色,上述文件中把圓的填充顏色設置為紅色。
[0188] 關閉標簽〈/svg>的作用是關閉SVG元素和文檔本身。
[0189] 對于步驟103,可以將圖形元素的繪制信息按預設的編碼規(guī)則轉(zhuǎn)換為數(shù)字,其中, 圖形元素的繪制信息可以是SVG的文件源碼中從開啟標簽<SVg>和關閉標簽</SVg>部分 的源碼,文件源碼中涉及聲明等內(nèi)容的頭三行源碼,可以忽略不進行編碼;在編碼時,SVG 文件中的常見字符串,例如width、circle或height等字符串,可以預先設定對應的數(shù)字作 為編碼規(guī)則,從而按照編碼規(guī)則將所述圖形元素的繪制信息轉(zhuǎn)換為對應的數(shù)字。其中,還可 以預先設定數(shù)字的進制,例如二進制、十六進制等。
[0190] 由上述實施例可見,SVG的文件源碼中記錄有圖形元素的繪制信息,通過將圖形元 素的繪制信息轉(zhuǎn)換為數(shù)字,能獲得數(shù)字格式的圖形元素的繪制信息;由于將繪制信息采用 數(shù)字表示,使得壓縮后SVG文件能減少SVG的占用空間,減少資源浪費。
[0191] 在一個可選的實現(xiàn)方式中,所述編碼規(guī)則還包括圖形元素與開始標記和結(jié)束標記 的對應關系,所述開始標記和結(jié)束標記分別用于在編碼時表示圖形元素的繪制信息的開始 和結(jié)束。
[0192] 所述將所述圖形元素的繪制信息按預設的編碼規(guī)則編碼為數(shù)字,包括:
[0193] 根據(jù)所述圖形元素與開始標記和結(jié)束標記的對應關系,獲得所述圖形元素對應的 開始標記和結(jié)束標記。
[0194] 根據(jù)所述繪制信息與數(shù)字的對應關系,獲得所述繪制信息對應的數(shù)字。
[0195] 記錄所述開始標記和結(jié)束標記,并在所述開始標記和結(jié)束標記之間記錄所述繪制 信息對應的數(shù)字。
[0196] 本公開提供的實施例中,對于SVG的文件源碼,可以包括一個圖形元素,也可以同 時包括多個圖形元素,每個圖形元素具有對應的繪制信息。例如,圖1B所示的SVG文件中 包含一個svg根元素的繪制信息,以及一個circle圖形元素的繪制信息。為了能在壓縮文 件中區(qū)分圖形元素,可以預先設定圖形元素的開始標記和結(jié)束標記,例如,可以用數(shù)字1表 示圖形元素開始,用數(shù)字3表示圖形元素結(jié)束。其中,各種圖形元素的開始標記和結(jié)束標記 可以都相同,也可以對每種圖形元素設定不同的開始標記和結(jié)束標記,開始標記和結(jié)束標 記的具體形式可以根據(jù)實際需要而設定,本公開實施例對此不作限定。
[0197] 其中,在編碼時,SVG文件中會涉及一些常見的字符串,例如width、circle或 height等字符串,可以預先設定繪制信息與數(shù)字的對應關系作為編碼規(guī)則,按照編碼規(guī)則 可以將所述圖形元素的繪制信息快速轉(zhuǎn)換為對應的數(shù)字。
[0198] 在編碼時,可以記錄所述開始標記和結(jié)束標記,并在所述開始標記和結(jié)束標記之 間記錄所述繪制信息對應的數(shù)字,最終獲得的一串數(shù)字即為SVG的壓縮文件。
[0199] 由上述實施例可見,由于編碼規(guī)則中記錄有圖形元素與開始標記和結(jié)束標記的對 應關系,因此可以利用開始標記和結(jié)束標記區(qū)分SVG文件中的不同的圖形元素,有利于在 對壓縮文件進行解析時區(qū)分不同的圖形元素。
[0200] 在一個可選的實現(xiàn)方式中,進一步的,所述繪制信息包括圖形元素名和圖形元素 的屬性信息,所述屬性信息包括屬性名、屬性值的數(shù)據(jù)類型和屬性值。
[0201] 所述繪制信息與數(shù)字的對應關系包括:圖形元素名與數(shù)字的對應關系、屬性名與 數(shù)字的對應關系,以及屬性值的數(shù)據(jù)類型與數(shù)字的對應關系。
[0202] 所述根據(jù)所述繪制信息與數(shù)字的對應關系,獲得所述繪制信息對應的數(shù)字,包 括:
[0203] 根據(jù)所述圖形元素名與數(shù)字的對應關系,獲得所述圖形元素名對應的數(shù)字。
[0204] 根據(jù)所述屬性名與數(shù)字的對應關系,獲得所述屬性名對應的數(shù)字。
[0205] 根據(jù)所述屬性值的數(shù)據(jù)類型與數(shù)字的對應關系,獲得所述屬性值的數(shù)據(jù)類型對應 的數(shù)字。
[0206] 所述在所述開始標記和結(jié)束標記之間記錄所述繪制信息對應的數(shù)字,包括:
[0207] 在所述開始標記和結(jié)束標記之間記錄所述圖形元素名對應的數(shù)字、屬性名對應的 數(shù)字和屬性值的數(shù)據(jù)類型對應的數(shù)字和所述屬性值。
[0208] 本公開實施例中,由SVG的文件源碼可知,圖形元素的繪制信息可以包括標簽以 及包含在標簽內(nèi)部的內(nèi)容,它構(gòu)成了文件的主要結(jié)構(gòu),SVG文件表達的數(shù)據(jù)信息都包含在圖 形元素及其屬性中。屬性可以使用"名稱=值"的形式來描述圖形元素的信息,屬性依附于 圖形元素存在。
[0209] 例如,仍以圖1B所示的SVG文件為例進行說明,若該SVG文件源碼的繪制信息按 照節(jié)點進行劃分,節(jié)點可以包括元素、屬性、文本、注釋及文檔根元素等。
[0210] 元素:如〈8¥8>....〈/8¥8>,〈(^1^]^"/>就是一個元素。形式為"〈[仙1116]>,"〈/ [name]〉"格式的字符串,及其被包圍的內(nèi)容,就是一個元素。其中[name]是由字母、數(shù)字、 下劃線、"以及漢字等組成的字符串。它的簡寫模式是〈[name]/〉。
[0211] 屬性:一個元素可以包含若干屬性,屬性包括屬性名、數(shù)據(jù)類型和屬性值。屬性的 聲明從元素的定義開始,由元素名和元素值組成。其形式為[key] =" [value]",key是由 元素[name] -樣的字符串組成,[value]需要用雙引號或者單引號包圍,可以是任意字符。 屬性必須和元素寫在一起,形式為〈[name] [keyl] =" [valuel] "[key2] =" [value2] "... >
[0212] 文本(圖IB的SVG文件源碼未示出有關文本的代碼):被元素包圍的內(nèi)容,即 〈[name]〉[text]〈/[name]〉中[text]部分,就是文本的內(nèi)容。
[0213] 注釋:以〈!一開頭和一> 結(jié)尾包含的內(nèi)容,就是注釋的內(nèi)容。
[0214] 文檔根元素:就是xml文檔的最外層元素。對于SVG文檔,根元素總是"svg"。