成人性生交大片免费看视频r_亚洲综合极品香蕉久久网_在线视频免费观看一区_亚洲精品亚洲人成人网在线播放_国产精品毛片av_久久久久国产精品www_亚洲国产一区二区三区在线播_日韩一区二区三区四区区区_亚洲精品国产无套在线观_国产免费www

主頁 > 知識庫 > 通過Canvas及File API縮放并上傳圖片完整示例

通過Canvas及File API縮放并上傳圖片完整示例

熱門標簽:四川移動電銷外呼客戶管理系統(tǒng) 百度地圖標注為什么總是封號 地圖標注柱狀圖 臨海地圖標注app 咸陽穩(wěn)定外呼系統(tǒng)軟件 怎么做百度地圖標注 400開頭的電話好申請不 智能芯電話機器人 小朱地圖標注
示例地址:Canvas Resize Demo
原文作者:Dr. Tom Trenka
原文日期: 2013年8月6日
翻譯日期: 2013年8月8日

Tom Trenka 能為"我"的博客寫一篇文章,對我來說是一個巨大的榮譽。Tom是Dojo框架的最初貢獻者之一,也是我在SitePen公司的良師益友.我見證了他最頂級的天才能力,并且他總是第一個以前瞻性的解決方案預見了很多棘手的問題。他總是站在局外思考,打破常規(guī)但卻又堅實可靠地解決邊緣問題。本文就是一個完美的例證。
最近我總是被問道要創(chuàng)造一個用戶接口API,允許用戶上傳圖片到服務器上(伴隨其他的事情),并能在我們公司提供支持的大量網(wǎng)站的客戶端上使用。通常來說這都是很容易的事情——創(chuàng)建一個form表單,添加一個file類型的input輸入框,讓用戶從電腦里選擇圖片,并在form標簽上設置enctype="multipart/form-data"表單屬性,然后上傳即可。非常簡單,不是嗎?事實上,這里有一個足夠簡單的例子;點擊進入
但是如果你想要通過某些方式預先處理一下圖片再上傳,那該怎么辦?比如說,你必須先壓縮圖片尺寸,或者需要圖片只能是某些種類的格式,如 png 或者jpg,你怎么辦?
用canvas來解決!

Canvas簡介
canvas 是一個HTML5新增的DOM元素,允許用戶在頁面上直接地繪制圖形,通常是使用JavaScript.而不同的格式標準也是不同的,比如SVG是光柵API(raster API) 而VML卻是向量API(vector API).可以考慮使用Adobe Illustrator(矢量圖)作圖與使用 Adobe Photoshop (光柵圖)作圖的區(qū)別。

在canvas(畫布)上能做的事情就是讀取和渲染圖像,并且允許你通過JavaScript操縱圖像數(shù)據(jù)。已經有很多現(xiàn)存的文章來為你演示基本的圖像處理——主要關注與各種不同的圖像過濾技術( image filtering techniques)——但我們需要的僅僅是縮放圖片并轉換到特定的文件格式,而canvas完全可以做到這些事情。

我們假定的需求,比如圖像高度不超過100像素,不管原始圖像有多高?;镜拇a如下所示:

復制代碼
代碼如下:

// 參數(shù),最大高度
var MAX_HEIGHT = 100;
// 渲染
function render(src){
// 創(chuàng)建一個 Image 對象
var image = new Image();
// 綁定 load 事件處理器,加載完成后執(zhí)行
image.onload = function(){
// 獲取 canvas DOM 對象
var canvas = document.getElementById("myCanvas");
// 如果高度超標
if(image.height > MAX_HEIGHT) {
// 寬度等比例縮放 *=
image.width *= MAX_HEIGHT / image.height;
image.height = MAX_HEIGHT;
}
// 獲取 canvas的 2d 環(huán)境對象,
// 可以理解Context是管理員,canvas是房子
var ctx = canvas.getContext("2d");
// canvas清屏
ctx.clearRect(0, 0, canvas.width, canvas.height);
// 重置canvas寬高
canvas.width = image.width;
canvas.height = image.height;
// 將圖像繪制到canvas上
ctx.drawImage(image, 0, 0, image.width, image.height);
// !!! 注意,image 沒有加入到 dom之中
};
// 設置src屬性,瀏覽器會自動加載。
// 記住必須先綁定事件,才能設置src屬性,否則會出同步問題。
image.src = src;
};

