FontManager.getFont("方正黑体");这个方法返回值为null
这个我是测试给图片添加文字水印的时候测试发现的 ,空指针,原因是创建FootnoteDrawTextItem对象时没有指定字体,而源码使用的是默认字体FontManager.getFont("方正黑体"); 这个返回的是空,又去看了FontManager源码,发现cache这个没有是个空map 然后有个 静态块,感觉是这里加载的,但是没有写实现
大概看了下FontManager这块的源码,
com.alibaba.simpleimage.SimpleImageException: java.lang.NullPointerException
at com.alibaba.simpleimage.render.WriteRender.render(WriteRender.java:218)
at com.mljr.carrier.test.SimpleImageDemo.doDrawImageText(SimpleImageDemo.java:326)
at com.mljr.carrier.test.SimpleImageDemo.testFootnoteDrawTextItem(SimpleImageDemo.java:291)
at com.mljr.carrier.test.SimpleImageDemo.main(SimpleImageDemo.java:297)
Caused by: java.lang.NullPointerException
at com.alibaba.simpleimage.render.FootnoteDrawTextItem.drawText(FootnoteDrawTextItem.java:110)
at com.alibaba.simpleimage.util.ImageDrawHelper.drawText(ImageDrawHelper.java:54)
at com.alibaba.simpleimage.render.DrawTextRender.render(DrawTextRender.java:80)
at com.alibaba.simpleimage.render.WriteRender.render(WriteRender.java:213)
暂时解决办法:构建CornerDrawTextItem,FixDrawTextItem,FootnoteDrawTextItem实体是使用全参数构建,因为如果不传字体默认使用的是FontManager.getFont,这个方法汇报空 FixDrawTextItem类:105行 Font font = defaultFont.deriveFont(fsize); defaultFont 空了
static File path = new File("C:\\tempDir");
static File rpath = new File("C:\\tempDir");
static final Color FONT_COLOR = new Color(255, 255, 255, 115);
static final Color FONT_SHADOW_COLOR = new Color(170, 170, 170, 77);
static final Font FONT = new Font("黑体", Font.PLAIN, 10);
static final float TEXT_WIDTH_PERCENT = 0.6F;
static final int MIN_FONT_SIZE = 6;
解决办法:全量构建实体
CornerDrawTextItem item1 = new CornerDrawTextItem("测试水印",FONT_COLOR,FONT_SHADOW_COLOR,FONT,MIN_FONT_SIZE,TEXT_WIDTH_PERCENT);