中文字幕理论片,69视频免费在线观看,亚洲成人app,国产1级毛片,刘涛最大尺度戏视频,欧美亚洲美女视频,2021韩国美女仙女屋vip视频

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
java給圖片添加圖片水印,文字水印,馬賽克
package com.rzxt.fyx.common.util;


import java.awt.AlphaComposite;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.RenderingHints;
import java.awt.image.BufferedImage;
import java.io.File;


import javax.imageio.ImageIO;
import javax.swing.ImageIcon;


/**
 * 給圖片添加水印
 * @author tgy
 *
 */
public class MarkImageUtils {


    /**  
     * @param args  
     */  
    public static void main(String[] args) {
    String output = "F:/images/";
        String source = "F:/images/6.jpg";    //源圖片路徑
        String icon = "F:/images/icon2.png";  //覆蓋圖片路徑
        String imageName = "mark_image";  //圖片名稱
        String imageType = "jpg";  //圖片類型jpg,jpeg,png,gif
        String text = "加水印了";
        int size = 4;   //馬賽克大小
        Integer degree = null; //水印旋轉角度-45,null表示不旋轉
        String result = null;
        //給圖片添加圖片水印   
        result = MarkImageUtils.markImageByMoreIcon(icon,source,output,imageName,imageType,degree);   
//        result = MarkImageUtils.markImageBySingleIcon(icon, source, output, imageName, imageType, degree);
//        //給圖片添加文字水印
//        result = MarkImageUtils.markImageByMoreText(source,output,imageName,imageType,Color.red,text,degree);
//        result = MarkImageUtils.markImageBySingleText(source,output,imageName,imageType,Color.red,text,degree);
//        //給圖片打馬賽克
//        result = MarkImageUtils.markImageByMosaic(source,output,imageName,imageType,size);
        System.out.println(result);
    } 
    
/**  
     * 給圖片不同位置添加多個圖片水印、可設置水印圖片旋轉角度  
     * @param icon 水印圖片路徑(如:F:/images/icon.png)
     * @param source 沒有加水印的圖片路徑(如:F:/images/6.jpg)
     * @param output 加水印后的圖片路徑(如:F:/images/)
     * @param imageName 圖片名稱(如:11111)
     * @param imageType 圖片類型(如:jpg)
     * @param degree 水印圖片旋轉角度,為null表示不旋轉
     */  
    public static String markImageByMoreIcon(String icon,String source,String output,String imageName,String imageType,Integer degree) {   
        String result = "添加圖片水印出錯";  
        try {   
        File file = new File(source);
        File ficon = new File(icon);
        if (!file.isFile()) {
           return source + " 不是一個圖片文件!";
       }
            //將icon加載到內存中
            Image ic = ImageIO.read(ficon);
            //icon高度
            int icheight = ic.getHeight(null);
            
            //將源圖片讀到內存中
            Image img = ImageIO.read(file);
            //圖片寬
            int width = img.getWidth(null); 
            //圖片高
            int height = img.getHeight(null);
            BufferedImage bi = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
            //創(chuàng)建一個指定 BufferedImage 的 Graphics2D 對象
            Graphics2D g = bi.createGraphics();
            //x,y軸默認是從0坐標開始
            int x = 0;
            int y = 0;
            //默認兩張水印圖片的間隔高度是水印圖片的1/3
            int temp = icheight/3;
            int space = 1;
            if(height>=icheight){
            space = height/icheight;
            if(space>=2){            
            temp = y = icheight/2;
            if(space==1||space==0){
            x = 0;
            y = 0;
            }
            }
            }else{
            x = 0;
            y = 0;
            }
            //設置對線段的鋸齒狀邊緣處理   
            g.setRenderingHint(RenderingHints.KEY_INTERPOLATION,RenderingHints.VALUE_INTERPOLATION_BILINEAR);
            //呈現(xiàn)一個圖像,在繪制前進行從圖像空間到用戶空間的轉換
            g.drawImage(img.getScaledInstance(width,height,Image.SCALE_SMOOTH),0,0,null);   
            for(int i=0;i<space;i++){
           if (null != degree) {   
               //設置水印旋轉   
               g.rotate(Math.toRadians(degree),(double) bi.getWidth() / 2, (double) bi.getHeight() / 2);   
           }   
           //水印圖象的路徑 水印一般為gif或者png的,這樣可設置透明度   
           ImageIcon imgIcon = new ImageIcon(icon);   
 
           //得到Image對象。   
           Image con = imgIcon.getImage();   
           //透明度,最小值為0,最大值為1
           float clarity = 0.6f;    
           g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP,clarity));
 
           //表示水印圖片的坐標位置(x,y) 
           //g.drawImage(con, 300, 220, null);
           g.drawImage(con, x, y, null);
           g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER)); 
           y+=(icheight+temp);
            }
            g.dispose();
            File sf = new File(output, imageName+"."+imageType);
       ImageIO.write(bi, imageType, sf); // 保存圖片
            result = "圖片完成添加Icon水印";   
        } catch (Exception e) {   
            e.printStackTrace();  
        }  
        return result;
    }  
    
