是否有将任何图像转换为 150x150 像素-java 的圆的函数?

Is there a function that converts any image into a circle of 150x150 pixels-java?

我需要一个 function/method 可以将导入的(.png 格式)图像塑造(裁剪和调整大小)为一个精确的 150x150 像素的圆圈,并且它应该保持透明度。我在互联网上搜索过,我也有自己的代码,但我认为它完全没用。我需要这个函数用于我用来制作社交媒体应用程序数据库的 GUI 的代码。

private ImageIcon logo = new ImageIcon(getClass().getResource("/test/test200x200.png"));
toCircle(logo);

我需要以下功能的代码:

public ImageIcon toCircle(ImageIcon icon)
{
    //code
    return icon;
 }

这个函数应该转换这张图片:

为此:

  • 新建透明图片
  • 从图像中获取一个 Graphics 对象。
  • 为图形对象设置剪辑。
  • 绘制 PNG 格式图像。

另见 this answer 使用裁剪区域。

对于此用例实施起来可能更直接的替代方法是:

  • 创建透明 BufferedImage 图标大小
  • 从图像创建Graphics2D,设置抗锯齿提示
  • 填充一个与背景圆圈大小相同的圆圈
  • 使用 AlphaComposite.SrcIn
  • 在圆圈顶部绘制图像

类似于:

public Icon toCircle(ImageIcon logo) {
    BufferedImage image = new BufferedImage(150, 150); // Assuming logo 150x150
    Graphics2D g = image.createGraphics();
    g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
    g.fillOval(1, 1, 148, 148); // Leaving some room for antialiasing if needed
    g.setComposite(AlphaComposite.SrcIn);
    g.drawImage(logo.getImage(), 0, 0, null);
    g.dispose();

    return new ImageIcon(image);
}