我正在嘗試使用以下代碼向 Java 中的影像添加一些文本:
public static void main(String[] args) throws IOException {
BufferedImage image = ImageIO.read(new File("img.png"));
Graphics g = image.getGraphics();
Rectangle rectangle = new Rectangle(image.getWidth(), image.getHeight());
g.setFont(g.getFont().deriveFont(30f));
drawCenteredString(g, "TexvzgdsfadvcfkgsdASKJDFHJGgkdgfsakagjASGHDJStTexvzgdsfadvcfkgsdASKJDFHJGgkdgfsakagjASGHDJSt", rectangle, g.getFont());
g.dispose();
ImageIO.write(image, "png", new File("out.png"));
}
public static void drawCenteredString(Graphics g, String text, Rectangle rect, Font font) {
FontMetrics metrics = g.getFontMetrics(font);
int x = rect.x (rect.width - metrics.stringWidth(text)) / 2;
int y = rect.y ((rect.height - metrics.getHeight()) / 2) metrics.getAscent();
g.setFont(font);
g.drawString(text, x, y);
}
但我有一個問題:我需要能夠縮放字體大小或將單詞發送到新行,以便整個字串適合影像中心的矩形區域,最大大小為 x,y。我該怎么做?
uj5u.com熱心網友回復:
要包裝文本,請
我從 96 的字體大小開始,逐漸減小到 46,它適合影像。
這是完整的可運行代碼。
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.Rectangle;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.net.URL;
import javax.imageio.ImageIO;
public class AddTextToImage {
public static void main(String[] args) throws IOException {
URL url = new URL("https://clipartmag.com/images/car-cartoon-png-18.png");
BufferedImage image = ImageIO.read(url);
Graphics g = image.getGraphics();
Rectangle rectangle = new Rectangle(image.getWidth(), image.getHeight());
String text = "TexvzgdsfadvcfkgsdASKJDFHJGgkdgfsakagjASGHDJSt"
"TexvzgdsfadvcfkgsdASKJDFHJGgkdgfsakagjASGHDJSt";
int fontSize = 98;
FontMetrics metrics;
do {
fontSize -= 2;
g.setFont(g.getFont().deriveFont((float) fontSize));
metrics = g.getFontMetrics(g.getFont());
} while (metrics.stringWidth(text) > rectangle.width);
System.out.println("Font Size: " fontSize);
drawCenteredString(g, text, rectangle, g.getFont());
g.dispose();
ImageIO.write(image, "png", new File("output.png"));
}
public static void drawCenteredString(Graphics g, String text, Rectangle rect, Font font) {
FontMetrics metrics = g.getFontMetrics(font);
int x = rect.x (rect.width - metrics.stringWidth(text)) / 2;
int y = rect.y ((rect.height - metrics.getHeight()) / 2) metrics.getAscent();
g.setFont(font);
g.drawString(text, x, y);
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/317167.html
上一篇:去除android圖示的綠色背景
