如何通过Java编辑jpg图像?

如何通过Java编辑jpg图像?,java,image,netbeans,Java,Image,Netbeans,我已经加载了一个jpg图像,我想在其中画字母和圆圈,给定一个x,y坐标 我一直在努力找出这个班的画师 这个方法允许我以我想要的方式编辑jpg图像吗?组件c和图形g参数支持什么?我应该向它的主体添加什么来绘制圆圈或字母 我正在开发Netbeans 6.5,我是否为这项任务内置了任何东西(而不是ImageIcon)?使用一个库来完成这项工作。您可以尝试的一种方法是。我使用了Java高级图像库(),但您也可以查看ImageJ()纯Java的方法是将图像作为一个对象使用。然后可以调用以获取Graphic

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

我一直在努力找出这个班的画师

这个方法允许我以我想要的方式编辑jpg图像吗?组件c和图形g参数支持什么?我应该向它的主体添加什么来绘制圆圈或字母


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

使用一个库来完成这项工作。您可以尝试的一种方法是。

我使用了Java高级图像库(),但您也可以查看ImageJ()

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


您可以使用嵌入
JLabel
中的
ImageIcon
进行显示,如果您试图允许用户编辑图像,则可以在
JLabel
中添加
MouseListener
和/或
MouseMotionListener

I imagen每次在UI中绘制图像时,都可以使用此方法覆盖所需的元素(这会发生很多次,因为您不是在自己绘制图像数据),但可能适合您的目的(如果叠加随时间而变化,这将是有利的)

比如:

new ImageIcon("someUrl.png"){
    public void paintIcon(Component c, Graphics g, int x, int y) {
        super(c, g, x, y);
        g.translate(x, y);

        g.drawOval(0, 0, 10, 10);
        ...

        g.translate(-x, -y);
    }
};

话虽如此,如果您想修改图像数据,mmyers的答案要好得多。

在Java中操作图像可以通过使用或上下文来实现

可以使用类来加载JPEG和PNG等图像。
ImageIO.read
方法接收要读入的
文件并返回一个,该文件可用于通过其(或其超类)上下文操纵图像

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

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

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

例如,通过使用
buffereImage
创建,可以将图像嵌入或:

JLabel
JButton
都有接受
ImageIcon
的构造函数,因此这是向Swing组件添加图像的简单方法

new ImageIcon("someUrl.png"){
    public void paintIcon(Component c, Graphics g, int x, int y) {
        super(c, g, x, y);
        g.translate(x, y);

        g.drawOval(0, 0, 10, 10);
        ...

        g.translate(-x, -y);
    }
};
// 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();
JLabel l = new JLabel("Label with image", new ImageIcon(img));
JButton b = new JButton("Button with image", new ImageIcon(img));