【问题标题】:Drawing text on image not working with Graphics2D在不使用 Graphics2D 的图像上绘制文本
【发布时间】:2021-01-31 18:00:20
【问题描述】:

我想在图像上写一些文字时遇到了一些问题。 正如我所看到的,可以使用以下代码完成:

package asd;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.net.URL;

import javax.imageio.ImageIO;

public class ImageAddingText {

    
    public static void main(String args[]) throws IOException {
        
        BufferedImage image = ImageIO.read(new File("C:\\Users\\Slobodan\\Desktop\\image2.png"));
        
        Font font = new Font("Arial", Font.BOLD, 20);
        
        Graphics g = image.getGraphics();
        g.setFont(font);
        g.setColor(Color.GREEN);
        g.drawString("Medium", 50, 50);
        System.out.println("Finished");
        System.out.println(image.getWidth());
    }
}

所以图像被加载到内存中,image.getGraphics() 创建 Graphics2D 对象,然后设置字体、颜色和绘制字符串。 但是在图像中没有任何反应,它仍然完全保持不变。 图像是黑白的,白色占据了大部分空间。我试图改变颜色,扩展图像,但似乎没有任何帮助。我期待我可以直接在图像上看到变化,我认为它应该以这种方式工作。在它运行和编译之后,根本没有错误消息。 我将 Java 8 与 Spring Boot 一起使用。 (虽然我只运行 Java)
有没有人知道那里可能是什么问题?

非常感谢您的阅读。

【问题讨论】:

  • 考虑将您的代码和您的问题压缩到为我们编译和运行的最小程序中,它向我们展示了您的问题,但除此之外,minimal reproducible example。请阅读该链接,因为它会确切地告诉您我的要求、如何创建以及为什么它可以帮助您和我们。
  • 你能解释一下为什么这还不够好吗?它编译并运行,但不起作用。它是运行所需的最少代码,可在此页面baeldung.com/java-add-text-to-image 的第 2.2 节中找到。文件内的路径是指图像位置。认为我已经阅读了您的评论..
  • 好的,这个怎么样:1)你知道错误或问题在哪里吗? 2)您如何或为什么知道您发布的代码中存在问题? 3)如果代码对我来说看起来“OK”,我怎么能猜出如何或在哪里修复它?也许其他人可以看到这个然后说,“啊哈,这是你的问题”,但对于我的生活,我不能。但无论如何,该链接应该已经告诉您这些信息,而且您可能真的应该阅读它。
  • 关于,"... 它是运行所需的最少代码" -- 没有 main 方法,没有导入,没有图像文件,也许它会运行你,但它肯定不会为其他任何人运行。同样,minimal reproducible example 链接将告诉您运行所需的最少代码是什么意思。
  • @HovercraftFullOfEels 我的意思是这是我的整个主要方法,其中没有其他代码。没有任何图像导入。图像位于桌面上,路径“C:\\Users\\Slobodan\\Desktop\\image2.png”是它在桌面上的位置。另外,我认为代码会读取图像,因为它正确显示了它的重量。现在,我不知道我应该如何更改代码来复制我的问题,因为主要问题是如何将文本写入图像,并找到了这个确切代码的几个示例以及它以前应该如何工作。

标签: java bufferedimage graphics2d drawstring


【解决方案1】:

再次,您的代码对我有用,使用在线图片:

import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.net.URL;

import javax.imageio.ImageIO;
import javax.swing.*;

public class ImageAddingText {

    
    public static void main(String args[]) throws IOException {
        String imgUrl = "https://media.glamour.com/photos/5a425fd3b6bcee68da9f86f8/16:9/w_2560%2Cc_limit/best-face-oil.png";
        
        // BufferedImage image = ImageIO.read(new File("C:\\Users\\Slobodan\\Desktop\\image2.png"));
        
        URL url = new URL(imgUrl);
        BufferedImage image = ImageIO.read(url);
        
        // display the original image
        Icon icon = new ImageIcon(image);
        JOptionPane.showMessageDialog(null, icon);            

        Font font = new Font("Arial", Font.BOLD, 20);            
        Graphics g = image.getGraphics();
        g.setFont(font);
        g.setColor(Color.GREEN);
        g.drawString("Medium", 50, 50);
        
        g.dispose(); // you should always dispose resources *you* create yourself

        // display the changed image
        icon = new ImageIcon(image);            
        JOptionPane.showMessageDialog(null, icon);      
        
        System.out.println("Finished");
        System.out.println(image.getWidth());
    }
}

【讨论】:

  • 谢谢你,你救了我的命!:) 我不知道那个 url 的事情..虽然我不知道我是否可以更改 url 中的确切图片,但我会的现在试试看,或者可以创建图标而不是图像和显示。非常感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 2018-07-23
  • 1970-01-01
  • 2012-01-30
  • 2016-11-04
  • 2018-12-31
  • 2017-07-07
  • 2013-04-29
相关资源
最近更新 更多