• java在图片上添加文字


    业务需求要在图片上添加水印。下面粘出代码供自己和大家分享

    package com.pro.drawTextOnImg;
    
    import java.awt.Color;
    import java.awt.Font;
    import java.awt.FontMetrics;
    import java.awt.Graphics2D;
    import java.awt.Image;
    import java.awt.geom.Rectangle2D;
    import java.awt.image.BufferedImage;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    
    import javax.imageio.ImageIO;
    import javax.swing.ImageIcon;
    
    import org.apache.commons.lang3.StringUtils;
    
    public class TestImg {
    
        public static void main(String[] args) {
            String filePath = "d:\inimg03.png";
            String outPath = "d:\2.jpg";
            drawTextInImg(filePath, outPath, new FontText("中国", 1, "#CC2BAC", 40, "黑体"));
    
        }
    
        public static void drawTextInImg(String filePath,String outPath, FontText text) {
            ImageIcon imgIcon = new ImageIcon(filePath);
            Image img = imgIcon.getImage();
            int width = img.getWidth(null);
            int height = img.getHeight(null);
            BufferedImage bimage = new BufferedImage(width, height,
                    BufferedImage.TYPE_INT_RGB);
    
            Graphics2D g = bimage.createGraphics();
            g.setColor(getColor(text.getWm_text_color()));
            g.setBackground(Color.white);
            g.drawImage(img, 0, 0, null);
            Font font = null;
            if (StringUtils.isEmpty(text.getWm_text_font())
                    && text.getWm_text_size() != null) {
                font = new Font(text.getWm_text_font(), Font.BOLD,
                        text.getWm_text_size());
            } else {
                font = new Font(null, Font.BOLD, 15);
            }
    
            g.setFont(font);
            FontMetrics metrics = new FontMetrics(font){};
            Rectangle2D bounds = metrics.getStringBounds(text.getText(), null);
            int textWidth = (int) bounds.getWidth();
            int textHeight = (int) bounds.getHeight();
            int left = 0;
            int top = textHeight;
            
            //九宫格控制位置
            if(text.getWm_text_pos()==2){
                left = width/2;
            }
            if(text.getWm_text_pos()==3){
                left = width -textWidth;
            }
            if(text.getWm_text_pos()==4){
                top = height/2;
            }
            if(text.getWm_text_pos()==5){
                left = width/2;
                top = height/2;
            }
            if(text.getWm_text_pos()==6){
                left = width -textWidth;
                top = height/2;
            }
            if(text.getWm_text_pos()==7){
                top = height - textHeight;
            }
            if(text.getWm_text_pos()==8){
                left = width/2;
                top = height - textHeight;
            }
            if(text.getWm_text_pos()==9){
                left = width -textWidth;
                top = height - textHeight;
            }
            g.drawString(text.getText(), left, top);
            g.dispose();
    
            try {
                FileOutputStream out = new FileOutputStream(outPath);
                ImageIO.write(bimage, "JPEG", out);
                out.close();
            } catch (FileNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    
        // color #2395439
        public static Color getColor(String color) {
            if (color.charAt(0) == '#') {
                color = color.substring(1);
            }
            if (color.length() != 6) {
                return null;
            }
            try {
                int r = Integer.parseInt(color.substring(0, 2), 16);
                int g = Integer.parseInt(color.substring(2, 4), 16);
                int b = Integer.parseInt(color.substring(4), 16);
                return new Color(r, g, b);
            } catch (NumberFormatException nfe) {
                return null;
            }
        }
    }

     下面是 FontText里面主要是水印的基本信息

    package com.pro.drawTextOnImg;
    
    public class FontText {
        
        private String text;
        
        private int wm_text_pos;
        
        private String wm_text_color;
        
        private Integer wm_text_size;
        
        private String wm_text_font;//字体  “黑体,Arial”
    
        public String getText() {
            return text;
        }
    
        public void setText(String text) {
            this.text = text;
        }
    
        public int getWm_text_pos() {
            return wm_text_pos;
        }
    
        public void setWm_text_pos(int wm_text_pos) {
            this.wm_text_pos = wm_text_pos;
        }
    
        public String getWm_text_color() {
            return wm_text_color;
        }
    
        public void setWm_text_color(String wm_text_color) {
            this.wm_text_color = wm_text_color;
        }
    
        public Integer getWm_text_size() {
            return wm_text_size;
        }
    
        public void setWm_text_size(Integer wm_text_size) {
            this.wm_text_size = wm_text_size;
        }
    
        public String getWm_text_font() {
            return wm_text_font;
        }
    
        public void setWm_text_font(String wm_text_font) {
            this.wm_text_font = wm_text_font;
        }
    
        public FontText(String text, int wm_text_pos, String wm_text_color,
                Integer wm_text_size, String wm_text_font) {
            super();
            this.text = text;
            this.wm_text_pos = wm_text_pos;
            this.wm_text_color = wm_text_color;
            this.wm_text_size = wm_text_size;
            this.wm_text_font = wm_text_font;
        }
        
        public FontText(){}
        
    }
  • 相关阅读:
    【CITE】当类库项目中无法使用Application.StartupPath的时侯 (注:主要是在进行反射读取文件的时候!!)
    设置pictureBox的边框颜色
    怎么在Form1调用Form2中的成员?
    【CITE】DrawImage方法详解(转)
    Python-正则表达式实现计算器功能
    Python-面向对象进阶
    Python基础-封装与扩展、静态方法和类方法
    Python基础-接口与归一化设计、抽象类、继承顺序、子类调用父类,多态与多态性
    Python基础-继承与派生
    Python基础-月考
  • 原文地址:https://www.cnblogs.com/wangxiangstudy/p/5848447.html
Copyright © 2020-2023  润新知