java图片生成

最近一直看小说~~看到现在小说都是搞成了加水印的图片~~便想自己写个玩玩~~
现在把代码贴出来让大家指正一下~~图像识别正在写~~有点复杂~~各位那个有经验可以交流一下
package test;
import java.awt.*;
import java.awt.image.*;
import java.io.*;
import java.util.Random;
import javax.imageio.*;
import java.awt.font.*;
import java.awt.geom.*;
public class CreateImage {

String value = "";
String filepath = "";
public static void main(String[] args) throws Exception {
CreateImage test = new CreateImage();
test.setValue("文章内容 文章内容 文章内容 文章内容 文章内容 文章内容 文章内容 文章内容 文章内容 文章内容 文章内容 ");
test.setPath("F:/xul/image.jpg");
test.getImage();
}
private void setValue(String v) {
value = v;
}
private void setPath(String v) {
filepath = v;
}
private void getImage() {
int width = 700;
int height = 600;
int num = 25; // 每行字数
int fontpx = 24; // 字号
File file = new File(filepath);
Font font = new Font("仿宋", Font.BOLD, fontpx); // 字体
BufferedImage bi = new BufferedImage(width, height,
BufferedImage.TYPE_INT_RGB);
Graphics2D g2 = (Graphics2D) bi.getGraphics();
g2.setBackground(Color.WHITE); // 背景颜色
g2.clearRect(0, 0, width, height);
FontRenderContext context = g2.getFontRenderContext();
Rectangle2D bounds = font.getStringBounds(value, context);
double x = 20;//
double y = 20;//
double ascent = -bounds.getY();
double baseY = y + ascent;
// /
BasicStroke wideStroke = new BasicStroke(1.0f);
g2.setStroke(wideStroke); // 定义线条样式
Random random = new Random();
int red = 0, green = 0, blue = 0;
for (int i = 0; i < 155; i++) {
red = random.nextInt(255);
green = random.nextInt(255);
blue = random.nextInt(255);
g2.setColor(new Color(red, green, blue));
int x1 = random.nextInt(width);
int y1 = random.nextInt(height);
int x2 = random.nextInt(50);
int y2 = random.nextInt(50);
g2.drawLine(x1, y1, x1 + x2, y1 + y2);
}
// //
//
g2.setFont(new Font("宋体", Font.PLAIN, 24)); // 水印字体
String rand = "水印 水印"; // 水印
g2.setColor(Color.green); // 水印颜色
g2.rotate(31, width / 2, height / 2);
for (int i = 0; i < 15; i++) {
g2.drawString(rand, random.nextInt(width), random.nextInt(width)); // 加水印
}
g2.rotate(-31, width / 2, height / 2);
//
String aa = "";
g2.setFont(font);
g2.setPaint(Color.RED);
do {
if (value.length() > num) {
aa = value.substring(0, 25);
value = value.substring(num, value.length());
} else
break;
g2.drawString(aa, (int) x, (int) baseY);
baseY += num;
} while (value.length() - 25 > 0);
if (value.length() < num)
g2.drawString(value, (int) x, (int) baseY);
//
try {
ImageIO.write(bi, "jpg", file);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无风自舞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值