在上面的例子中,你可以使用canvas 的 toDataURL() 方法獲取圖像的 Base64編碼的值(可以類似理解為16進制字符串,或者二進制數(shù)據(jù)流).
注意: canvas 的 toDataURL() 獲取的URL以字符串開頭,有22個無用的數(shù)據(jù) "data:image/png;base64,",需要在客戶端或者服務端進行過濾.
原則上只要瀏覽器支持,URL地址的長度是沒有限制的,而1024的長度限制,是老一代IE所獨有的。

請問,如何獲取我們需要的圖像呢?
好孩子,很高興你能這么問。你并不能通過File 輸入框來直接處理,你從這個文件輸入框元素所能獲取的僅僅是用戶所選擇文件的path路徑。按照常規(guī)想象,你可以通過這個path路徑信息來加載圖像,但是,在瀏覽器里面這是不現(xiàn)實的。(譯者注:瀏覽器廠商必須保證自己的瀏覽器絕對安全,才能獲得市場,至少避免媒體的攻擊,如果允許這樣做,那惡意網(wǎng)址可以通過拼湊文件路徑來嘗試獲取某些敏感信息).
為了實現(xiàn)這個需求,我們可以使用HTML5的File API 來讀取用戶磁盤上的文件,并用這個file來作為圖像的源(src,source).

File API簡介
新的File API接口是在不違背任何安全沙盒規(guī)則下,讀取和列出用戶文件目錄的一個途徑—— 通過沙盒(sandbox)限制,惡意網(wǎng)站并不能將病毒寫入用戶磁盤,當然更不能執(zhí)行。
我們要使用的文件讀取對象叫做 FileReader,FileReader允許開發(fā)者讀取文件的內容(具體瀏覽器的實現(xiàn)方式可能大不相同)。

假設我們已經獲取了圖像文件的path路徑,那么依賴前面的代碼,使用FileReader來加載和渲染圖像就變得很容易了:

復制代碼
代碼如下:

// 加載 圖像文件(url路徑)
function loadImage(src){
// 過濾掉 非 image 類型的文件
if(!src.type.match(/image.*/)){
if(window.console){
console.log("選擇的文件類型不是圖片: ", src.type);
} else {
window.confirm("只能選擇圖片文件");
}
return;
}
// 創(chuàng)建 FileReader 對象 并調用 render 函數(shù)來完成渲染.
var reader = new FileReader();
// 綁定load事件自動回調函數(shù)
reader.onload = function(e){
// 調用前面的 render 函數(shù)
render(e.target.result);
};
// 讀取文件內容
reader.readAsDataURL(src);
};

請問,如何獲取文件呢?
小白兔,要有耐心!我們的下一步就是獲取文件,當然有好多方法可以實現(xiàn)啦。例如:你可以用文本框讓用戶輸入文件路徑,但很顯然大多數(shù)用戶都不是開發(fā)者,對輸入什么值根本就不了解.
為了用戶使用方便,我們采用 Drag and Drop API接口。

使用 Drag and Drop API
拖拽接口(Drag and Drop)非常簡單——在大多數(shù)的DOM元素上,你都可以通過綁定事件處理器來實現(xiàn). 只要用戶從磁盤上拖動一個文件到dom對象上并放開鼠標,那我們就可以讀取這個文件。代碼如下:

復制代碼
代碼如下:

