java 在图片上写字,两个图片合并的实现方法

时间:2022-04-10 04:14:35

实例如下:

java" id="highlighter_157798">
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
package writeimg;
import javax.imageio.ImageIO;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.net.URL;
  
  
public class pic {
  
  private Font font = new Font("华文彩云", Font.PLAIN, 40);// 添加字体的属性设置
  
  private Graphics2D g = null;
  
  private int fontsize = 0;
  
  private int x = 0;
  
  private int y = 0;
  
  /**
   * 导入本地图片到缓冲区
   */
  public BufferedImage loadImageLocal(String imgName) {
    try {
      return ImageIO.read(new File(imgName));
    } catch (IOException e) {
      System.out.println(e.getMessage());
    }
    return null;
  }
  
  /**
   * 导入网络图片到缓冲区
   */
  public BufferedImage loadImageUrl(String imgName) {
    try {
      URL url = new URL(imgName);
      return ImageIO.read(url);
    } catch (IOException e) {
      System.out.println(e.getMessage());
    }
    return null;
  }
  
  /**
   * 生成新图片到本地
   */
  public void writeImageLocal(String newImage, BufferedImage img) {
    if (newImage != null && img != null) {
      try {
        File outputfile = new File(newImage);
        ImageIO.write(img, "jpg", outputfile);
      } catch (IOException e) {
        System.out.println(e.getMessage());
      }
    }
  }
  
  /**
   * 设定文字的字体等
   */
  public void setFont(String fontStyle, int fontSize) {
    this.fontsize = fontSize;
    this.font = new Font(fontStyle, Font.PLAIN, fontSize);
  }
  
  /**
   * 修改图片,返回修改后的图片缓冲区(只输出一行文本)
   */
  public BufferedImage modifyImage(BufferedImage img, Object content, int x,
      int y) {
  
    try {
      int w = img.getWidth();
      int h = img.getHeight();
      g = img.createGraphics();
      g.setBackground(Color.WHITE);
      g.setColor(Color.orange);//设置字体颜色
      if (this.font != null)
        g.setFont(this.font);
      // 验证输出位置的纵坐标和横坐标
      if (x >= h || y >= w) {
        this.x = h - this.fontsize + 2;
        this.y = w;
      } else {
        this.x = x;
        this.y = y;
      }
      if (content != null) {
        g.drawString(content.toString(), this.x, this.y);
      }
      g.dispose();
    } catch (Exception e) {
      System.out.println(e.getMessage());
    }
  
    return img;
  }
  
  /**
   * 修改图片,返回修改后的图片缓冲区(输出多个文本段) xory:true表示将内容在一行中输出;false表示将内容多行输出
   */
  public BufferedImage modifyImage(BufferedImage img, Object[] contentArr,
      int x, int y, boolean xory) {
    try {
      int w = img.getWidth();
      int h = img.getHeight();
      g = img.createGraphics();
      g.setBackground(Color.WHITE);
      g.setColor(Color.RED);
      if (this.font != null)
        g.setFont(this.font);
      // 验证输出位置的纵坐标和横坐标
      if (x >= h || y >= w) {
        this.x = h - this.fontsize + 2;
        this.y = w;
      } else {
        this.x = x;
        this.y = y;
      }
      if (contentArr != null) {
        int arrlen = contentArr.length;
        if (xory) {
          for (int i = 0; i < arrlen; i++) {
            g.drawString(contentArr[i].toString(), this.x, this.y);
            this.x += contentArr[i].toString().length()
                * this.fontsize / 2 + 5;// 重新计算文本输出位置
          }
        } else {
          for (int i = 0; i < arrlen; i++) {
            g.drawString(contentArr[i].toString(), this.x, this.y);
            this.y += this.fontsize + 2;// 重新计算文本输出位置
          }
        }
      }
      g.dispose();
    } catch (Exception e) {
      System.out.println(e.getMessage());
    }
  
    return img;
  }
  
  /**
   * 修改图片,返回修改后的图片缓冲区(只输出一行文本)
   *
   * 时间:2007-10-8
   *
   * @param img
   * @return
   */
  public BufferedImage modifyImageYe(BufferedImage img) {
  
    try {
      int w = img.getWidth();
      int h = img.getHeight();
      g = img.createGraphics();
      g.setBackground(Color.WHITE);
      g.setColor(Color.blue);//设置字体颜色
      if (this.font != null)
        g.setFont(this.font);
      g.drawString("reyo.cn", w - 85, h - 5);
      g.dispose();
    } catch (Exception e) {
      System.out.println(e.getMessage());
    }
  
    return img;
  }
  
  public BufferedImage modifyImagetogeter(BufferedImage b, BufferedImage d) {
  
    try {
      int w = b.getWidth();
      int h = b.getHeight();
        
  
      g = d.createGraphics();
      g.drawImage(b, 100, 10, w, h, null);
      g.dispose();
    } catch (Exception e) {
      System.out.println(e.getMessage());
    }
  
    return d;
  }
  
  public static void main(String[] args) {
  
    pic tt = new pic();
  
    BufferedImage d = tt.loadImageLocal("D:\\11.jpg");
//   BufferedImage b = tt
//       .loadImageLocal("E:\\文件(word,excel,pdf,ppt.txt)\\zte-logo.png");
     tt.writeImageLocal("D:\\cc.jpg",tt.modifyImage(d,"西昌苹果",90,90)
    //往图片上写文件
     );
  
    //tt.writeImageLocal("D:\\cc.jpg", tt.modifyImagetogeter(b, d));
    //将多张图片合在一起
    System.out.println("success");
  }
  
}

以上就是小编为大家带来的java 在图片上写字,两个图片合并的实现方法全部内容了,希望大家多多支持服务器之家~