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

时间:2017-02-26 10:28:40

标签: java swing resize png crop

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

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

我需要以下功能的代码:

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

此功能应转换此图片:

对此:

2 个答案:

答案 0 :(得分:3)

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

另请参阅使用剪裁区域的this answer

答案 1 :(得分:1)

另一种可能更直接地为此用例实现的方法是:

  • 创建一个与图标大小相同的透明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);
}