水印图片

平铺水印图片,直接时代码:

/**
 * Created by QYT on 2017/7/2.
 */
public interface IWaterMark {
    float ALPHA =1.0f;//透明度
    String LOGO="logo.png";
    /**
     *
     * @param image 需要增加水印的图片
     * @param imageName 图片名称
     * @param realUploadPath 图片存储绝对路径,假如时图片水印,那么此路径下应有一张水印Logo图片
     * @return
     */
    String execute(File image,String imageName,String realUploadPath);
}
/**
 * Created by QYT on 2017/7/2.
 */
public class LogoWaterMarkImpl implements IWaterMark {
    public String execute(File image, String imageName, String realUploadPath) {
        String  logoFileName="logo_"+imageName;
        OutputStream os=null;
        String separator=File.separator;

        String  logoPath=realUploadPath +separator+LOGO;
        try {
            //图片对象
            Image image2= ImageIO.read(image);
            int width=image2.getWidth(null);
            int height=image2.getHeight(null);

            //图片缓存 对象
            BufferedImage bufferedImage=new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
            //绘图工具
            Graphics2D g=bufferedImage.createGraphics();
            //使用绘图工具将原图绘制到图片缓存 对象,从坐标0,0开始绘制,width,height到原图的宽高
            g.drawImage(image2,0,0,width,height,null);

            //读取水印图片
            File logo =new File(logoPath);
            Image imageLogo=ImageIO.read(logo);
            int widthLogo=imageLogo.getWidth(null);
            int heightLogo=imageLogo.getHeight(null);

            //设置透明度
            g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP,ALPHA));

            //增加水印,不平铺
            //g.drawImage(imageLogo,0,0,null);

            //平铺水印图片
            //以图片中心点旋转30度
            g.rotate(Math.toRadians(30),width/2,height/2);
            //水印的起始坐标
            int x=0;
            int y;
            while (x<width*1.5){
                y=0;
                while (y<height*1.5){
                    g.drawImage(imageLogo,x,y,null);
                    y+=heightLogo+10;
                }
                x+=widthLogo+10;
            }

            g.dispose();

            //输出图片
            os=new FileOutputStream(realUploadPath+separator+logoFileName);
            JPEGImageEncoder encoder= JPEGCodec.createJPEGEncoder(os);
            encoder.encode(bufferedImage);

        }catch (Exception e){
            e.printStackTrace();
        }finally {
            if(os != null){
                try {
                    os.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return realUploadPath+separator+logoFileName;
    }

    public static void main(String[] args) {
        IWaterMark waterMark=new LogoWaterMarkImpl();

        String d=waterMark.execute(new File("C:\\Users\\QYT\\Pictures\\ddd.jpg"),"ddd.jpg","E:\\watermark");
        System.out.println(d);
    }
}

图片等比例缩放可使用:
thumbnailator

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值