999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

一例WEB頁面圖片本地預加載實現

2010-01-01 00:00:00
電腦知識與技術 2010年5期

摘要:由于受客戶端控件加載圖片時間段影響,以及JS(JavaScript)的異步執行模式制約,往往對客戶端控件所加載的圖片進行處理,會出現圖片未加載完,而JS處理代碼已經開始執行的情況,此時會造成JS相關代碼執行錯誤。該文就這種在WEB頁面開發過程中常見的問題進行了詳細分析,并在此基礎上設計了相應解決方案,給出了部分關鍵代碼。

關鍵詞:預加載;異步執行;本地加載;瀏覽器緩存

中圖分類號:TP311文獻標識碼:A文章編號:1009-3044(2010)05-1223-02

One Cases of WEB Page Picture of Local Pre-loaded to Achieve

HE Miao

(Nanjing College of Information Technology, Nanjing 210046, China)

Abstract: Due to client controls affect the time you load your images, and JS (JavaScript) of asynchronous execution mode constraints are often loaded on the client-side controls the image processing, there will be finished picture is not loaded, while the JS processing code the situation has already begun at this time would cause JS errors related to code execution. In this paper, the development process in the WEB page frequently asked questions are analyzed in detail, and on this basis to design the corresponding solution, and given some key code.

Key words: pre-load; asynchronous implementation; local load; browser cache

1 問題描述

在WEB項目開發中出現以下需求:網頁能夠提供給用戶上傳頭像圖片的功能,而該功能要求能夠為用戶在手頭沒有頭像近照的情況下,可以提供對含有用戶影象的生活照片進行頭像剪截功能。

因此,我們設計讓用戶先在客戶端本地將待處理圖片(母圖)打開顯示,用JS提供給用戶頭像截取的大小、尺寸位置選擇框,改框由JS實現成可以由用戶在客戶端按實際需求進行任意調整,當調整完畢確定后,WEB頁面統一將母圖與用戶選擇的截取區域的對角坐標與寬高上傳至服務器,然后在服務器利用圖形處理類庫統一處理,當處理成功后,將截取的目標頭像(子圖)隨頁面回發給客戶端,并在相應客戶端控件中顯示。整個設計處理流程如圖1。

在以上過程中的動作(1)操作時,由于受圖片控件容器加載速度影響,尤其是當加載大尺寸圖片時,即使圖片在客戶端本地,也存在一個短暫的加載過程,而此時JS為后面圖片截取進行的母圖初始化過程(例如此處圖片按照一定的縮放比例顯示出來)已經開始執行,在這個執行過程中,需要母圖的寬、高、大小等圖片信息,但由于圖片還沒加載完畢,相應圖片信息無法獲取,因此導致JS為圖片進行的初始化處理失敗,表現為母圖加載入HTML容器時異常顯示,且初始化的截取矩形框顯示不正常。

2 圖片本地加載設計

根據問題原因分析,需要使用異步的方法為圖片設置預加載,即只有當圖片加載完畢后,再對圖片獲取基本信息,然后根據基本信息執行圖片截取初始化JS代碼。以下實現為.NET環境,服務器端代碼為C#.NET。

2.1 設置瀏覽器緩存圖片對象

為了預先加載圖片后獲取圖片信息,可以先用JS創建Image對象,并預加載圖片:

