zoukankan      html  css  js  c++  java
  • java给图片添加水印

    package com.blue.common.util;

    import java.awt.Color;
    import java.awt.Font;
    import java.awt.Graphics2D;
    import java.awt.Image;
    import java.awt.image.BufferedImage;
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.IOException;

    import javax.imageio.ImageIO;


    public class WaterMarkUtils {
    /**
    * 图片添加水印
    * @param srcImgPath 需要添加水印的图片的路径
    * @param outImgPath 添加水印后图片输出路径
    * @param markContentColor 水印文字的颜色
    * @param waterMarkContent 水印的文字
    */
    public static void mark(String srcImgPath, String outImgPath, Color markContentColor, String waterMarkContent) {
    FileOutputStream outImgStream =null;
    try {
    // 读取原图片信息
    File srcImgFile = new File(srcImgPath);
    Image srcImg = ImageIO.read(srcImgFile);
    int srcImgWidth = srcImg.getWidth(null);
    int srcImgHeight = srcImg.getHeight(null);
    // 加水印
    BufferedImage bufImg = new BufferedImage(srcImgWidth, srcImgHeight, BufferedImage.TYPE_INT_RGB);
    Graphics2D g = bufImg.createGraphics();
    g.drawImage(srcImg, 0, 0, srcImgWidth, srcImgHeight, null);
    Font font = new Font("黑体", Font.ITALIC, 30);
    g.setColor(markContentColor); //根据图片的背景设置水印颜色

    g.setFont(font);
    int x = srcImgWidth - getWatermarkLength(waterMarkContent, g) - 3;
    int y = srcImgHeight - 3;
    //int x = (srcImgWidth - getWatermarkLength(watermarkStr, g)) / 2;
    //int y = srcImgHeight / 2;
    g.drawString(waterMarkContent, x, y);
    g.dispose();
    // 输出图片
    outImgStream = new FileOutputStream(outImgPath);
    ImageIO.write(bufImg, "jpg", outImgStream);
    outImgStream.flush();
    outImgStream.close();
    } catch (Exception e) {
    e.printStackTrace();
    }finally{
    if(outImgStream!=null){
    try {
    outImgStream.close();
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }
    }
    }

    /**
    * 获取水印文字总长度
    * @param waterMarkContent 水印的文字
    * @param g
    * @return 水印文字总长度
    */
    public static int getWatermarkLength(String waterMarkContent, Graphics2D g) {
    return g.getFontMetrics(g.getFont()).charsWidth(waterMarkContent.toCharArray(), 0, waterMarkContent.length());
    }

    public static void main(String[] args) {
    // 原图位置, 输出图片位置, 水印文字颜色, 水印文字
    mark("D:/999/A01.jpg", "d:/A01.jpg", Color.BLACK, "QSR水印效果测试");
    }
    }

  • 相关阅读:
    《C++ 并发编程》- 第1章 你好,C++的并发世界
    30分钟,让你成为一个更好的程序员
    程序员技术练级攻略
    谈新技术学习方法-如何学习一门新技术新编程语言
    计算机科学中最重要的32个算法
    程序员学习能力提升三要素
    一位在MIT教数学的老师总结了十条经验
    学习算法之路
    十个顶级的C语言资源助你成为优秀的程序员
    Linux中LoadAverage分析
  • 原文地址:https://www.cnblogs.com/kimij1602/p/11977605.html
Copyright © 2011-2022 走看看