给图片添加水印

 

package  com.longtop.core.tools.file;

import  java.awt.Color;
import  java.awt.Font;
import  java.awt.Graphics2D;
import  java.awt.Image;
import  java.awt.image.BufferedImage;
import  java.io.FileOutputStream;
import  javax.swing.ImageIcon;
import  com.sun.image.codec.jpeg.JPEGCodec;
import  com.sun.image.codec.jpeg.JPEGEncodeParam;
import  com.sun.image.codec.jpeg.JPEGImageEncoder;
import  java.awt.AlphaComposite;

/**
 * 给图片加水印公共类
 * 
 * 
@author liqiang4j
 
*/

public   class  WaterMarkImage {

    
/**
     * 给图片添加文字水印
     * 
     * 
@param filePath:需要添加水印的图片的路径
     * 
@param markContent:水印的文字
     * 
@param fileDest:文字水印图片保存位置
     * 
@param alpha:透明度(0.0-1.0f)
     * 
@param fontName:字体名称
     * 
@param fontStyle:字型
     * 
@param fontColor:字体颜色
     * 
@param fontSize:字体大小
     * 
@param x:横坐标
     * 
@param y:竖坐标
     * 
@return true:成功;false:失败
     
*/

    
public static boolean createStringMark(String filePath,String markContent,String fileDest,float alpha,
            String fontName,
int fontStyle,Color fontColor,int fontSize,int x,int y){
        ImageIcon imgIcon 
= new ImageIcon(filePath);
        Image theImg 
= imgIcon.getImage();
        
int width = theImg.getWidth(null);
        
int height = theImg.getHeight(null);
        BufferedImage bimage 
= new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
        Graphics2D g 
= bimage.createGraphics();
        g.drawImage(theImg, 
00, width, height, null);
        g.setColor(fontColor);
        g.setFont(
new Font(fontName, fontStyle, fontSize)); 
        g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, alpha));
        g.drawString(markContent, x, height 
- y); 
        g.dispose();
        FileOutputStream out 
= null;
        
try {
            out 
= new FileOutputStream(fileDest);
            JPEGImageEncoder encoder 
= JPEGCodec.createJPEGEncoder(out);
            
// JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(bimage);
            
// encoder.encode(bimage, param);
            encoder.encode(bimage);
            out.close();
        }

        
catch (Exception e) {
            
return false;
        }

        
return true;
    }

    
/**
     * 给图片添加文字水印
     * 
     * 
@param filePath:需要添加水印的图片的路径
     * 
@param markContent:水印的文字
     * 
@param fileDest:文字水印图片保存位置
     * 
@param fontName:字体名称
     * 
@param fontStyle:字型
     * 
@param fontColor:字体颜色
     * 
@param fontSize:字体大小
     * 
@param x:横坐标
     * 
@param y:竖坐标
     * 
@return true:成功;false:失败
     
*/

    
public static boolean createStringMark(String filePath,String markContent,String fileDest,int x,int y){
        
return createStringMark(filePath, markContent, fileDest, 1f, "宋体", Font.PLAIN, Color.BLACK, 36, x, y);
    }

    
/**
     * 给图片添加文字水印
     * 
     * 
@param filePath:需要添加水印的图片的路径
     * 
@param markContent:水印的文字
     * 
@param alpha:透明度(0.0-1.0f)
     * 
@param fontName:字体名称
     * 
@param fontStyle:字型
     * 
@param fontColor:字体颜色
     * 
@param fontSize:字体大小
     * 
@param x:横坐标
     * 
@param y:竖坐标
     * 
@return true:成功;false:失败
     
*/

    
public static boolean createStringMark(String filePath,String markContent,float alpha,String fontName,
            
int fontStyle,Color fontColor,int fontSize,int x,int y){
        
return createStringMark(filePath, markContent, filePath, alpha, fontName, fontStyle, fontColor, fontSize, x, y);
    }
    
    
/**
     * 给图片添加文字水印
     * 
     * 
@param filePath:需要添加水印的图片的路径
     * 
@param markContent:水印的文字
     * 
@param fontName:字体名称
     * 
@param fontStyle:字型
     * 
@param fontColor:字体颜色
     * 
@param fontSize:字体大小
     * 
@param x:横坐标
     * 
@param y:竖坐标
     * 
@return true:成功;false:失败
     
*/

    
public static boolean createStringMark(String filePath,String markContent,String fontName,int fontStyle,
            Color fontColor,
int fontSize,int x,int y){
        
return createStringMark(filePath, markContent, filePath, 1.0f, fontName, fontStyle, fontColor, fontSize, x, y);
    }

    
/**
     * 给图片添加文字水印
     * 
     * 
@param filePath:需要添加水印的图片的路径
     * 
@param markContent:水印的文字
     * 
@param fontStyle:字型
     * 
@param fontColor:字体颜色
     * 
@param fontSize:字体大小
     * 
@param x:横坐标
     * 
@param y:竖坐标
     * 
@return true:成功;false:失败
     
*/

    
public static boolean createStringMark(String filePath,String markContent,int fontStyle,Color fontColor,
            
int fontSize,int x,int y){
        
return createStringMark(filePath, markContent, "宋体", fontStyle, fontColor, fontSize, x, y);
    }

    
