Как редактировать jpg-образ через Java?
Я загрузил jpg-образ, в котором я хочу рисовать буквы и круги, учитывая координату x, y.
Я пытаюсь вычислить paintIcon ImageIcon класс
public void paintIcon(Component c,
Graphics g,
int x,
int y)
Позволяет ли этот метод редактировать jpg-изображения так, как я хочу? Каковы предпосылки быть параметрами c и Graphics g? Что бы я добавил к его телу, чтобы рисовать круги или буквы?
Я работаю над Netbeans 6.5, у меня есть что-то встроенное для этой задачи (вместо ImageIcon)?
Ответы
Ответ 1
Метод pure-Java должен использовать ImageIO
для load изображение как BufferedImage
. Затем вы можете вызвать createGraphics()
, чтобы получить объект Graphics2D
; вы можете нарисовать все, что захотите, на изображение.
Вы можете использовать ImageIcon
, встроенный в JLabel
для отображения, и вы можете добавить MouseListener
и/или a MouseMotionListener
в JLabel
, если вы пытаетесь разрешить пользователю для редактирования изображения.
Ответ 2
Манипулирование изображениями на Java может быть достигнуто с помощью Graphics
или Graphics2D
.
Загрузка изображений, таких как JPEG и PNG, может выполняться с помощью класса ImageIO
. Метод ImageIO.read
принимает File
для чтения и возвращает BufferedImage
, который можно использовать для управления изображением через его Graphics2D
(или Graphics
, его суперкласс).
Контекст Graphics2D
может использоваться для выполнения многих задач рисования изображений и манипуляции. Для получения информации и примеров Trail: 2D Graphics Учебники Java будет очень хорошим началом.
Ниже приведен упрощенный пример (непроверенный), который откроет файл 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 и нарисует овал и линию. Как только эти операции выполняются для управления изображением, BufferedImage
можно обрабатывать, как и любой другой Image
, поскольку он является подклассом Image
.
Например, создав ImageIcon
с помощью BufferedImage
, можно вставить изображение в JButton
или JLabel
:
JLabel l = new JLabel("Label with image", new ImageIcon(img));
JButton b = new JButton("Button with image", new ImageIcon(img));
JLabel
и JButton
имеют конструкторы, которые принимают ImageIcon
, поэтому это может быть простой способ добавить изображение в компонент Swing.
Ответ 3
Используйте библиотеку, чтобы сделать именно это. Один из них, который вы можете попробовать, - JMagick.
Ответ 4
Я использовал библиотеку Java Advanced Imaging (http://java.sun.com/products/java-media/jai/forDevelopers/jaifaq.html), но вы также можете посмотреть ImageJ (http://rsbweb.nih.gov/ij/index.html)
Ответ 5
Я предполагаю, что вы можете использовать этот метод для наложения элементов, которые вам нужны, каждый раз, когда изображение рисуется в пользовательском интерфейсе (это может происходить много раз, поскольку вы не рисуете сами данные изображения), но может быть подходящим для ваших целей (и выгодно, если наложение изменяется с течением времени).
Что-то вроде:
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 намного лучше, если вы хотите изменить данные изображения.