1

I have a buffered image from byte array. How do I make the image into a circle? Crop? I don't want a circle, I want the orginal image to become circle shape and display

 def bufferedImage = imgSvc.convertByteArrayToBufferedImage(crop.image)
user903772
  • 1,554
  • 5
  • 32
  • 55
  • I won't post this as an answer, seeing as it might not be the best solution, but using the radius as a measurement for Pythagoras and copying the pixel images to another image for all in range of the radius could work, it might be sloppy. You would have to use a BufferedType.TYPE_ARGB. To include alpha for transparency of course. –  Feb 06 '13 at 16:38

4 Answers4

4

If bufferedImage is squared, then with this code :

int width = bufferedImage.getWidth();
BufferedImage circleBuffer = new BufferedImage(width, width, BufferedImage.TYPE_INT_ARGB);
Graphics2D g2 = circleBuffer.createGraphics();
g2.setClip(new Ellipse2D.Float(0, 0, width, width));
g2.drawImage(bufferedImage, 0, 0, width, width, null);

you get a circular cropped image in circleBuffer

johanvs
  • 4,273
  • 3
  • 24
  • 26
1

this can help

    g.setClip(new Ellipse2D.Float(x, y, w, h));
    g.drawImage(yourBufferedImage, x, y, w, h, null);
Rahul
  • 289
  • 2
  • 7
0

You can use setClip() method of the Graphics class to restrict the drawing area of a graphics context to a specific region. The drawback of this is that this clipping will not be anti-aliased.

There are some more advanced tricks to achieve a better-looking result, see the answers to the following questions:

Drawing a part of an image (Java)

How to make a rounded corner image in Java

Community
  • 1
  • 1
lbalazscs
  • 17,474
  • 7
  • 42
  • 50
0
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.geom.Ellipse2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

public class ImageCircle {
    static Image img;
    static String imgFile =
            "yourFileName.jpg";
    public static void main(String[] args) {
        try {
            img = ImageIO.read(new File(imgFile));
        } catch (IOException fne) {
            fne.printStackTrace();
        }
        int width = img.getWidth(null);
        int height = img.getHeight(null);

        BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
        Graphics2D g2 = bi.createGraphics();

        g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
                RenderingHints.VALUE_ANTIALIAS_ON);
        int circleDiameter = Math.min(width,height);
        Ellipse2D.Double circle = new Ellipse2D.Double(0,0,circleDiameter,circleDiameter);
        g2.setClip(circle);
        g2.drawImage(img,0,0,null);
        try {
            ImageIO.write(bi, "PNG", new File("yourFileName.png"));
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
}
Jan
  • 302
  • 3
  • 5