function init(){
// 獲取DOM元素對象
var target = document.getElementById("drop-target");
// 阻止 dragover(拖到DOM元素上方) 事件傳遞
target.addEventListener("dragover", function(e){e.preventDefault();}, true);
// 拖動并放開鼠標的事件
target.addEventListener("drop", function(e){
// 阻止默認事件,以及事件傳播
e.preventDefault();
// 調用前面的加載圖像 函數(shù),參數(shù)為dataTransfer對象的第一個文件
loadImage(e.dataTransfer.files[0]);
}, true);
var setheight = document.getElementById("setheight");
var maxheight = document.getElementById("maxheight");
setheight.addEventListener("click", function(e){
//
var value = maxheight.value;
if(/^\d+$/.test(value)){
MAX_HEIGHT = parseInt(value);
}
e.preventDefault();
},true);
var btnsend = document.getElementById("btnsend");
btnsend.addEventListener("click", function(e){
//
sendImage();
},true);
};

我們還可以做一些其他的處理,比如顯示預覽圖。但如果不想壓縮圖片的話,那很可能沒什么用。我們將采用Ajax通過HTTP 的post方式上傳圖片數(shù)據(jù)。下面的例子是使用Dojo框架來完成請求的,當然你也可以采用其他的Ajax技術來實現(xiàn).
Dojo 代碼如下:

復制代碼
代碼如下:

// 譯者并不懂Dojo,所以將在后面附上jQuery的實現(xiàn)
// Remember that DTK 1.7+ is AMD!
require(["dojo/request"], function(request){
// 設置請求URL,參數(shù),以及回調。
request.post("image-handler.php", {
data: {
imageName: "myImage.png",
imageData: encodeURIComponent(document.getElementById("canvas").toDataURL("image/png"))
}
}).then(function(text){
console.log("The server returned: ", text);
});
});

jQuery 實現(xiàn)如下:

復制代碼
代碼如下:

// 上傳圖片,jQuery版
function sendImage(){
// 獲取 canvas DOM 對象
var canvas = document.getElementById("myCanvas");
// 獲取Base64編碼后的圖像數(shù)據(jù),格式是字符串
// "data:image/png;base64,"開頭,需要在客戶端或者服務器端將其去掉,后面的部分可以直接寫入文件。
var dataurl = canvas.toDataURL("image/png");
// 為安全 對URI進行編碼
// data%3Aimage%2Fpng%3Bbase64%2C 開頭
var imagedata = encodeURIComponent(dataurl);
//var url = $("#form").attr("action");
// 1. 如果form表單不好處理,可以使用某個hidden隱藏域來設置請求地址
// <input type="hidden" name="action" value="receive.jsp" />
var url = $("input[name='action']").val();
// 2. 也可以直接用某個dom對象的屬性來獲取
// <input id="imageaction" type="hidden" action="receive.jsp">
// var url = $("#imageaction").attr("action");
// 因為是string,所以服務器需要對數(shù)據(jù)進行轉碼,寫文件操作等。
// 個人約定,所有http參數(shù)名字全部小寫
console.log(dataurl);
//console.log(imagedata);
var data = {
imagename: "myImage.png",
imagedata: imagedata
};
jQuery.ajax( {
url : url,
data : data,
type : "POST",
// 期待的返回值類型
dataType: "json",
complete : function(xhr,result) {
//console.log(xhr.responseText);
var $tip2 = $("#tip2");
if(!xhr){
$tip2.text('網(wǎng)絡連接失敗!');
return false;
}
var text = xhr.responseText;
if(!text){
$tip2.text('網(wǎng)絡錯誤!');
return false;
}
var json = eval("("+text+")");
if(!json){
$tip2.text('解析錯誤!');
return false;
} else {
$tip2.text(json.message);
}
//console.dir(json);
//console.log(xhr.responseText);
}
});
};

OK,搞定!你還需要做的,就是創(chuàng)建一個只管的用戶界面,并允許你控制圖片的大小。上傳到服務器端的數(shù)據(jù),并不需要處理enctype為 multi-part/form-data 的情況,僅僅一個簡單的POST表單處理程序就可以了.
好了,下面附上完整的代碼示例:

