本發(fā)明涉及一種將網(wǎng)頁圖片拖拽到軟件界面的方法以及系統(tǒng)。
背景技術(shù):
現(xiàn)今軟件的功能五花八門,功能強(qiáng)大。在各類軟件的實(shí)際應(yīng)用中,如何方便使用者產(chǎn)生豐富多彩的圖片資源成為很重要的關(guān)注點(diǎn)。大家都知道現(xiàn)在是互聯(lián)網(wǎng)時(shí)代,很多圖片都可以從網(wǎng)上直接下載。但試想下,目前要將某網(wǎng)站上的圖片插入到軟件中,成為軟件內(nèi)容展示的一個(gè)功能,絕大多數(shù)的使用者,比如經(jīng)過如下的步驟才能將圖片放入軟件中:
首先,打開網(wǎng)頁瀏覽器(可能是另一個(gè)軟件);
其次,輸入圖片地址,打開網(wǎng)頁圖片;
再次,選中網(wǎng)頁上打開的圖片,將圖片另存到本地磁盤中;
最后,用軟件提供的“插入圖片”功能從保存到磁盤的圖片文件插入到軟件中。
由此可見要要經(jīng)過一系列操作才能將圖片插入到對應(yīng)的軟件中,期間操作步驟負(fù)責(zé),繁瑣,經(jīng)常涉及到多端軟件的切換。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明要解決的技術(shù)問題,在于提供一種將網(wǎng)頁圖片拖拽到軟件界面的方法以及系統(tǒng),其操作過程簡單方便。
本發(fā)明之一是這樣實(shí)現(xiàn)的:一種將網(wǎng)頁圖片拖拽到軟件界面的方法,包括如下步驟:
步驟1、建立一軟件工程并添加網(wǎng)頁瀏覽器控件,通過網(wǎng)頁瀏覽器控件打開指定網(wǎng)頁;
步驟2、通過軟件工程接收網(wǎng)頁拖拽事件,并解析其攜帶的信息體;
步驟3、根據(jù)攜帶的信息體獲取圖片。
進(jìn)一步地,所述步驟3進(jìn)一步具體為:根據(jù)信息體中的img標(biāo)簽的src屬性值獲取圖片。
進(jìn)一步地,所述步驟3進(jìn)一步具體為:根據(jù)信息體中的img標(biāo)簽的src屬性值獲取圖片:
若src屬性值是一圖片地址,則直接用http協(xié)議下載圖片;
若src屬性值不是一圖片地址,則通過http協(xié)議下載該圖片,若下載不了,則從本地瀏覽器緩存獲取該圖片;
若src屬性值是圖片base64編碼,則直接對其解碼得到圖片。
進(jìn)一步地,還包括一步驟4、將圖片作為軟件工程一部分或者本地文件保存起來。
本發(fā)明之二是這樣實(shí)現(xiàn)的:一種將網(wǎng)頁圖片拖拽到軟件界面的系統(tǒng),包括如下模塊:
添加模塊,建立一軟件工程并添加網(wǎng)頁瀏覽器控件,通過網(wǎng)頁瀏覽器控件打開指定網(wǎng)頁;
解析模塊,通過軟件工程接收網(wǎng)頁拖拽事件,并解析其攜帶的信息體;
獲取模塊,根據(jù)攜帶的信息體獲取圖片。
進(jìn)一步地,所述獲取模塊進(jìn)一步具體為:根據(jù)信息體中的img標(biāo)簽的src屬性值獲取圖片。
進(jìn)一步地,所述獲取模塊進(jìn)一步具體為:根據(jù)信息體中的img標(biāo)簽的src屬性值獲取圖片:
若src屬性值是一圖片地址,則直接用http協(xié)議下載圖片;
若src屬性值不是一圖片地址,則通過http協(xié)議下載該圖片,若下載不了,則從本地瀏覽器緩存獲取該圖片;
若src屬性值是圖片base64編碼,則直接對其解碼得到圖片。
進(jìn)一步地,還包括一存儲模塊,將圖片作為軟件工程一部分或者本地文件保存起來。
本發(fā)明具有如下優(yōu)點(diǎn):本發(fā)明一種將網(wǎng)頁圖片拖拽到軟件界面的方法以及系統(tǒng),方便快捷的從網(wǎng)站拉去圖片資源,省去軟件使用者要去下載保存圖片,再從磁盤將保存下來的圖片用軟件打開的過程。
附圖說明
下面參照附圖結(jié)合實(shí)施例對本發(fā)明作進(jìn)一步的說明。
圖1為本發(fā)明方法執(zhí)行流程圖。
圖2為本發(fā)明系統(tǒng)原理框圖。
具體實(shí)施方式
如圖1所示,本發(fā)明將網(wǎng)頁圖片拖拽到軟件界面的方法,包括如下步驟:
步驟1、建立一軟件工程并添加網(wǎng)頁瀏覽器控件,通過網(wǎng)頁瀏覽器控件打開指定網(wǎng)頁;
步驟2、通過軟件工程接收網(wǎng)頁拖拽事件,并解析其攜帶的信息體;
步驟3、根據(jù)信息體中的img標(biāo)簽的src屬性值獲取圖片:
若src屬性值是一圖片地址,則直接用http協(xié)議下載圖片;
若src屬性值不是一圖片地址,則通過http協(xié)議下載該圖片,若下載不了,則從本地瀏覽器緩存獲取該圖片;
若src屬性值是圖片base64編碼,則直接對其解碼得到圖片。
步驟4、將圖片作為軟件工程一部分或者本地文件保存起來。
如圖2所示,本發(fā)明將網(wǎng)頁圖片拖拽到軟件界面的系統(tǒng),包括如下模塊:
添加模塊,建立一軟件工程并添加網(wǎng)頁瀏覽器控件,通過網(wǎng)頁瀏覽器控件打開指定網(wǎng)頁;
解析模塊,通過軟件工程接收網(wǎng)頁拖拽事件,并解析其攜帶的信息體;
獲取模塊,根據(jù)信息體中的img標(biāo)簽的src屬性值獲取圖片:
若src屬性值是一圖片地址,則直接用http協(xié)議下載圖片;
若src屬性值不是一圖片地址,則通過http協(xié)議下載該圖片,若下載不了,則從本地瀏覽器緩存獲取該圖片;
若src屬性值是圖片base64編碼,則直接對其解碼得到圖片。
存儲模塊,將圖片作為軟件工程一部分或者本地文件保存起來。
本發(fā)明一種具體實(shí)施方式:
本發(fā)明基于編程實(shí)現(xiàn),只要是面向?qū)ο笞兂汕矣刑峁┙馕鼍W(wǎng)頁源碼的任何編程語言及工具都可以作為本發(fā)明的實(shí)現(xiàn)工具。本實(shí)施例中采用Delphi作為開發(fā)工具,并由此作為例子說明。其他編程語言及工具雖然在細(xì)節(jié)上有差別,但其實(shí)現(xiàn)的本質(zhì)跟思路是一樣的。
一種將網(wǎng)頁圖片拖拽到軟件界面的方法,包括如下步驟:
步驟1:建立軟件工程并添加網(wǎng)頁瀏覽器控件;
具體包括如下步驟:
步驟11:建立軟件工程,設(shè)定相應(yīng)的UI操作界面;詳細(xì)說明如下:
該步驟可根據(jù)實(shí)際的軟件功能點(diǎn),進(jìn)行的相應(yīng)軟件界面設(shè)計(jì);最簡單的界面就是創(chuàng)建一個(gè)窗口,當(dāng)軟件主界面;
步驟12:在軟件工程中添加網(wǎng)頁瀏覽器控件,以便在軟件中直接打開指定的網(wǎng)頁;詳細(xì)說明如下:
該步驟可根據(jù)實(shí)際的軟件功能點(diǎn),進(jìn)行相應(yīng)的軟件界面設(shè)計(jì);最簡單的界面就是在步驟11創(chuàng)建的窗口上直接放置一個(gè)網(wǎng)頁瀏覽器控件;這邊用的是基于IE內(nèi)容的TWebBrowser;
步驟2:讓軟件接收網(wǎng)頁拖拽事件并解析其攜帶的信息體;
具體包括如下步驟:
步驟21:設(shè)置讓軟件工程能接收網(wǎng)頁拖拽事件;詳細(xì)說明如下:
由于window是基于消息驅(qū)動的,因此只要讓步驟11所建立的窗口捕獲系統(tǒng)定義的拖拽消息(WM_DROPFILES),并將后續(xù)的步驟中拖拽的事件處理放在該消息處理函數(shù)中即可;
步驟22:解析網(wǎng)頁拖拽事件產(chǎn)生攜帶的信息,這邊只關(guān)注網(wǎng)頁中的img標(biāo)簽;詳細(xì)說明如下:
獲取網(wǎng)頁被點(diǎn)擊的元素,利用封裝好的IHTMLElement接口可以獲取被點(diǎn)擊元素的標(biāo)簽類型(IHTMLElement的屬性tagName),這邊的標(biāo)簽是指網(wǎng)頁標(biāo)簽:div標(biāo)簽、img標(biāo)簽、a標(biāo)簽等。此處我們只要關(guān)注圖片,因此只要關(guān)注img標(biāo)簽即可。
如果當(dāng)期操作的是img標(biāo)簽,那么通過IHTMLElement的屬性outerHTML可以獲取該元素的網(wǎng)頁源代碼。因?yàn)槭莍mg標(biāo)簽元素,因此更進(jìn)一步從獲取的元素網(wǎng)頁源代碼獲取標(biāo)簽img的src屬性值。
IHTMLElement做為delphi開發(fā)封裝的操作接口類,如果用其他開發(fā)工具,一般也會有類似的操作接口類。
步驟3:根據(jù)攜帶不同信息體決定產(chǎn)生圖片的方式;
具體包括如下步驟:
步驟31:攜帶信息中img標(biāo)簽的src屬性值是一個(gè)圖片地址,則直接用http協(xié)議下載圖片;
例如,src值為:
http://www.iqcedu.com/IQCloudMainPro/resources/login/images/title.png
http://www.iqcedu.com/IQCloud/SpaceDisk/rds00003/55555555555-96703c6c893f402cbcb07782f19b6bb2-d0c618e75ec546368546c970fd06c40b.jpg
即以http打頭,以圖片擴(kuò)展名(jgp、bmp、png等)為結(jié)尾的地址。此類圖片地址,可以直接利用http協(xié)議下載圖片。
步驟32:攜帶信息中img標(biāo)簽的src屬性值不是一個(gè)圖片地址,則先嘗試用http協(xié)議下載該圖片,如果下載不了從本地瀏覽器緩存獲取該圖片;
例如,src值為:
http://b97.photo.store.qq.com/psb?/V11cLQoX45OkTm/Gzb12sgwTO*25v cBaEGarPpg*.xXOvkbo8eDHoKUCxw!/b/dGEAAAAAAAAA&bo=RAKVAQ AAAAAFB*Y!&rf=viewer_4
該值不是以圖片擴(kuò)展名為結(jié)尾,在此情況下,本發(fā)明提供的方式是,先將其當(dāng)成一個(gè)圖片地址,嘗試用http協(xié)議下載該圖片;不過發(fā)現(xiàn)有時(shí)有些圖片可以下載,有些圖片不能下載,因此如果不能下載,那么從瀏覽器緩存獲取該圖片。
步驟33:攜帶信息中img標(biāo)簽的src屬性值是圖片base64編碼,則直接直接對其解碼得到圖片內(nèi)容;
例如,src值為:
data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEAAkGBxMREhUTExMVFRIXGBgYGRgYFxYYFhoaGRkYGRgZFhYbHyggHxolGxcbIjEiJSkrLi4uFx8zODMtNygtLisBCgoKDg0OGxAQGzUmICUrLy0vNSstLS8tMi0tNS0uLS0tNS0tLS0tLS0tLS0tLS8tLS0rLS0tLS0tLS0tLS0tLf/AABEIANYA6wMBIgACEQEDEQH/xAAbAAEAAgMBAQAAAAAAAAAAAAAABAUCAwYBB//EAD8QAAEDAgQDBgMGBAUEAwAAAAEAAhEDIQQSMUEFUWETInGBkaEGMrEUQlLB0fAjcpLhFRZisvEzwtLiQ1Oi/8QAGQEBAAMBAQAAAAAAAAAAAAAAAAIDBAEF/8QAKBEAAgIBBAICAgEFAAAAAAAAAAECEQMEEiExIlETQTJhoQUjcYGR/9oADAMBAAIRAxEAPwD7iiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAq+L48ta8NsRlBPLMW6dYOq56nUIOYOOb8QN/MrosS8PdOwBHjce1lX47BZu835gAIEAEA/3O6wrWqORxl1fZfjpLkiUcbUa4PzuN9C4kHmImP0XV0Koe0OGhEhcrUwLgwuJAgE5YnQT806+Ssfh3E60z/M3/uH0PmVshlhkva+hkimrReIiKRQEREAREQBERAEReO......
此為圖片的base64編碼。圖片信息直接放在src里。類似的還有png格式:data:image/png;base64,......
步驟4:實(shí)現(xiàn)各類獲取圖片的具體方法;
具體包括如下步驟:
步驟41:用http協(xié)議下載圖片方法;
如果src值滿足步驟31,則直接用http協(xié)議下載圖片,將圖片下載到本地或者軟件直接顯示下載好的圖片;這邊可以直接利用delphi開發(fā)工具封裝好的函數(shù)URLDownloadToFile直接下載圖片;
步驟42:從本地瀏覽器緩存獲取圖片的方法;
從瀏覽器緩存獲取過程需要調(diào)用delphi開發(fā)工具封裝的API:FindFirstUrlCacheEntry、FindNextUrlCacheEntry。如果用其他開發(fā)工具,一般也會有相應(yīng)的操作函數(shù)。
步驟43:從圖片base64編碼中解碼得到圖片的方法;
data:image/jpeg;base64,后面的文字其實(shí)是已經(jīng)是一張圖片的base61編碼,利用API函數(shù)DecodeStream可以解碼獲取圖片。
步驟5:軟件將產(chǎn)生的圖片作為軟件一部分或者本地文件保存起來;
圖片經(jīng)過http下載、瀏覽器緩存獲取、直接解碼得到,那么就可以做為一個(gè)圖片文件資源存在,或放在磁盤,或直接在軟件顯示。
雖然以上描述了本發(fā)明的具體實(shí)施方式,但是熟悉本技術(shù)領(lǐng)域的技術(shù)人員應(yīng)當(dāng)理解,我們所描述的具體的實(shí)施例只是說明性的,而不是用于對本發(fā)明的范圍的限定,熟悉本領(lǐng)域的技術(shù)人員在依照本發(fā)明的精神所作的等效的修飾以及變化,都應(yīng)當(dāng)涵蓋在本發(fā)明的權(quán)利要求所保護(hù)的范圍內(nèi)。