英文:
Multiple Text Lines as Watermark on image in java
问题
// 初始化水印图片
BufferedImage watermarked = new BufferedImage(imageWidth, imageHeight, imageType);
// 初始化绘图对象
Graphics2D w = (Graphics2D) watermarked.getGraphics();
w.drawImage(image, 0, 0, null);
// 设置透明度
AlphaComposite alphaChannel = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.4f);
w.setComposite(alphaChannel);
// 设置字体和颜色
w.setColor(Color.RED);
w.setFont(new Font("Verdana", Font.BOLD, 12));
// 这里是您希望的方法,它接受 WatermarkFormat 对象或其他替代方法
WatermarkFormat watermarkFormat = new WatermarkFormat(); // 假设您已经创建了 WatermarkFormat 对象
String formattedText = watermarkFormat.toString(); // 将对象转换为字符串
w.drawString(formattedText, 100, 70);
ImageIO.write(watermarked, type, destination);
w.dispose();
在上述代码中,您需要创建一个 WatermarkFormat
类的实例,并且该类需要覆写 toString()
方法,以便将您想要的特定格式转换为字符串。然后您可以将转换后的字符串传递给 drawString()
方法来绘制水印。这种方法允许您将对象的内容转换为可在图像上绘制的格式。
英文:
I want to print a specific format as watermark on decoded image in java such as timestamp,latitude ,longitude on image . I have created a watermarkformat pojo class for it.
Now i want to watermark that particular format on decoded/rendered image , but Graphics2D drawString() method takes String and x,y coordinates. How shall i convert my object in to string to pass to drawString()
Look at the following code -
BufferedImage watermarked = new BufferedImage(imageWidth, imageHeight, imageType);
// initializes necessary graphic properties
Graphics2D w = (Graphics2D) watermarked.getGraphics();
w.drawImage(image, 0, 0, null);
AlphaComposite alphaChannel = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.4f);
w.setComposite(alphaChannel);
w.setColor(Color.RED);
w.setFont(new Font("Verdana", Font.BOLD, 12));
w.drawString(text,100,70); // here i want alternative method which takes watermarkformat object or any alternative way
ImageIO.write(watermarked, type, destination);
w.dispose();
please help what could be the alternative way to print specific format on image ?
答案1
得分: 2
如果您所说的是多行水印,您可能想尝试使用以下方法替换您当前的w.drawString()方法:
// 如果文本是一个包含换行字符的单一字符串
for (String line : text.split("\n")) {
w.drawString(line, x, y += w.getFontMetrics().getHeight());
}
// 如果文本是一个名为text[]的字符串数组
for (String line : text) {
w.drawString(line, x, y += w.getFontMetrics().getHeight());
}
英文:
If what you are talking about is a multi-line watermark then you may want to try this to replace your current w.drawString() method:
// If the text is in a single string with newline characters in it
for (String line : text.split("\n")) {
w.drawString(line, x, y += w.getFontMetrics().getHeight());
}
// If the text is in a String Array named: text[]
for (String line : text) {
w.drawString(line, x, y += w.getFontMetrics().getHeight());
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论