/**  
     * 給圖片添加單個圖片水印、可設置水印圖片旋轉角度  
     * @param icon 水印圖片路徑(如:F:/images/icon.png)
     * @param source 沒有加水印的圖片路徑(如:F:/images/6.jpg)
     * @param output 加水印后的圖片路徑(如:F:/images/)
     * @param imageName 圖片名稱(如:11111)
     * @param imageType 圖片類型(如:jpg)
     * @param degree 水印圖片旋轉角度,為null表示不旋轉
     */  
    public static String markImageBySingleIcon(String icon,String source,String output,String imageName,String imageType,Integer degree) {   
        String result = "添加圖片水印出錯";  
        try {   
        File file = new File(source);
        File ficon = new File(icon);
        if (!file.isFile()) {
           return source + " 不是一個圖片文件!";
       }
            //將icon加載到內存中
            Image ic = ImageIO.read(ficon);
            //icon高度
            int icheight = ic.getHeight(null);
            
            //將源圖片讀到內存中
            Image img = ImageIO.read(file);
            //圖片寬
            int width = img.getWidth(null); 
            //圖片高
            int height = img.getHeight(null);
            BufferedImage bi = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
            //創(chuàng)建一個指定 BufferedImage 的 Graphics2D 對象
            Graphics2D g = bi.createGraphics();
            //x,y軸默認是從0坐標開始
            int x = 0;
            int y = (height/2)-(icheight/2);
            //設置對線段的鋸齒狀邊緣處理   
            g.setRenderingHint(RenderingHints.KEY_INTERPOLATION,RenderingHints.VALUE_INTERPOLATION_BILINEAR);
            //呈現(xiàn)一個圖像,在繪制前進行從圖像空間到用戶空間的轉換
            g.drawImage(img.getScaledInstance(width,height,Image.SCALE_SMOOTH),0,0,null);   
            if (null != degree) {   
                //設置水印旋轉   
                g.rotate(Math.toRadians(degree),(double) bi.getWidth() / 2, (double) bi.getHeight() / 2);   
            }   
            //水印圖象的路徑 水印一般為gif或者png的,這樣可設置透明度   
            ImageIcon imgIcon = new ImageIcon(icon);   
  
            //得到Image對象。   
            Image con = imgIcon.getImage();   
            //透明度,最小值為0,最大值為1
            float clarity = 0.6f;    
            g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP,clarity));
 
            //表示水印圖片的坐標位置(x,y) 
            //g.drawImage(con, 300, 220, null);
            g.drawImage(con, x, y, null);
            g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER)); 
            g.dispose();
            File sf = new File(output, imageName+"."+imageType);
       ImageIO.write(bi, imageType, sf); // 保存圖片
            result = "圖片完成添加Icon水印";   
        } catch (Exception e) {   
            e.printStackTrace();  
        }  
        return result;
    } 
    
    /** 
     * 給圖片添加多個文字水印、可設置水印文字旋轉角度 
     * @param source 需要添加水印的圖片路徑(如:F:/images/6.jpg)
     * @param outPut 添加水印后圖片輸出路徑(如:F:/images/)
     * @param imageName 圖片名稱(如:11111)
     * @param imageType 圖片類型(如:jpg)
     * @param color 水印文字的顏色 
     * @param word 水印文字 
     * @param degree 水印文字旋轉角度,為null表示不旋轉
     */  
    public static String markImageByMoreText(String source,String output,String imageName,String imageType,Color color,String word,Integer degree) {  
        String result = "添加文字水印出錯";
    try {  
            //讀取原圖片信息  
            File file = new File(source); 
            if (!file.isFile()) {
           return file + " 不是一個圖片文件!";
       }
            Image img = ImageIO.read(file);
            //圖片寬
            int width = img.getWidth(null); 
            //圖片高
            int height = img.getHeight(null); 
            //文字大小
            int size = 50;
            //加水印  
            BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);  
            Graphics2D g = bi.createGraphics();  
            g.drawImage(img, 0, 0, width, height, null);  
            //設置水印字體樣式  
            Font font = new Font("宋體", Font.PLAIN, size);
            //根據(jù)圖片的背景設置水印顏色  
            g.setColor(color);
            int x = width/3;
            int y = size;
            int space = height/size;
            for(int i=0;i<space;i++){
            //如果最后一個坐標的y軸比height高,直接退出
            if((y+size)>height){
            break;
            }
           if (null != degree) {   
               //設置水印旋轉   
               g.rotate(Math.toRadians(degree),(double) bi.getWidth() / 2, (double) bi.getHeight() / 2);   
           }
           g.setFont(font);
           //水印位置
           g.drawString(word, x, y);  
           y+=(2*size);
            }
            g.dispose();  
            //輸出圖片  
            File sf = new File(output, imageName+"."+imageType);
       ImageIO.write(bi, imageType, sf); // 保存圖片
            result = "圖片完成添加Word水印";
        } catch (Exception e) {  
            e.printStackTrace();  
        }
    return result;
    }
    
    /** 
     * 給圖片添加單個文字水印、可設置水印文字旋轉角度 
     * @param source 需要添加水印的圖片路徑(如:F:/images/6.jpg)
     * @param outPut 添加水印后圖片輸出路徑(如:F:/images/)
     * @param imageName 圖片名稱(如:11111)
     * @param imageType 圖片類型(如:jpg)
     * @param color 水印文字的顏色 
     * @param word 水印文字 
     * @param degree 水印文字旋轉角度,為null表示不旋轉
     */  
    public static String markImageBySingleText(String source,String output,String imageName,String imageType,Color color,String word,Integer degree) {  
        String result = "添加文字水印出錯";
    try {  
            //讀取原圖片信息  
            File file = new File(source); 
            if (!file.isFile()) {
           return file + " 不是一個圖片文件!";
       }
            Image img = ImageIO.read(file);  
            int width = img.getWidth(null);  
            int height = img.getHeight(null);  
            //加水印  
            BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);  
            Graphics2D g = bi.createGraphics();  
            g.drawImage(img, 0, 0, width, height, null);  
            //設置水印字體樣式  
            Font font = new Font("宋體", Font.PLAIN, 50);
            //根據(jù)圖片的背景設置水印顏色  
            g.setColor(color);
            if (null != degree) {   
                //設置水印旋轉   
                g.rotate(Math.toRadians(degree),(double) bi.getWidth() / 2, (double) bi.getHeight() / 2);   
            }
            g.setFont(font);
            int x = width/3;
            int y = height/2;
            //水印位置
            g.drawString(word, x, y);  
            g.dispose();  
            //輸出圖片  
            File sf = new File(output, imageName+"."+imageType);
       ImageIO.write(bi, imageType, sf); // 保存圖片
            result = "圖片完成添加Word水印";
        } catch (Exception e) {  
            e.printStackTrace();  
        }
    return result;
    }
    
    /**
     * 給圖片加馬賽克
     * @param source 原圖片路徑(如:F:/images/6.jpg)
     * @param output 打馬賽克后,圖片保存的路徑(如:F:/images/)
     * @param imageName 圖片名稱(如:11111)
     * @param imageType 圖片類型(如:jpg)
     * @param size 馬賽克尺寸,即每個矩形的寬高
     * @return
     */
    public static String markImageByMosaic(String source,String output,String imageName,String imageType,int size){
    String result = "圖片打馬賽克出錯";
    try{
       File file = new File(source);
       if (!file.isFile()) {
           return file + " 不是一個圖片文件!";
       }
       BufferedImage img = ImageIO.read(file); // 讀取該圖片
       int width = img.getWidth(null);  //原圖片寬
            int height = img.getHeight(null); //原圖片高
       BufferedImage bi = new BufferedImage(width,height, BufferedImage.TYPE_INT_RGB);
       //馬賽克格尺寸太大或太小
       if (width < size || height < size) { 
           return "馬賽克格尺寸太大";
       }
       if(size<=0){
        return "馬賽克格尺寸太小";
       }
       int xcount = 0; //x方向繪制個數(shù)
       int ycount = 0; //y方向繪制個數(shù)
       if (width % size == 0) {
           xcount = width / size;
       } else {
           xcount = width / size + 1;
       }
       if (height % size == 0) {
           ycount = height / size;
       } else {
           ycount = height / size + 1;
       }
       int x = 0;  //x坐標
       int y = 0;//y坐標
       //繪制馬賽克(繪制矩形并填充顏色)
       Graphics2D g = bi.createGraphics();
       for (int i = 0; i < xcount; i++) {
           for (int j = 0; j < ycount; j++) {
               //馬賽克矩形格大小
                int mwidth = size;
                int mheight = size;
                if(i==xcount-1){   //橫向最后一個不夠一個size
                    mwidth = width-x;
                }
                if(j == ycount-1){  //縱向最后一個不夠一個size
                    mheight = height-y;
                }
               //矩形顏色取中心像素點RGB值
               int centerX = x;
               int centerY = y;
               if (mwidth % 2 == 0) {
                   centerX += mwidth / 2;
               } else {
                   centerX += (mwidth - 1) / 2;
               }
               if (mheight % 2 == 0) {
                   centerY += mheight / 2;
               } else {
                   centerY += (mheight - 1) / 2;
               }
               Color color = new Color(img.getRGB(centerX, centerY));
               g.setColor(color);
               g.fillRect(x, y, mwidth, mheight);
               y = y + size;// 計算下一個矩形的y坐標
           }
           y = 0;// 還原y坐標
           x = x + size;// 計算x坐標
       }
       g.dispose();
       File sf = new File(output, imageName+"."+imageType);
       ImageIO.write(bi, imageType, sf); // 保存圖片
       result = "打馬賽克成功";
    }catch(Exception e){
    e.printStackTrace();
    }
        return result;
    }
}
本站僅提供存儲服務,所有內容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權內容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
asp.net上傳圖片公共類
java指紋識別+谷歌圖片識別技術=======源碼實現(xiàn)===分享出來===
怎樣去掉 CSDN-Markdown 上傳圖片中的水印
c#圖片添加水印的實例代碼
java判斷文件是否為圖片+圖片加上水印
Drawing 圖片處理
更多類似文章 >>
生活服務
熱點新聞
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服