復制代碼
代碼如下:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE html>
<html>
<head>
<title>通過Canvas及File API縮放并上傳圖片</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="Canvas,File,Image">
<meta http-equiv="description" content="2013年8月8日,renfufei@qq.com">
<script src="http://code.jquery.com/jquery-1.7.1.min.js"></script>
<script>
// 參數(shù),最大高度
var MAX_HEIGHT = 100;
// 渲染
function render(src){
// 創(chuàng)建一個 Image 對象
var image = new Image();
// 綁定 load 事件處理器,加載完成后執(zhí)行
image.onload = function(){
// 獲取 canvas DOM 對象
var canvas = document.getElementById("myCanvas");
// 如果高度超標
if(image.height > MAX_HEIGHT) {
// 寬度等比例縮放 *=
image.width *= MAX_HEIGHT / image.height;
image.height = MAX_HEIGHT;
}
// 獲取 canvas的 2d 環(huán)境對象,
// 可以理解Context是管理員,canvas是房子
var ctx = canvas.getContext("2d");
// canvas清屏
ctx.clearRect(0, 0, canvas.width, canvas.height);
// 重置canvas寬高
canvas.width = image.width;
canvas.height = image.height;
// 將圖像繪制到canvas上
ctx.drawImage(image, 0, 0, image.width, image.height);
// !!! 注意,image 沒有加入到 dom之中
};
// 設置src屬性,瀏覽器會自動加載。
// 記住必須先綁定事件,才能設置src屬性,否則會出同步問題。
image.src = src;
};
// 加載 圖像文件(url路徑)
function loadImage(src){
// 過濾掉 非 image 類型的文件
if(!src.type.match(/image.*/)){
if(window.console){
console.log("選擇的文件類型不是圖片: ", src.type);
} else {
window.confirm("只能選擇圖片文件");
}
return;
}
// 創(chuàng)建 FileReader 對象 并調用 render 函數(shù)來完成渲染.
var reader = new FileReader();
// 綁定load事件自動回調函數(shù)
reader.onload = function(e){
// 調用前面的 render 函數(shù)
render(e.target.result);
};
// 讀取文件內容
reader.readAsDataURL(src);
};
// 上傳圖片,jQuery版
function sendImage(){
// 獲取 canvas DOM 對象
var canvas = document.getElementById("myCanvas");
// 獲取Base64編碼后的圖像數(shù)據(jù),格式是字符串
// "data:image/png;base64,"開頭,需要在客戶端或者服務器端將其去掉,后面的部分可以直接寫入文件。
var dataurl = canvas.toDataURL("image/png");
// 為安全 對URI進行編碼
// data%3Aimage%2Fpng%3Bbase64%2C 開頭
var imagedata = encodeURIComponent(dataurl);
//var url = $("#form").attr("action");
// 1. 如果form表單不好處理,可以使用某個hidden隱藏域來設置請求地址
// <input type="hidden" name="action" value="receive.jsp" />
var url = $("input[name='action']").val();
// 2. 也可以直接用某個dom對象的屬性來獲取
// <input id="imageaction" type="hidden" action="receive.jsp">
// var url = $("#imageaction").attr("action");
// 因為是string,所以服務器需要對數(shù)據(jù)進行轉碼,寫文件操作等。
// 個人約定,所有http參數(shù)名字全部小寫
console.log(dataurl);
//console.log(imagedata);
var data = {
imagename: "myImage.png",
imagedata: imagedata
};
jQuery.ajax( {
url : url,
data : data,
type : "POST",
// 期待的返回值類型
dataType: "json",
complete : function(xhr,result) {
//console.log(xhr.responseText);
var $tip2 = $("#tip2");
if(!xhr){
$tip2.text('網(wǎng)絡連接失敗!');
return false;
}
var text = xhr.responseText;
if(!text){
$tip2.text('網(wǎng)絡錯誤!');
return false;
}
var json = eval("("+text+")");
if(!json){
$tip2.text('解析錯誤!');
return false;
} else {
$tip2.text(json.message);
}
//console.dir(json);
//console.log(xhr.responseText);
}
});
};
function init(){
// 獲取DOM元素對象
var target = document.getElementById("drop-target");
// 阻止 dragover(拖到DOM元素上方) 事件傳遞
target.addEventListener("dragover", function(e){e.preventDefault();}, true);
// 拖動并放開鼠標的事件
target.addEventListener("drop", function(e){
// 阻止默認事件,以及事件傳播
e.preventDefault();
// 調用前面的加載圖像 函數(shù),參數(shù)為dataTransfer對象的第一個文件
loadImage(e.dataTransfer.files[0]);
}, true);
var setheight = document.getElementById("setheight");
var maxheight = document.getElementById("maxheight");
setheight.addEventListener("click", function(e){
//
var value = maxheight.value;
if(/^\d+$/.test(value)){
MAX_HEIGHT = parseInt(value);
}
e.preventDefault();
},true);
var btnsend = document.getElementById("btnsend");
btnsend.addEventListener("click", function(e){
//
sendImage();
},true);
};
window.addEventListener("DOMContentLoaded", function() {
//
init();
},false);
</script>
</head>
<body>
<div>
<h1>通過Canvas及File API縮放并上傳圖片</h1>
<p>從文件夾拖動一張照片到下方的盒子里, canvas 和 JavaScript將會自動的進行縮放.</p>
<div>
<input type="text" id="maxheight" value="100"/>
<button id="setheight">設置圖片最大高度</button>
<input type="hidden" name="action" value="receive.jsp" />
</div>
<div id="preview-row">
<div id="drop-target" style="width:400px;height:200px;min-height:100px;min-width:200px;background:#eee;cursor:pointer;">拖動圖片文件到這里...</div>
<div>
<div>
<button id="btnsend"> 上 傳 </button> <span id="tip2" style="padding:8px 0;color:#f00;"></span>
</div>
</div>
<div><h4>縮略圖:</h4></div>
<div id="preview" style="background:#f4f4f4;width:400px;height:200px;min-height:100px;min-width:200px;">
<canvas id="myCanvas"></canvas>
</div>
</div>
</div>
</body>
</html>

