缓冲图像成圆形

问题描述 投票:0回答:4

我有一个来自字节数组的缓冲图像。怎么把图片做成圆形?庄稼?我不要圆形,我要原图变成圆形显示

 def bufferedImage = imgSvc.convertByteArrayToBufferedImage(crop.image)
java grails image-processing image-manipulation
4个回答
4
投票

如果

bufferedImage
是平方的,那么用这个代码:

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);

你在

circleBuffer

中得到一个圆形裁剪图像

1
投票

这可以帮助

    g.setClip(new Ellipse2D.Float(x, y, w, h));
    g.drawImage(yourBufferedImage, x, y, w, h, null);

0
投票

您可以使用 Graphics 类的 setClip() 方法将图形上下文的绘图区域限制在特定区域。这样做的缺点是这种剪裁不会被消除锯齿。

还有一些更高级的技巧来获得更好看的结果,请参阅以下问题的答案:

绘制图像的一部分(Java)

如何用Java制作圆角图片


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);
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.