亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Java > 正文

簡單的java圖片處理類(圖片水印 圖片縮放)

2019-11-26 15:54:32
字體:
來源:轉載
供稿:網友

復制代碼 代碼如下:

import java.awt.AlphaComposite;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.color.ColorSpace;
import java.awt.geom.AffineTransform;
import java.awt.image.AffineTransformOp;
import java.awt.image.BufferedImage;
import java.awt.image.ColorConvertOp;
import java.awt.image.CropImageFilter;
import java.awt.image.FilteredImageSource;
import java.awt.image.ImageFilter;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;

/**
 * 圖片處理工具類:<br>
 * 功能:縮放圖像、切割圖像、圖像類型轉換、彩色轉黑白、文字水印、圖片水印等
 * @author Administrator
 */
public class ImageUtils {

    /**
     * 幾種常見的圖片格式
     */
    public static String IMAGE_TYPE_GIF = "gif";// 圖形交換格式
    public static String IMAGE_TYPE_JPG = "jpg";// 聯合照片專家組
    public static String IMAGE_TYPE_JPEG = "jpeg";// 聯合照片專家組
    public static String IMAGE_TYPE_BMP = "bmp";// 英文Bitmap(位圖)的簡寫,它是Windows操作系統中的標準圖像文件格式
    public static String IMAGE_TYPE_PNG = "png";// 可移植網絡圖形
    public static String IMAGE_TYPE_PSD = "psd";// Photoshop的專用格式Photoshop

    /**
     * 程序入口:用于測試
     * @param args
     */
    public static void main(String[] args) {
        // 1-縮放圖像:
        // 方法一:按比例縮放
        ImageUtils.scale("e:/abc.jpg", "e:/abc_scale.jpg", 2, true);//測試OK
        // 方法二:按高度和寬度縮放
        ImageUtils.scale2("e:/abc.jpg", "e:/abc_scale2.jpg", 500, 300, true);//測試OK

        // 2-切割圖像:
        // 方法一:按指定起點坐標和寬高切割
        ImageUtils.cut("e:/abc.jpg", "e:/abc_cut.jpg", 0, 0, 400, 400 );//測試OK
        // 方法二:指定切片的行數和列數
        ImageUtils.cut2("e:/abc.jpg", "e:/", 2, 2 );//測試OK
        // 方法三:指定切片的寬度和高度
        ImageUtils.cut3("e:/abc.jpg", "e:/", 300, 300 );//測試OK

        // 3-圖像類型轉換:
        ImageUtils.convert("e:/abc.jpg", "GIF", "e:/abc_convert.gif");//測試OK

        // 4-彩色轉黑白:
        ImageUtils.gray("e:/abc.jpg", "e:/abc_gray.jpg");//測試OK

        // 5-給圖片添加文字水印:
        // 方法一:
        ImageUtils.pressText("我是水印文字","e:/abc.jpg","e:/abc_pressText.jpg","宋體",Font.BOLD,Color.white,80, 0, 0, 0.5f);//測試OK
        // 方法二:
        ImageUtils.pressText2("我也是水印文字", "e:/abc.jpg","e:/abc_pressText2.jpg", "黑體", 36, Color.white, 80, 0, 0, 0.5f);//測試OK

        // 6-給圖片添加圖片水?。?BR>        ImageUtils.pressImage("e:/abc2.jpg", "e:/abc.jpg","e:/abc_pressImage.jpg", 0, 0, 0.5f);//測試OK
    }

