繁体   English   中英

为什么我的水印没有在Java的中心显示?

[英]Why my Watermark does not show in center in java?

我经历了许多教程,最终使我的图像带有徽标和文本,并带有水印,但是问题是我的文本没有水平居中显示在图像上,而是从文本本身开始。

这是我的代码

BufferedImage waterMark = ImageIO.read(getClass().getResource("/haams/MyLogo.png"));
BufferedImage image = ImageIO.read(new File(MyImage.getAbsolutePath()));
Graphics2D g = image.createGraphics();
try 
{
   g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.5f));// 50% transp
   g.drawImage(waterMark, image.getWidth() - waterMark.getWidth(), image.getHeight() - waterMark.getHeight(), null);// draw in lower right corner

   FontMetrics fontMetrics = g.getFontMetrics();
   Rectangle2D rect = fontMetrics.getStringBounds("Testing WaterMark", g);

   g.setFont(new Font("Arial", Font.BOLD, 30));
   g.drawString("Testing WaterMark",(image.getWidth() - (int) rect.getWidth()) / 2, (image.getHeight() - (int) rect.getHeight()) / 2);
   //Above line should place my String in center but the text starts from center
}
finally 
{
   g.dispose();
}
ImageIO.write(image, FileName.substring(FileName.lastIndexOf('.')+1),  new File(System.getProperty("user.dir")+"\\"+FileName));

在我的输出中, MyLogo正确放置在我想要的位置,但是Text从中心开始而不是在中心。

我没有10分可以上传图片,所以我会尽力说明我的意思

我的图片和其中的文字

 -----------------------------------
 |                                  |
 |                                  |
 |                                  |
 |                                  |
 |                                  |
 |                Test WaterMark    |
 |                                  |
 |                                  |
 |                                  |
 |                                  |
 |                                  |
 -----------------------------------

您可以看到文本从中心开始而不是居中。 我的代码有什么问题?

我认为问题可能是

FontMetrics fontMetrics = g.getFontMetrics();

在设置要使用的字体之前

g.setFont(new Font("Arial", Font.BOLD, 30));

确保先设置字体并在设置字体后获取指标。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM