如何通过Java编辑jpg图像?

2022-09-03 09:18:44

我已经加载了一个jpg图像,我想在其中绘制字母和圆圈,给定一个x,y坐标。

我一直在试图弄清楚ImageIcon类的油漆图标

public void paintIcon(Component c,
                      Graphics g,
                      int x,
                      int y)

此方法是否允许我以我想要的方式编辑jpg图像?什么是组件 c 和图形 g 参数?我会在它的身体上添加什么来画圆圈或字母?

我正在开发 Netbeans 6.5,我是否为这个任务内置了任何内容(而不是 ImageIcon)?


答案 1

纯 Java 的方法是使用 ImageIO 将图像作为 BufferedImage 加载然后你可以调用 createGraphics() 来获取一个对象;然后,您可以在图像上绘制任何您想要的内容。Graphics2D

您可以使用 嵌入在 中执行显示,如果您尝试允许用户编辑图像,则可以将 和/或 a 添加到 中。ImageIconJLabelMouseListenerMouseMotionListenerJLabel


答案 2

通过使用图形或图形 2D 上下文,可以在 Java 中操作图像。

可以使用 ImageIO 类执行加载 JPEG 和 PNG 等图像。该方法接收要读取的 a 并返回一个 BufferedImage,该图像可用于通过其 Graphics2D(或图形,其超类)上下文操作图像。ImageIO.readFile

上下文可用于执行许多图像绘制和操作任务。对于信息和示例,Java教程Trail:2D图形将是一个非常好的开始。Graphics2D

下面是一个简化的示例(未经测试),它将打开一个JPEG文件,并绘制一些圆圈和线条(忽略例外):

// Open a JPEG file, load into a BufferedImage.
BufferedImage img = ImageIO.read(new File("image.jpg"));

// Obtain the Graphics2D context associated with the BufferedImage.
Graphics2D g = img.createGraphics();

// Draw on the BufferedImage via the graphics context.
int x = 10;
int y = 10;
int width = 10;
int height = 10;
g.drawOval(x, y, width, height);

g.drawLine(0, 0, 50, 50);

// Clean up -- dispose the graphics context that was created.
g.dispose();

上面的代码将打开一个JPEG图像,并绘制一个椭圆形和一条线。一旦执行这些操作来操作图像,就可以像任何其他一样处理 ,因为它是 的子类。BufferedImageImageImage

例如,通过使用 创建一个 ImageIcon,可以将图像嵌入到 JButtonJLabel 中BufferedImage

JLabel l = new JLabel("Label with image", new ImageIcon(img));
JButton b = new JButton("Button with image", new ImageIcon(img));

和 都有构造函数,这些构造函数采用 ,因此这可以是将图像添加到 Swing 组件的简单方法。JLabelJButtonImageIcon


推荐