/**
     * 给图片添加文字水印
     * 
     * 
@param filePath:需要添加水印的图片的路径
     * 
@param markContent:水印的文字
     * 
@param fontColor:字体颜色
     * 
@param fontSize:字体大小
     * 
@param x:横坐标
     * 
@param y:竖坐标
     * 
@return true:成功;false:失败
     
*/

    
public static boolean createStringMark(String filePath,String markContent,Color fontColor,int fontSize,int x,int y){
        
return createStringMark(filePath, markContent, Font.PLAIN, fontColor, fontSize, x, y);
    }

    
/**
     * 给图片添加文字水印
     * 
     * 
@param filePath:需要添加水印的图片的路径
     * 
@param markContent:水印的文字
     * 
@param fontSize:字体大小
     * 
@param x:横坐标
     * 
@param y:竖坐标
     * 
@return true:成功;false:失败
     
*/

    
public static boolean createStringMark(String filePath,String markContent,int fontSize,int x,int y){
        
return createStringMark(filePath, markContent, Color.BLACK, fontSize, x, y);
    }

    
/**
     * 给图片添加文字水印
     * 
     * 
@param filePath:需要添加水印的图片的路径
     * 
@param markContent:水印的文字
     * 
@param x:横坐标
     * 
@param y:竖坐标
     * 
@return true:成功;false:失败
     
*/

    
public static boolean createStringMark(String filePath,String markContent,int x,int y){
        
return createStringMark(filePath, markContent, 36, x, y);
    }



    
/**
     * 给图片添加图像水印
     * 
     * 
@param filePath:需要添加水印的图片的路径
     * 
@param imgPath:水印图片路径
     * 
@param fileDest:添加水印后的图片保存路径
     * 
@param alpha:透明度
     * 
@param x:横坐标
     * 
@param y:竖坐标
     * 
@return true:成功;false:失败
     
*/

    
public static boolean createImageMark(String filePath,String imgPath,String fileDest,float alpha,int x,int y){
        
// 要处理的原始图片
        ImageIcon icoInput = new ImageIcon(filePath);
        Image imgInput 
= icoInput.getImage();
        
int width = imgInput.getWidth(null);
        
int height = imgInput.getHeight(null);
        BufferedImage buffInput 
= new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
        
// 要添加上来的水印
        ImageIcon icoADD = new ImageIcon(imgPath);
        Image imgADD 
= icoADD.getImage();
        
int w = imgADD.getWidth(null);
        
int h = imgADD.getHeight(null);
        
// 绘图
        Graphics2D g = buffInput.createGraphics();
        g.drawImage(imgInput, 
00null);
        g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, alpha));
        
// 下面代码的前面五个参数:图片,x坐标,y坐标,图片宽度,图片高度
        g.drawImage(imgADD, x, y, w, h, null); // 靠左上绘制,x和y都是10
        g.dispose();
        
try {
            FileOutputStream out 
= new FileOutputStream(fileDest);
            JPEGImageEncoder encoder 
= JPEGCodec.createJPEGEncoder(out);
            
// JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(buffInput);
            
// encoder.encode(buffInput, param);
            encoder.encode(buffInput);
            out.close();
        }

        
catch (Exception e) {
            
return false;
        }

        
return true;
    }

    
/**
     * 给图片添加图像水印
     * 
     * 
@param filePath:需要添加水印的图片的路径
     * 
@param imgPath:水印图片路径
     * 
@param alpha:透明度
     * 
@param x:横坐标
     * 
@param y:竖坐标
     * 
@return true:成功;false:失败
     
*/

    
public static boolean createImageMark(String filePath,String imgPath,float alpha,int x,int y){
        
return createImageMark(filePath, imgPath, filePath, alpha, x, y);
    }

    
/**
     * 给图片添加图像水印
     * 
     * 
@param filePath:需要添加水印的图片的路径
     * 
@param imgPath:水印图片路径
     * 
@param x:横坐标
     * 
@param y:竖坐标
     * 
@return true:成功;false:失败
     
*/

    
public static boolean createImageMark(String filePath,String imgPath,int x,int y){
        
return createImageMark(filePath, imgPath, filePath, 1.0f, x, y);
    }

    
/**
     * 给图片添加图像水印
     * 
     * 
@param filePath:需要添加水印的图片的路径
     * 
@param imgPath:水印图片路径
     * 
@param fileDest:添加水印后的图片保存路径 
     * 
@param x:横坐标
     * 
@param y:竖坐标
     * 
@return true:成功;false:失败
     
*/

    
public static boolean createImageMark(String filePath,String imgPath,String fileDest,int x,int y){
        
return createImageMark(filePath, imgPath, fileDest, 1.0f, x, y);
    }


    
// main方法:程序入口
    public static void main(String args[]){
        
// 文字水印
        WaterMarkImage.createStringMark("F:/waterMark/source.jpg""生成图像例子。。。。。。"10,10);
        WaterMarkImage.createImageMark(
"F:/waterMark/source.JPG""F:/waterMark/mark.JPG""F:/waterMark/source2.JPG",0.5f2020);
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值