首页 > 编程语言 > 详细

java 实现图片上加字 两个图片合并 图片上加一层朦胧字体

时间:2019-08-08 13:59:57      阅读:91      评论:0      收藏:0      [点我收藏+]
package image.demo;
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 java.io.FileOutputStream;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
public class ImageDemoOne {
  public static void main(String[] args) throws IOException {
         String srcImgPath="D:\\images\\1.png"; //a源图片地址
         String srcImgPath4="D:\\images\\4.png"; //a源水印图片地址
         String tarImgPath="D:\\images\\2.png"; //a待存储的地址
         String tarImgPath3="D:\\images\\3.png"; //a待存储的地址
         String waterMarkContent="图片来源:http://blog.csdn.net/zjq_1314520";  //a水印内容
         Color color=new Color(255,255,255,128);                               //a水印图片色彩以及透明度
         new ImageDemoOne().addWaterMark(srcImgPath, tarImgPath, waterMarkContent, color);
         markImgMark(srcImgPath4, srcImgPath, tarImgPath3);
  }
 
    /**
     * @param srcImgPath 源图片路径
     * @param tarImgPath 保存的图片路径
     * @param waterMarkContent 水印内容
     * @param markContentColor 水印颜色
     * @param font 水印字体
     */
    public void addWaterMark(String srcImgPath, String tarImgPath,
      String waterMarkContent,Color markContentColor) {
        try {
            // a读取原图片信息
            File srcImgFile = new File(srcImgPath);//得到文件
            Image srcImg = ImageIO.read(srcImgFile);//文件转化为图片
            int srcImgWidth = srcImg.getWidth(null);//获取图片的宽
            int srcImgHeight = srcImg.getHeight(null);//获取图片的高
            // a加水印
            BufferedImage bufImg = new BufferedImage(srcImgWidth, srcImgHeight, BufferedImage.TYPE_INT_RGB);
            Graphics2D g = bufImg.createGraphics();
            g.drawImage(srcImg, 0, 0, srcImgWidth, srcImgHeight, null);
            g.setColor(markContentColor); //a根据图片的背景设置水印颜色
          
            int fontLength = (int) (srcImgWidth*0.055);
            Font font2 = new Font("微软雅黑", Font.PLAIN, fontLength);
            g.setFont(font2);  //a设置字体
            //a设置水印的坐标
            int x = (int) (srcImgWidth-getWatermarkLength(waterMarkContent,g)-fontLength);
            int y = (int) (srcImgHeight*0.96);
            g.drawString(waterMarkContent, x, y);  //a画出水印
            g.dispose(); 
            // a输出图片 
            FileOutputStream outImgStream = new FileOutputStream(tarImgPath); 
            ImageIO.write(bufImg, "png", outImgStream);
            System.out.println("添加水印完成"); 
            outImgStream.flush(); 
            outImgStream.close(); 
        } catch (Exception e) {
            // TODO: handle exception
        }
    }
    public int getWatermarkLength(String waterMarkContent, Graphics2D g) { 
        return g.getFontMetrics(g.getFont()).charsWidth(waterMarkContent.toCharArray(), 0, waterMarkContent.length()); 
    } 
    /**
  * 为图片添加图片水印
  * @param watermarkUrl 原图
  * @param source 水印图片
  * @param output 制作完成的图片
  * @return
  * @throws IOException
  */
 public static String markImgMark(String watermarkUrl,
   String source, String output) throws IOException {
  String result = "添加图片水印出错";
  File file = new File(source);
  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.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
  g.drawImage(img.getScaledInstance(width, height, Image.SCALE_SMOOTH), 0, 0, null);
  ImageIcon imgIcon = new ImageIcon(watermarkUrl);
  Image con = imgIcon.getImage();
  float clarity = 0.6f;//透明度
  g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, clarity));
  
  g.drawImage(con, 10, 10, null);//水印的位置
  g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER));
  g.dispose();
  File sf = new File(output);
  ImageIO.write(bi, "png", sf); // 保存图片
  System.out.println("添加图片水印成功");
  return result;
 }
  
}

java 实现图片上加字 两个图片合并 图片上加一层朦胧字体

原文:https://www.cnblogs.com/csjdaima/p/11320505.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!