私は(ウォーターマークを追加するために)画像中心を計算しようとすると、次の午前 - add-water-to-image、結果が負のxを示し、画像のいくつかのために、ここでは数学の一部です:Javaは画像中心のリターンを計算マイナス陰性の結果
int centerX = (sourceImage.getWidth() - (int) rect.getWidth())/2;
int centerY = sourceImage.getHeight()/2;
と全体の機能:
public void addTextWatermark(String text, File sourceImageFile, File destImageFile, int textSize) {
try {
BufferedImage sourceImage = ImageIO.read(sourceImageFile);
Graphics2D g2d = (Graphics2D) sourceImage.getGraphics();
// initializes necessary graphic properties
AlphaComposite alphaChannel = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.1f);
g2d.setComposite(alphaChannel);
g2d.setColor(Color.BLACK.darker());
//Font(fontName, fontStyle, foneSize)
g2d.setFont(new java.awt.Font("Arial", Font.BOLD, textSize));
FontMetrics fontMetrics = g2d.getFontMetrics();
//text - input text , g2d - Graphics2D
Rectangle2D rect = fontMetrics.getStringBounds(text, g2d);
// calculates the coordinate where the String is painted
int centerX = (sourceImage.getWidth() - (int) rect.getWidth())/2;
int centerY = sourceImage.getHeight()/2;
// paints the textual watermark
g2d.drawString(text, centerX, centerY);
ImageIO.write(sourceImage, "png", destImageFile);
g2d.dispose();
} catch (IOException ex) {
System.out.println(ex.getMessage().toString());
}
}
数学は、すべての画像のために働くことを確認する方法はあります1-ですか?
2この計算ではjpg
とpng
の間に相違がありますか?
ありがとうございました。それがあっcauseingた
編集
画像サイズ:
1-に(* 3000 3000)大。
2〜小(60 * 60)です。
textSize(g2d.setFont(new java.awt.Font("Arial", Font.BOLD, textSize));
) - 32以下。
数値が負の場合、ウォーターマークが実際のイメージよりも大きいことを意味します。このシナリオでは、透かしのサイズをイメージ自体のサイズよりも小さくすることができます。 – BackSlash
さて、 'rect.getWidth()'が 'sourceImage.getWidth()'より大きい場合に起こります。あなたはそれぞれの幅を見ましたか?基本的に、これは、「そのサイズのテキストをすべてその画像に収めることはできません」 –
@BackSlashウォーターマークはちょうど少数の文字で、画像は1200x600pxです。ウォーターマークが大きければ可能でしょうか? –