    /**
     * 縮放圖像(按比例縮放)
     * @param srcImageFile 源圖像文件地址
     * @param result 縮放后的圖像地址
     * @param scale 縮放比例
     * @param flag 縮放選擇:true 放大; false 縮小;
     */
    public final static void scale(String srcImageFile, String result,
            int scale, boolean flag) {
        try {
            BufferedImage src = ImageIO.read(new File(srcImageFile)); // 讀入文件
            int width = src.getWidth(); // 得到源圖寬
            int height = src.getHeight(); // 得到源圖長
            if (flag) {// 放大
                width = width * scale;
                height = height * scale;
            } else {// 縮小
                width = width / scale;
                height = height / scale;
            }
            Image image = src.getScaledInstance(width, height,
                    Image.SCALE_DEFAULT);
            BufferedImage tag = new BufferedImage(width, height,
                    BufferedImage.TYPE_INT_RGB);
            Graphics g = tag.getGraphics();
            g.drawImage(image, 0, 0, null); // 繪制縮小后的圖
            g.dispose();
            ImageIO.write(tag, "JPEG", new File(result));// 輸出到文件流
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 縮放圖像(按高度和寬度縮放)
     * @param srcImageFile 源圖像文件地址
     * @param result 縮放后的圖像地址
     * @param height 縮放后的高度
     * @param width 縮放后的寬度
     * @param bb 比例不對時是否需要補白:true為補白; false為不補白;
     */
    public final static void scale2(String srcImageFile, String result, int height, int width, boolean bb) {
        try {
            double ratio = 0.0; // 縮放比例
            File f = new File(srcImageFile);
            BufferedImage bi = ImageIO.read(f);
            Image itemp = bi.getScaledInstance(width, height, bi.SCALE_SMOOTH);
            // 計算比例
            if ((bi.getHeight() > height) || (bi.getWidth() > width)) {
                if (bi.getHeight() > bi.getWidth()) {
                    ratio = (new Integer(height)).doubleValue()
                            / bi.getHeight();
                } else {
                    ratio = (new Integer(width)).doubleValue() / bi.getWidth();
                }
                AffineTransformOp op = new AffineTransformOp(AffineTransform
                        .getScaleInstance(ratio, ratio), null);
                itemp = op.filter(bi, null);
            }
            if (bb) {//補白
                BufferedImage image = new BufferedImage(width, height,
                        BufferedImage.TYPE_INT_RGB);
                Graphics2D g = image.createGraphics();
                g.setColor(Color.white);
                g.fillRect(0, 0, width, height);
                if (width == itemp.getWidth(null))
                    g.drawImage(itemp, 0, (height - itemp.getHeight(null)) / 2,
                            itemp.getWidth(null), itemp.getHeight(null),
                            Color.white, null);
                else
                    g.drawImage(itemp, (width - itemp.getWidth(null)) / 2, 0,
                            itemp.getWidth(null), itemp.getHeight(null),
                            Color.white, null);
                g.dispose();
                itemp = image;
            }
            ImageIO.write((BufferedImage) itemp, "JPEG", new File(result));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 圖像切割(按指定起點坐標和寬高切割)
     * @param srcImageFile 源圖像地址
     * @param result 切片后的圖像地址
     * @param x 目標切片起點坐標X
     * @param y 目標切片起點坐標Y
     * @param width 目標切片寬度
     * @param height 目標切片高度
     */
    public final static void cut(String srcImageFile, String result,
            int x, int y, int width, int height) {
        try {
            // 讀取源圖像
            BufferedImage bi = ImageIO.read(new File(srcImageFile));
            int srcWidth = bi.getHeight(); // 源圖寬度
            int srcHeight = bi.getWidth(); // 源圖高度
            if (srcWidth > 0 && srcHeight > 0) {
                Image image = bi.getScaledInstance(srcWidth, srcHeight,
                        Image.SCALE_DEFAULT);
                // 四個參數分別為圖像起點坐標和寬高
                // 即: CropImageFilter(int x,int y,int width,int height)
                ImageFilter cropFilter = new CropImageFilter(x, y, width, height);
                Image img = Toolkit.getDefaultToolkit().createImage(
                        new FilteredImageSource(image.getSource(),
                                cropFilter));
                BufferedImage tag = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
                Graphics g = tag.getGraphics();
                g.drawImage(img, 0, 0, width, height, null); // 繪制切割后的圖
                g.dispose();
                // 輸出為文件
                ImageIO.write(tag, "JPEG", new File(result));
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 圖像切割(指定切片的行數和列數)
     * @param srcImageFile 源圖像地址
     * @param descDir 切片目標文件夾
     * @param rows 目標切片行數。默認2,必須是范圍 [1, 20] 之內
     * @param cols 目標切片列數。默認2,必須是范圍 [1, 20] 之內
     */
    public final static void cut2(String srcImageFile, String descDir,
            int rows, int cols) {
        try {
            if(rows<=0||rows>20) rows = 2; // 切片行數
            if(cols<=0||cols>20) cols = 2; // 切片列數
            // 讀取源圖像
            BufferedImage bi = ImageIO.read(new File(srcImageFile));
            int srcWidth = bi.getHeight(); // 源圖寬度
            int srcHeight = bi.getWidth(); // 源圖高度
            if (srcWidth > 0 && srcHeight > 0) {
                Image img;
                ImageFilter cropFilter;
                Image image = bi.getScaledInstance(srcWidth, srcHeight, Image.SCALE_DEFAULT);
                int destWidth = srcWidth; // 每張切片的寬度
                int destHeight = srcHeight; // 每張切片的高度
                // 計算切片的寬度和高度
                if (srcWidth % cols == 0) {
                    destWidth = srcWidth / cols;
                } else {
                    destWidth = (int) Math.floor(srcWidth / cols) + 1;
                }
                if (srcHeight % rows == 0) {
                    destHeight = srcHeight / rows;
                } else {
                    destHeight = (int) Math.floor(srcWidth / rows) + 1;
                }
                // 循環建立切片
                // 改進的想法:是否可用多線程加快切割速度
                for (int i = 0; i < rows; i++) {
                    for (int j = 0; j < cols; j++) {
                        // 四個參數分別為圖像起點坐標和寬高
                        // 即: CropImageFilter(int x,int y,int width,int height)
                        cropFilter = new CropImageFilter(j * destWidth, i * destHeight,
                                destWidth, destHeight);
                        img = Toolkit.getDefaultToolkit().createImage(
                                new FilteredImageSource(image.getSource(),
                                        cropFilter));
                        BufferedImage tag = new BufferedImage(destWidth,
                                destHeight, BufferedImage.TYPE_INT_RGB);
                        Graphics g = tag.getGraphics();
                        g.drawImage(img, 0, 0, null); // 繪制縮小后的圖
                        g.dispose();
                        // 輸出為文件
                        ImageIO.write(tag, "JPEG", new File(descDir
                                + "_r" + i + "_c" + j + ".jpg"));
                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 圖像切割(指定切片的寬度和高度)
     * @param srcImageFile 源圖像地址
     * @param descDir 切片目標文件夾
     * @param destWidth 目標切片寬度。默認200
     * @param destHeight 目標切片高度。默認150
     */
    public final static void cut3(String srcImageFile, String descDir,
            int destWidth, int destHeight) {
        try {
            if(destWidth<=0) destWidth = 200; // 切片寬度
            if(destHeight<=0) destHeight = 150; // 切片高度
            // 讀取源圖像
            BufferedImage bi = ImageIO.read(new File(srcImageFile));
            int srcWidth = bi.getHeight(); // 源圖寬度
            int srcHeight = bi.getWidth(); // 源圖高度
            if (srcWidth > destWidth && srcHeight > destHeight) {
                Image img;
                ImageFilter cropFilter;
                Image image = bi.getScaledInstance(srcWidth, srcHeight, Image.SCALE_DEFAULT);
                int cols = 0; // 切片橫向數量
                int rows = 0; // 切片縱向數量
                // 計算切片的橫向和縱向數量
                if (srcWidth % destWidth == 0) {
                    cols = srcWidth / destWidth;
                } else {
                    cols = (int) Math.floor(srcWidth / destWidth) + 1;
                }
                if (srcHeight % destHeight == 0) {
                    rows = srcHeight / destHeight;
                } else {
                    rows = (int) Math.floor(srcHeight / destHeight) + 1;
                }
                // 循環建立切片
                // 改進的想法:是否可用多線程加快切割速度
                for (int i = 0; i < rows; i++) {
                    for (int j = 0; j < cols; j++) {
                        // 四個參數分別為圖像起點坐標和寬高
                        // 即: CropImageFilter(int x,int y,int width,int height)
                        cropFilter = new CropImageFilter(j * destWidth, i * destHeight,
                                destWidth, destHeight);
                        img = Toolkit.getDefaultToolkit().createImage(
                                new FilteredImageSource(image.getSource(),
                                        cropFilter));
                        BufferedImage tag = new BufferedImage(destWidth,
                                destHeight, BufferedImage.TYPE_INT_RGB);
                        Graphics g = tag.getGraphics();
                        g.drawImage(img, 0, 0, null); // 繪制縮小后的圖
                        g.dispose();
                        // 輸出為文件
                        ImageIO.write(tag, "JPEG", new File(descDir
                                + "_r" + i + "_c" + j + ".jpg"));
                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 圖像類型轉換:GIF->JPG、GIF->PNG、PNG->JPG、PNG->GIF(X)、BMP->PNG
     * @param srcImageFile 源圖像地址
     * @param formatName 包含格式非正式名稱的 String:如JPG、JPEG、GIF等
     * @param destImageFile 目標圖像地址
     */
    public final static void convert(String srcImageFile, String formatName, String destImageFile) {
        try {
            File f = new File(srcImageFile);
            f.canRead();
            f.canWrite();
            BufferedImage src = ImageIO.read(f);
            ImageIO.write(src, formatName, new File(destImageFile));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 彩色轉為黑白
     * @param srcImageFile 源圖像地址
     * @param destImageFile 目標圖像地址
     */
    public final static void gray(String srcImageFile, String destImageFile) {
        try {
            BufferedImage src = ImageIO.read(new File(srcImageFile));
            ColorSpace cs = ColorSpace.getInstance(ColorSpace.CS_GRAY);
            ColorConvertOp op = new ColorConvertOp(cs, null);
            src = op.filter(src, null);
            ImageIO.write(src, "JPEG", new File(destImageFile));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 給圖片添加文字水印
     * @param pressText 水印文字
     * @param srcImageFile 源圖像地址
     * @param destImageFile 目標圖像地址
     * @param fontName 水印的字體名稱
     * @param fontStyle 水印的字體樣式
     * @param color 水印的字體顏色
     * @param fontSize 水印的字體大小
     * @param x 修正值
     * @param y 修正值
     * @param alpha 透明度:alpha 必須是范圍 [0.0, 1.0] 之內(包含邊界值)的一個浮點數字
     */
    public final static void pressText(String pressText,
            String srcImageFile, String destImageFile, String fontName,
            int fontStyle, Color color, int fontSize,int x,
            int y, float alpha) {
        try {
            File img = new File(srcImageFile);
            Image src = ImageIO.read(img);
            int width = src.getWidth(null);
            int height = src.getHeight(null);
            BufferedImage image = new BufferedImage(width, height,
                    BufferedImage.TYPE_INT_RGB);
            Graphics2D g = image.createGraphics();
            g.drawImage(src, 0, 0, width, height, null);
            g.setColor(color);
            g.setFont(new Font(fontName, fontStyle, fontSize));
            g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP,
                    alpha));
            // 在指定坐標繪制水印文字
            g.drawString(pressText, (width - (getLength(pressText) * fontSize))
                    / 2 + x, (height - fontSize) / 2 + y);
            g.dispose();
            ImageIO.write((BufferedImage) image, "JPEG", new File(destImageFile));// 輸出到文件流
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 給圖片添加文字水印
     * @param pressText 水印文字
     * @param srcImageFile 源圖像地址
     * @param destImageFile 目標圖像地址
     * @param fontName 字體名稱
     * @param fontStyle 字體樣式
     * @param color 字體顏色
     * @param fontSize 字體大小
     * @param x 修正值
     * @param y 修正值
     * @param alpha 透明度:alpha 必須是范圍 [0.0, 1.0] 之內(包含邊界值)的一個浮點數字
     */
    public final static void pressText2(String pressText, String srcImageFile,String destImageFile,
            String fontName, int fontStyle, Color color, int fontSize, int x,
            int y, float alpha) {
        try {
            File img = new File(srcImageFile);
            Image src = ImageIO.read(img);
            int width = src.getWidth(null);
            int height = src.getHeight(null);
            BufferedImage image = new BufferedImage(width, height,
                    BufferedImage.TYPE_INT_RGB);
            Graphics2D g = image.createGraphics();
            g.drawImage(src, 0, 0, width, height, null);
            g.setColor(color);
            g.setFont(new Font(fontName, fontStyle, fontSize));
            g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP,
                    alpha));
            // 在指定坐標繪制水印文字
            g.drawString(pressText, (width - (getLength(pressText) * fontSize))
                    / 2 + x, (height - fontSize) / 2 + y);
            g.dispose();
            ImageIO.write((BufferedImage) image, "JPEG", new File(destImageFile));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 給圖片添加圖片水印
     * @param pressImg 水印圖片
     * @param srcImageFile 源圖像地址
     * @param destImageFile 目標圖像地址
     * @param x 修正值。 默認在中間
     * @param y 修正值。 默認在中間
     * @param alpha 透明度:alpha 必須是范圍 [0.0, 1.0] 之內(包含邊界值)的一個浮點數字
     */
    public final static void pressImage(String pressImg, String srcImageFile,String destImageFile,
            int x, int y, float alpha) {
        try {
            File img = new File(srcImageFile);
            Image src = ImageIO.read(img);
            int wideth = src.getWidth(null);
            int height = src.getHeight(null);
            BufferedImage image = new BufferedImage(wideth, height,
                    BufferedImage.TYPE_INT_RGB);
            Graphics2D g = image.createGraphics();
            g.drawImage(src, 0, 0, wideth, height, null);
            // 水印文件
            Image src_biao = ImageIO.read(new File(pressImg));
            int wideth_biao = src_biao.getWidth(null);
            int height_biao = src_biao.getHeight(null);
            g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP,
                    alpha));
            g.drawImage(src_biao, (wideth - wideth_biao) / 2,
                    (height - height_biao) / 2, wideth_biao, height_biao, null);
            // 水印文件結束
            g.dispose();
            ImageIO.write((BufferedImage) image,  "JPEG", new File(destImageFile));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 計算text的長度(一個中文算兩個字符)
     * @param text
     * @return
     */
    public final static int getLength(String text) {
        int length = 0;
        for (int i = 0; i < text.length(); i++) {
            if (new String(text.charAt(i) + "").getBytes().length > 1) {
                length += 2;
            } else {
                length += 1;
            }
        }
        return length / 2;
    }
}
 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩精品中文字幕视频在线| 欧美激情精品久久久久久久变态| 亚洲自拍偷拍色片视频| 4438全国成人免费| 国产成人综合精品在线| 狠狠做深爱婷婷久久综合一区| 国产午夜精品免费一区二区三区| 91豆花精品一区| 欧美极品少妇xxxxⅹ裸体艺术| 精品无码久久久久久国产| 日日骚av一区| 欧美日韩人人澡狠狠躁视频| 国产精品第一区| 这里精品视频免费| 国产精品色午夜在线观看| 久久视频在线免费观看| 亚洲电影成人av99爱色| 国精产品一区一区三区有限在线| 久久久久日韩精品久久久男男| 国产精品jvid在线观看蜜臀| 亚洲国产精彩中文乱码av在线播放| 久久中文字幕国产| 国产成人精品综合久久久| 国产成人精品最新| 欧美日韩激情视频| 中文字幕日韩欧美在线| 欧美俄罗斯性视频| 久久久精品国产亚洲| 久久久久久久久久久免费| 国产欧美在线观看| 国产成人免费91av在线| 亚洲第一二三四五区| 日韩美女免费视频| 亚洲白拍色综合图区| 亚洲综合中文字幕在线| 视频在线观看一区二区| 国产色婷婷国产综合在线理论片a| 一区三区二区视频| 日韩精品视频中文在线观看| 久久夜精品va视频免费观看| 日本电影亚洲天堂| 欧美日韩亚洲精品内裤| 久久久这里只有精品视频| 欧美另类极品videosbest最新版本| 91在线观看免费高清完整版在线观看| 青青草原一区二区| 国产视频福利一区| 亚洲免费中文字幕| 亚洲精品一区av在线播放| 韩国三级日本三级少妇99| 亚洲欧洲一区二区三区在线观看| 日韩一中文字幕| 国产精品成人国产乱一区| 欧美一级高清免费播放| 国产精品91在线观看| 精品综合久久久久久97| 91免费福利视频| 亚洲无亚洲人成网站77777| 欧美日本在线视频中文字字幕| 国产中文字幕91| 国产精品久久久久久久久免费| 免费av一区二区| 久久99久久99精品免观看粉嫩| 欧美日韩另类在线| 欧美极品少妇全裸体| 国产视频久久久久久久| 91免费人成网站在线观看18| 国产99久久精品一区二区永久免费| 久久久久久久国产精品视频| 欧美视频在线观看免费| 欧美黄色片免费观看| 97碰碰碰免费色视频| 日韩精品亚洲精品| 亚洲国产成人av在线| 国产精品99蜜臀久久不卡二区| 亚洲精品v欧美精品v日韩精品| 欧美色另类天堂2015| 亚洲国产日韩一区| 色一情一乱一区二区| 欧美特黄级在线| 亚洲精品福利免费在线观看| 日韩av在线影视| 亚洲成人网av| 精品爽片免费看久久| 日韩视频在线观看免费| 97婷婷大伊香蕉精品视频| 日韩在线观看视频免费| 97视频免费看| 黑人与娇小精品av专区| 国产精品欧美激情| 日韩激情视频在线播放| 欧美黑人xxxⅹ高潮交| 日韩av在线免费观看| 精品视频—区二区三区免费| 欧美日韩亚洲国产一区| 精品国产91久久久| 久久精品国产91精品亚洲| 亚洲最新中文字幕| 亚洲japanese制服美女| 欧美极品美女视频网站在线观看免费| 久久五月天综合| 69国产精品成人在线播放| 欧美国产视频日韩| 激情成人在线视频| 91欧美视频网站| 亚洲最大的网站| 91大神在线播放精品| 2024亚洲男人天堂| 中文字幕亚洲激情| 永久免费精品影视网站| 欧美黑人性生活视频| 亚洲精品成人网| xvideos国产精品| 国产精品精品一区二区三区午夜版| 亚洲国产精品人人爽夜夜爽| 日韩av网站在线| 欧美又大粗又爽又黄大片视频| 91最新国产视频| 日韩av在线导航| 久精品免费视频| 欧美极度另类性三渗透| 欧美视频在线视频| 欧美精品电影在线| 亚洲欧美日韩成人| 欧美体内谢she精2性欧美| 国产欧美在线观看| 国产成人中文字幕| 91精品国产色综合久久不卡98| 日韩欧美亚洲综合| 日韩av在线不卡| 91国偷自产一区二区三区的观看方式| 91久久精品美女| 青青草99啪国产免费| 91九色国产视频| 欧美成aaa人片在线观看蜜臀| 亚洲第一精品夜夜躁人人躁| 精品日本高清在线播放| 色悠悠国产精品| 日韩av在线最新| 91av在线网站| 亚洲精品一区二三区不卡| 国产精品日韩在线播放| 欧美超级乱淫片喷水| 黑人巨大精品欧美一区二区三区| 亚洲国产精品va在看黑人| 美女久久久久久久久久久| 日韩av网站在线| 日韩成人在线视频| 欧美激情xxxxx| 成人在线激情视频| 日韩中文字幕在线视频| 亚洲美女视频网| 亚洲欧美日韩在线一区| 国产精品综合不卡av| 国产成人高清激情视频在线观看| 欧洲精品在线视频| 国产精品扒开腿做爽爽爽的视频| 欧美激情视频在线免费观看 欧美视频免费一| 欧美成人三级视频网站| 国产精品揄拍500视频| 日韩福利视频在线观看| 久久手机精品视频| 国产美女精品视频免费观看| 81精品国产乱码久久久久久|