gpt4 book ai didi

Java Graphics2D drawString 是 "blacking out"源图像

转载 作者:行者123 更新时间:2023-12-02 01:20:08 24 4
gpt4 key购买 nike

这里是 Java 8 和 Mac OS (High Sierra)。我有以下类 TextOverlayer ,它从文件系统读取图像,并需要将一些红色文本覆盖到图像上,然后将该“覆盖”图像保存为文件系统上的不同文件:

public class TextOverlayer implements ImageObserver {

public static void main(String[] args) throws IOException {

// Instantiate a TextOverlayer and read a source/input image from disk
TextOverlayer textOverlayer = new TextOverlayer();
BufferedImage bufferedImage = ImageIO.read(Paths.get("/User/myuser/pix/sourceImage.jpg").toFile());

// Lay some text over the image at specific coordinates
BufferedImage drawn = textOverlayer.drawText(bufferedImage, "Some text");

// Write the overlayed image to disk
File outputfile = new File("/User/myuser/pix/targetImage.jpg");
ImageIO.write(drawn, "jpg", outputfile);

}

private BufferedImage drawText(BufferedImage old, String text) {

int w = old.getWidth() / 3;
int h = old.getHeight() / 3;
BufferedImage img = new BufferedImage(
w, h, BufferedImage.TYPE_INT_ARGB);
Graphics2D g2d = img.createGraphics();
g2d.drawImage(old, 0, 0, w, h, this);
g2d.setPaint(Color.red);
g2d.setFont(new Font("Serif", Font.BOLD, 20));
FontMetrics fm = g2d.getFontMetrics();
int x = img.getWidth() - fm.stringWidth(text) - 5;
int y = fm.getHeight();
g2d.drawString(text, x, y);
g2d.dispose();

return img;

}

@Override
public boolean imageUpdate(Image img, int infoflags, int x, int y, int width, int height) {
return false;
}

}

运行时,不会抛出任何错误,并且 targetImage.jpg 已成功写入磁盘,只不过它只是一个小黑盒的图像。我希望 targetImage.jpgsourceImage.jpg 完全相同,只是在所需的坐标(图像内)添加了一些额外的文本。

有什么想法我会出错吗?

最佳答案

您不需要 ImageObserver,并且您可能无法使用附带的写入器将带有 Alpha channel 的图像写入 JPEG 文件。

这有效:

public class TextOverlayer {

public static void main(String[] args) throws IOException {

// Instantiate a TextOverlayer and read a source/input image from disk
TextOverlayer textOverlayer = new TextOverlayer();
BufferedImage bufferedImage = ImageIO.read(Paths.get("/User/myuser/pix/sourceImage.jpg").toFile());

// Lay some text over the image at specific coordinates
BufferedImage drawn = textOverlayer.drawText(bufferedImage, "Some text");

// Write the overlayed image to disk
File outputfile = new File("/User/myuser/pix/targetImage.jpg");
boolean result = ImageIO.write(drawn, "jpg", outputfile);
if (!result) {
System.out.println("FAILED");
}
}

private BufferedImage drawText(BufferedImage old, String text) {

int w = old.getWidth();
int h = old.getHeight();
BufferedImage img = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);
Graphics2D g2d = img.createGraphics();
g2d.drawImage(old, 0, 0, w, h, null);
g2d.setPaint(Color.red);
g2d.setFont(new Font("Serif", Font.BOLD, 20));
FontMetrics fm = g2d.getFontMetrics();
int x = img.getWidth() - fm.stringWidth(text) - 5;
int y = fm.getHeight();
g2d.drawString(text, x, y);
g2d.dispose();

return img;

}
}

关于Java Graphics2D drawString 是 "blacking out"源图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57862766/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com