服務端頁面,receive.jsp

復制代碼
代碼如下:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@page import="sun.misc.BASE64Decoder"%>
<%@page import="java.io.*"%>
<%@page import="org.springframework.web.util.UriComponents"%>
<%@page import="java.net.URLDecoder"%>
<%!
// 本文件:/receive.jsp
// 圖片存放路徑
String photoPath = "D:/blog/upload/photo/";
File photoPathFile = new File(photoPath);
// references: http://blog.csdn.net/remote_roamer/article/details/2979822
private boolean saveImageToDisk(byte[] data,String imageName) throws IOException{
int len = data.length;
//
// 寫入到文件
FileOutputStream outputStream = new FileOutputStream(new File(photoPathFile,imageName));
outputStream.write(data);
outputStream.flush();
outputStream.close();
//
return true;
}
private byte[] decode(String imageData) throws IOException{
BASE64Decoder decoder = new BASE64Decoder();
byte[] data = decoder.decodeBuffer(imageData);
for(int i=0;i<data.length;++i)
{
if(data[i]<0)
{
//調整異常數(shù)據(jù)
data[i]+=256;
}
}
//
return data;
}
%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<%
//如果是IE,那么需要設置為text/html,否則會彈框下載
//response.setContentType("text/html;charset=UTF-8");
response.setContentType("application/json;charset=UTF-8");
//
String imageName = request.getParameter("imagename");
String imageData = request.getParameter("imagedata");
int success = 0;
String message = "";
if(null == imageData || imageData.length() < 100){
// 數(shù)據(jù)太短,明顯不合理
message = "上傳失敗,數(shù)據(jù)太短或不存在";
} else {
// 去除開頭不合理的數(shù)據(jù)
imageData = imageData.substring(30);
imageData = URLDecoder.decode(imageData,"UTF-8");
//System.out.println(imageData);
byte[] data = decode(imageData);
int len = data.length;
int len2 = imageData.length();
if(null == imageName || imageName.length() < 1){
imageName = System.currentTimeMillis()+".png";
}
saveImageToDisk(data,imageName);
//
success = 1;
message = "上傳成功,參數(shù)長度:"+len2+"字符,解析文件大小:"+len+"字節(jié)";
}
// 后臺打印
System.out.println("message="+message);
%>
{
"message": "<%=message %>",
"success": <%=success %>
}

