最近有一个朋友,拿着包装的简历去到了公司干货,虽然不是一个大厂,但是也领到了自己人生中第一个需求,虽然说这个需求我看起来不是很难,但是对于我朋友那种自学转行的人来说还是有一定难度的,这个需求我们来看看是什么需求把,其实也很简单:利用java代码根据文字生成随机浅色背景的图片,而且字体也要可变换。
我滴乖乖,这个需求给一个刚进来公司的人直接就给整不会了。那么接下来看看我是怎么做这个需求的吧,其实就几个关键字:根据文字生成图片、字体可变、浅色背景。
代码话不多说,我们直接开始撸码。首先我们先在D盘创建一个name.txt的文件,我们等会需要将这里面的文字读出来生成图片。
读取文件中的名字
接下来我们要写一个方法来读取文件中的名字。我们利用一个InputStreamReader去读取,然后返回一个List。
public static ListreadFileByLine(String filename) throws IOException, FileNotFoundException { List stringList=new ArrayList (); File file=new File(filename); InputStreamReader isr=new InputStreamReader(new FileInputStream(file),"UTF-8"); BufferedReader reader=new BufferedReader(isr); String tmp; while((tmp=reader.readLine())!=null){ stringList.add(tmp); } reader.close(); return stringList; }
生成图片
public static void generateImg(String string) throws IOException{ // 设置图片宽高 int width=400; int height=400; // 设置图片的路径 String filename="D:/"+string+".jpg"; System.out.println(filename); File file=new File(filename); // 不需要引入外部字体 Font font=new Font("黑体",Font.BOLD,60); // 引入外部字体 //Font font = getSelfDefinedFont("E:PangMenZhengDaoBiaoTiTi思源宋体.ttf"); BufferedImage bi =new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); Graphics2D g2=(Graphics2D) bi.getGraphics(); g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON); g2.setBackground(getRandomColor()); g2.clearRect(0, 0, width, height); g2.setFont(font); FontMetrics fm = g2.getFontMetrics(font); int textWidth = fm.stringWidth(string); g2.setPaint(new Color(0,0,128)); // 设置图片水平居中 int widthX = (width - textWidth) / 2; // y设置高度,目前还没有研究出居中的方法 g2.drawString(string, widthX , 220); ImageIO.write(bi,"jpg", file); }
这里需要注意的是:
- 我这里有两种方式,第一种是不引入外部字体,可以直接使用内置字体。
- 我们可以自己下载字体,然后通过绝度路径的方式进行引入。字体文件格式一定要是ttf,其他我试了一下是不生效的,还有一定要用没有版权或者可以免费商用的字体。
- 我这里做了水平居中,但是垂直居中还没有研究出来,只可以根据实际效果自己慢慢调整。
生成浅色背景
其实生成浅色背景我能想到的是利用rgb在一定范围内随机生成来生成一个浅色背景。
private static Color getRandomColor() { Random random=new Random(); // 我这边设置了返回浅色的图片,排除了深色 return new Color(random.nextInt(255)%(255-230+1) + 200,random.nextInt(255)%(255-230+1) + 200,random.nextInt(255)%(255-230+1) + 200); }
写主方法
主体代码写完啦,接下来我们来写主方法进行测试。
String fileName="D:/name.txt"; List测试nameList = readFileByLine(fileName); for (int i = 0; i < nameList.size(); i++) { generateImg(nameList.get(i)); }
还可以把!嘻嘻
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)