Imagens arredondadas

Alguém sabe como arredondar uma imagem em java?

Estou fazendo um sistema de cadastro, e quando o usuário inserir a foto dele eu quero que automaticamente ela seja arredondada. Alguém sabe como fazer isso?

Ve se esse link te ajuda, não testei…

Rouded Corner é para fazer os cantos arredondados.
Mas para fazer uma imagem redonda é só usar uma área elíptica para o clipping da imagem.

O método abaixo dá conta do recado:

public static BufferedImage arredondar(BufferedImage imagemRetangular) {
    int largura = imagemRetangular.getWidth();
    int altura = imagemRetangular.getHeight();
    int raio = largura / (double) altura > 0 ? altura : largura;
    BufferedImage imagemRedonda = new BufferedImage(largura, altura, BufferedImage.TYPE_INT_ARGB);
    Graphics2D graphics = imagemRedonda.createGraphics();
    graphics.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
    graphics.setClip(new Area(new Ellipse2D.Double(0, 0, raio, raio)));
    graphics.drawImage(imagemRetangular, 0, 0, null);
    graphics.dispose();
    return imagemRedonda;
}

Exemplo de uso:

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.geom.Area;
import java.awt.geom.Ellipse2D;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.InputStream;

import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingConstants;
import javax.swing.UIManager;

public class ExemploImagemRedonda {

    public static void main(String[] args) {
        try {
            UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
            ExemploImagemRedonda programa = new ExemploImagemRedonda();
            programa.executar();
        } catch (Throwable t) {
            t.printStackTrace();
        }
    }

    public static BufferedImage arredondar(BufferedImage imagemRetangular) {
        int largura = imagemRetangular.getWidth();
        int altura = imagemRetangular.getHeight();
        int raio = largura / (double) altura > 0 ? altura : largura;
        BufferedImage imagemRedonda = new BufferedImage(largura, altura, BufferedImage.TYPE_INT_ARGB);
        Graphics2D graphics = imagemRedonda.createGraphics();
        graphics.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
        graphics.setClip(new Area(new Ellipse2D.Double(0, 0, raio, raio)));
        graphics.drawImage(imagemRetangular, 0, 0, null);
        graphics.dispose();
        return imagemRedonda;
    }

    public void executar() throws IOException {
        InputStream arquivo = getClass().getResourceAsStream("/imagem.jpg");
        BufferedImage imagemRetangular = ImageIO.read(arquivo);
        BufferedImage imagemRedonda = arredondar(imagemRetangular);
        apresentarImagem(imagemRedonda);
    }

    private void apresentarImagem(BufferedImage imagem) {
        JFrame janela = new JFrame("Exemplo Imagem Redonda");
        janela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        janela.setSize(800, 600);
        Container container = janela.getContentPane();
        ImageIcon icone = new ImageIcon(imagem);
        JLabel labelImagem = new JLabel(icone, SwingConstants.CENTER);
        container.add(labelImagem, BorderLayout.CENTER);
        janela.setVisible(true);
    }
}
2 curtidas