標簽:陜西 平頂山 山南 南平 黃石 公主嶺 平涼 黃石

巨人網(wǎng)絡通訊聲明:本文標題《通過Canvas及File API縮放并上傳圖片完整示例》,本文關鍵詞  通過,Canvas,及,File,API,縮放,;如發(fā)現(xiàn)本文內容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內容系統(tǒng)采集于網(wǎng)絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《通過Canvas及File API縮放并上傳圖片完整示例》相關的同類信息!
  • 本頁收集關于通過Canvas及File API縮放并上傳圖片完整示例的相關信息資訊供網(wǎng)民參考!
  • 推薦文章
    777奇米四色成人影色区| 国产激情综合五月久久| 日本少妇色视频| 一级黄色性视频| 黄色片子免费看| www.aqdy爱情电影网| 亚洲 小说区 图片区| 精品123区| 日本精品视频在线播放| 好吊色在线视频| 91丨九色丨国产在线| 亚洲综合色站| 精品一区二区三区视频在线播放| 欧美日韩亚洲激情| 精品久久久久久久久久久院品网| 久久精品色欧美aⅴ一区二区| 亚洲精品在线一区二区| 91亚洲人成网污www| 黄色一级片国产| 性色一区二区| 欧美又大又硬又粗bbbbb| 欧美精品123| 国精产品一品二品国精品69xx| 国产精品扒开腿做爽爽爽的视频| 中文字幕日韩精品在线| 久久频这里精品99香蕉| 亚洲AV无码成人精品区东京热| 精品视频免费观看| 欧美精品xx| 欧美激情一区二区三区免费观看| 国产精品久在线观看| 奇米一区二区三区四区久久| 欧美精品欧美精品系列| 欧美在线观看www| 天天色天天草| 国产午夜福利视频在线观看| 日韩美女视频在线观看| 无码少妇精品一区二区免费动态| 亚洲熟女毛茸茸| 555www成人网| 免费国产一区| 欧美一区二区大胆人体摄影专业网站| 综合分类小说区另类春色亚洲小说欧美| 国产96在线亚洲| 在线免费看毛片| 日韩黄色在线播放| 天天摸天天操天天爽| 香蕉视频色在线观看| 成人亚洲性情网站www在线观看| 成人毛片免费在线观看| 日韩系列在线| 中文字幕在线观看视频网站| 无码小电影在线观看网站免费| 国产丝袜在线精品| japanese中文字幕| 亚洲国产成人精品女人久久久| 精品成人一区| 国产精品av久久久久久无| 日韩电影大全免费观看2023年上| 久久毛片亚洲| 久久综合九色综合欧美亚洲| 欧美电影院免费观看| 亚洲三级 欧美三级| 国产乱一区二区| 国产精品国产自产拍高清av| 日韩三级一区二区| 人妻大战黑人白浆狂泄| 在线无限看免费粉色视频| 成人毛片在线播放| 国产精品视频免费播放| 91丨porny丨中文| 天天色天天干天天色| 亚洲一区二区三区不卡国产欧美| 精品国产av无码一区二区三区| 1卡2卡3卡精品视频| 中文字幕第20页| 国产一级二级三级在线观看| 91视频你懂的| 国产91丝袜美女在线播放| 亚洲1区在线| 天天免费亚洲黑人免费| 免费日本黄色网址| 国产不卡精品| 97xxxxx| jizzjizz日本护士免费| 成人在线观看免费播放| 在线综合视频播放| 手机看片福利永久国产日韩| 亚洲肉体裸体xxxx137| 欧美日韩日日摸| 欧美日韩日日骚| 国产欧美一区二区三区国产幕精品| 国产午夜无码视频在线观看| 国产一级18片视频| 91国偷自产中文字幕久久| 77777少妇光屁股久久一区| 国产精品一区牛牛影视| 欧美午夜精品电影| 美女毛片在线观看| 蜜桃视频第一区免费观看| 91成人看片片| 天天色综合久久| 亚洲国产精品无码久久久| 国产亚洲综合久久| 天天做天天摸天天爽天天爱| 永久免费黄色软件| 亚洲图片欧美日韩| 亚洲国产欧美另类| 精品国精品国产自在久国产应用| 欧美大喷水吹潮合集在线观看| 欧美在线观看视频免费| 亚洲第一黄色网| 亚洲男人第一网站| 国产精品美女在线观看| xfplay爱情电影网love| 欧美一区中文字幕| 成人av网站免费| 欧美久久久影院| 99riav国产| 亚洲一区欧美在线| 欧美性猛交 xxxx| 久久精品在线免费视频| 奇米精品一区二区三区在线观看一| yellow中文字幕久久| 欧美日韩综合网| 国产亚洲一区二区三区四区| 国产大尺度视频| 五月婷婷综合激情网| 国产精品毛片一区二区三区四区| 欧美一区二区三区人| 久久久久久久久网| 日韩精品国产一区二区| 91在线精品| 91浏览器在线观看| 色悠久久久久综合网小说| 国产成都精品91一区二区三| 日本少妇高潮喷水xxxxxxx| 国产免费一区二区三区免费视频| 久久精品美女| 欧美亚洲综合视频| 日韩在线视频观看正片免费网站| 久久中文字幕在线| 中文欧美在线视频| 欧美乱大交xxxxx| 亚洲一区二区激情| 情趣网站视频在线观看| 欧美人与牲禽动交com| 久久久久久久久久免费视频| 亚洲夂夂婷婷色拍ww47| 久久久久无码国产精品不卡| 免费一区二区三区在在线视频| 麻豆国产入口在线观看免费| 亚洲春色h网| 精品女同一区二区三区在线观看| 亚洲最大的成人av| 精品无吗乱吗av国产爱色| 中出中文字幕| 久久嫩草精品久久久精品一| 国产成人夜间影院在线观看| 色94色欧美一区| 国产69精品久久久久9| www.国产在线观看| 午夜高潮免费视频| 国产深夜精品福利| 欧美一卡在线观看| 人人人妻人人澡人人爽欧美一区| av在线免费在线观看| 成年在线观看免费人视频| 久久亚洲国产成人亚| 成人激情av| 欧美韩日一区二区| 动漫精品一区一码二码三码四码| 精品少妇人妻一区二区黑料社区| 2021年精品国产福利在线| 97超碰人人看| 丁香五月网久久综合| 影音先锋黄色资源| 99国产成人精品| 日韩精品一区二区三区三区免费| 99在线观看精品视频| 中出嫩模无套| 超碰人人在线| 国产欧美日韩激情| 国产成人自拍偷拍| 99久久免费精品国产免费| 日本最新不卡在线| 久久久久久国产精品免费无遮挡| 视频一区视频二区在线观看| eeuss影院www| 麻豆成人在线播放| 亚洲黄页一区| 国产精品日韩电影| 极品人妻一区二区| 国产一区二区三区免费| 国产伦理在线观看| 国产白浆在线免费观看| 羞羞视频网站在线观看| 亚洲国产欧美一区二区丝袜黑人| 精品国产免费观看| 日本午夜免费一区二区| 夜夜揉揉日日人人青青一国产精品| 超碰在线最新| 国产精品又粗又长| 伊甸园亚洲一区| 欧美一区二区视频在线| 日本在线高清视频一区| 欧美一级片免费播放| 九九色在线观看| 韩国日本美国免费毛片| 亚洲一区 视频| 国产美女福利在线观看| 国产老妇伦国产熟女老妇视频| 亚洲国产第一| 韩国一区二区三区四区| 欧美性xxxxhd| 韩剧1988免费观看全集| 亚洲最大的网站| 久久se精品一区精品二区| 欧美日韩国产高清视频| 水蜜桃久久夜色精品一区| 午夜日韩视频| 一级免费在线观看| 美臀av在线| 日韩久久久久久久久| 色呦呦网站在线观看| 成人有码在线视频| 亚洲欧美日韩另类精品一区二区三区| 久久精品国产亚洲一区二区| 久久这里只有精品首页| 国产日本一区二区| 黄色av免费在线| 91九色精品| 欧美亚洲高清| 激情中文字幕| 成人精品天堂一区二区三区| 中文字幕欧美一| 久久久综合香蕉尹人综合网| 亚洲精品无码一区二区| 国产色99精品9i| 国产精品精品久久久久久| 91超碰碰碰碰久久久久久综合| 久久久久久久久国产一区| 精品国产伦一区二区三区观看体验| 免费观看成人高潮| 免费一级欧美在线大片| 久久综合香蕉| 青青草手机视频在线观看| 美美女免费毛片| 天天操中文字幕视频| 极品裸体白嫩激情啪啪国产精品| 精品久久久999| 国内精品嫩模av私拍在线观看| 日韩精品日韩在线观看| 欧美精品日韩一区| av女名字大全列表| 免费亚洲网站| 四虎永久在线精品无码视频| 97久久人人超碰caoprom| 日韩经典一区二区三区| 波多野结衣一二三区| a天堂中文字幕| 一区二区三区不卡视频在线观看| 成年人小视频在线观看| 精品视频二区| 99精品久久久久久| 无码国产精品一区二区免费16| 国产主播中文字幕| www黄在线观看| 亚洲啊啊啊啊啊| 九九精品视频在线观看| 免费观看成人网| 国产va在线观看| 日韩精品91亚洲二区在线观看| 午夜久久久久久久久久| 蜜臀av性久久久久av蜜臀妖精| 91久久偷偷做嫩草影院电| 亚洲视频1区| 成人午夜国产| 欧美精品第一页在线播放| 极品蜜桃臀肥臀-x88av| 亚洲自拍偷拍九九九| 久久激情视频| 国产无遮挡又黄又爽免费软件| 在线āv视频| 手机在线看片日韩| 在线播放亚洲激情| 亚洲人免费视频| 国产毛片精品| 欧美精品一区二区三区免费播放| 欧美日韩电影在线播放| 羞羞漫画网18久久app| 天干天干啦夜天天天视频| 激情文学亚洲色图| 三级网站在线看| 综合一区在线| 成人xxxxx色| 手机看片日韩av| eeuss国产一区二区三区四区| 加勒比日本影视| 在线播放日韩av| 亚洲 欧美 日韩 综合| 日本亚洲欧美美色| 中国女人内谢69xxxx视频| 九九热视频免费在线观看| 精品国产1区2区3区| 青青草国产免费自拍| av电影中文字幕| 九色一区二区| 成人精品视频在线观看| 国产欧美精品一区二区色综合朱莉| 国产高清一级毛片在线不卡| 欧美日韩日日夜夜| 免费不卡在线视频| 精品国产无码在线观看| 国产精品免费一区| av中文字幕在线看| av高清在线免费观看| 国产三级精品三级在线观看| 国产精品一区无码| 亚洲精华国产精华| 中文字幕乱码无码人妻系列蜜桃| 日本在线播放一区二区| 中文字幕资源站| 亚洲成人日韩| 亚洲精品乱码久久久久久蜜桃麻豆| 欧美日本网站| 亚洲深夜福利网站| 99热99热|