var tempimg = document.createElement(\"img\");//設置全局Image對象

function preview(ImageUrl) {

tempimg.src = ImageUrl;

ImagePreLoad(); //檢測圖片有沒加載完畢

}

2.2 判斷預加載圖片是否完成

由于預加載圖片有一個過程,需要不斷進行判斷是否加載完畢,可以使用Image對象的readyState屬性來判斷,并用setTimeout進行遞歸判斷,為防止遞歸過頻,降低系統資源,因此設置setTimeout觸發遞歸間隔時間為100ms。

function ImagePreLoad() {if (tempimg.readyState != \"complete\") {

setTimeout(\"ImagePreLoad(document.getElementById('tempImage'))\", 100);

} else { previewComplete();//當加載完畢后開始圖片處理初始化

}}

2.3 圖片截取處理初始化

圖片截取處理初始化分為2步:1)將圖片按圖片原尺寸結合縮小在500*500范圍以內顯示于HTML容器中,以便用戶查看截取。

//計算圖片按最大象素壓縮后的寬與高

var width = tempimg.width; var height = tempimg.height;

if (width > height) { width = 500;

height = tempimg.height * (500 / tempimg.width);

document.getElementById(\"BiLi\").value = 500 / tempimg.width;}//記錄縮放比例

else { height = 500;

width = tempimg.width * (500 / tempimg.height);

document.getElementById(\"BiLi\").value = 500 / tempimg.height; }//記錄縮放比例

2)根據圖片寬和高以及縮放比例生成JS截取處理對象。

document.getElementById(\"bgDiv\").innerHTML =

\"

\" + //定義截取框對象并加入母圖HTML容器

\"\" +

\"

\" +

\"

\" +

\"

\" +

\"

\" +

\"

\" +

\"

\" +

\"\" +

\"\";

var CutImageObj = new ImgCropper(\"bgDiv\", \"dragDiv\", ImageUrl, width, height,

{ Right: \"rRight\", Left: \"rLeft\", Up: \"rUp\", Down: \"rDown\", RightDown: \"rRightDown\",

LeftDown: \"rLeftDown\", RightUp: \"rRightUp\", LeftUp: \"rLeftUp\"});

定義的CutImageObj為圖片截取處理對象,主要負責實現截取區域選擇,并將截取矩形區域的左上角坐標、區域的寬和高通過HTML隱藏控件傳遞至服務器端。

var drag = document.getElementById(\"dragDiv\");

document.getElementById(\"L\").value = drag.offsetLeft; //獲取左上角離母圖左邊框距離

document.getElementById(\"T\").value = drag.offsetTop; //獲取左上角離母圖上邊框距離

document.getElementById(\"W\").value = drag.offsetWidth; //獲取截取區域寬

document.getElementById(\"H\").value = drag.offsetHeight; //獲取截取區域高

2.4 根據截取區域進行圖片處理

//t,l為截取圖片在原圖的坐標,w,h為截取圖片寬高,BiLi為母圖縮放比例

float BiLi = float.Parse(this.BiLi.Value);

int t = Convert.ToInt32(int.Parse(this.T.Value)/BiLi);

int l = Convert.ToInt32(int.Parse(this.L.Value)/BiLi);

int w = Convert.ToInt32(int.Parse(this.W.Value)/BiLi);

int h = Convert.ToInt32(int.Parse(this.H.Value)/BiLi);

//獲取截取圖片對象,strPhotoName為母圖在服務器端的路徑

Bitmap bitmap = GetPartOfImage(strPhotoName, w, h, l, t);

3 運行結果總結

由于使用了異步模式判斷,只有當圖片加載完畢時,才開始執行母圖片截取處理初試化,此時已可以獲取母圖的基本屬性信息,為定義截取對象提供必要信息,使得用戶可以正常利用截取矩形框按需拖放截取圖片區域。截取初始化效果如圖2。

參考文獻:

[1] 劉軒明,林連雷,姜守達.一種數字地圖圖片加載方法[J].自動化技術與應用,2009,28(10).

[2] 歐永紅,姚耀文.一種基于IE緩存的WEB圖片獲取方法[J].計算機系統應用,2009(12).

[3] 伊夫杰.ASP.NET2.0高級編程[M].李敏波,譯.4版.北京:清華大學出版社,2006.

[4] 程不功,龍躍進,卓琳.ASP.NET2.0動態網站開發教程[M].北京:清華大學出版社,2006.

[5] msdn主頁[EB/OL].http://msdn.microsoft.com/zh-cn/default.aspx.

主站蜘蛛池模板: 欧美精品v| 国内精品手机在线观看视频| 亚洲一区二区三区国产精品| 欧美va亚洲va香蕉在线| 国产第一色| 亚洲国产成人综合精品2020| 国产精品亚洲片在线va| 免费观看欧美性一级| 日韩AV手机在线观看蜜芽| 日本成人在线不卡视频| 午夜少妇精品视频小电影| 毛片在线区| 欧美日韩精品一区二区在线线 | 成人免费午间影院在线观看| 九色在线观看视频| 国产精品yjizz视频网一二区| 国产在线精品人成导航| 成人免费午间影院在线观看| 国产毛片网站| 中国丰满人妻无码束缚啪啪| 久久精品91麻豆| 亚洲色大成网站www国产| 国产呦视频免费视频在线观看| 国产成人综合久久| 一本大道东京热无码av| 国产人前露出系列视频| 免费av一区二区三区在线| 国产簧片免费在线播放| 最新亚洲av女人的天堂| 91青青视频| 国产视频一二三区| 亚洲一区二区约美女探花| 亚洲人成网站色7799在线播放| 亚洲日本一本dvd高清| 免费国产高清视频| 夜夜操狠狠操| 精品久久久久无码| 亚洲人人视频| 日本www色视频| 天堂成人av| 19国产精品麻豆免费观看| 浮力影院国产第一页| 国产乱子伦精品视频| 精品成人一区二区三区电影| aⅴ免费在线观看| 亚洲中字无码AV电影在线观看| 久久亚洲高清国产| 亚洲永久色| 久久国产av麻豆| 国产高清在线观看91精品| 精品免费在线视频| 一级毛片不卡片免费观看| 无码专区在线观看| 欧美区一区| 久久婷婷五月综合97色| 国产在线精彩视频论坛| 婷婷亚洲视频| 波多野结衣无码视频在线观看| 又大又硬又爽免费视频| 欧美三级视频网站| 在线观看无码a∨| 日韩 欧美 小说 综合网 另类| 日韩A∨精品日韩精品无码| 国产va免费精品观看| 亚洲精品爱草草视频在线| 成人福利在线视频| 亚洲精品麻豆| 乱系列中文字幕在线视频| 老汉色老汉首页a亚洲| 中文字幕一区二区人妻电影| 久久精品嫩草研究院| 欧美日韩国产综合视频在线观看 | 日韩欧美国产三级| 国产白浆视频| 久久91精品牛牛| 久久综合干| 亚洲三级成人| 激情国产精品一区| 99热这里只有精品国产99| 天天综合网站| 性视频久久| 日韩精品无码不卡无码|