Java :Graphics2D 图片设置圆角

本文介绍了如何使用Java中的Slf4j和ImageIO库读取本地和网络图片,对图片进行设置圆角操作,并将处理后的图片保存到本地。方法包括设置图片圆角、裁剪圆角以及图像尺寸的获取。
摘要由CSDN通过智能技术生成
@Slf4j
public class BaseTest {

	public static void main(String[] args) throws IOException {
		// 指定要读取的图片路径
		String imagePath = "path/to/your/image.jpg";
		// 创建 BufferedImage 对象
		File file = new File(imagePath);
		BufferedImage bufferedImage = ImageIO.read(file);
		// 读取远程图片
		String url = "https://xx/I0JBQkFCMA==/dissolve/7";
		BufferedImage avatarImage = ImageIO.read(new URL(url));

		// 获取图片的宽度和高度
		int width = bufferedImage.getWidth();
		int height = bufferedImage.getHeight();
		System.out.println("图片尺寸:" + width + " x " + height);
		// 设置圆角
		BufferedImage bufferedImageWithRadius = setRadius(bufferedImage);
		// 保存图片到本地文件(可选)
		String outputFilePath = "output/image.png";
		File outputFile = new File(outputFilePath);
		ImageIO.write(bufferedImageWithRadius, "PNG", outputFile);
		System.out.println("已成功保存图片到:" + outputFilePath);
	}

	/**
	 * 图片设置圆角
	 * @param srcImage
	 * @return
	 * @throws
	 */
	public static BufferedImage setRadius(BufferedImage srcImage) {
		int radius = (srcImage.getWidth() + srcImage.getHeight()) / 6;
		return setRadius(srcImage, radius, 2, 5);
	}

	/**
	 * 图片设置圆角
	 * @param srcImage
	 * @param radius
	 * @param border
	 * @param padding
	 * @return
	 * @throws
	 */
	public static BufferedImage setRadius(BufferedImage srcImage, int radius, int border, int padding){
		int width = srcImage.getWidth();
		int height = srcImage.getHeight();
		int canvasWidth = width + padding * 2;
		int canvasHeight = height + padding * 2;

		BufferedImage image = new BufferedImage(canvasWidth, canvasHeight, BufferedImage.TYPE_INT_ARGB);
		Graphics2D gs = image.createGraphics();
		gs.setComposite(AlphaComposite.Src);
		gs.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
		gs.setColor(Color.WHITE);
		gs.fill(new RoundRectangle2D.Float(0, 0, canvasWidth, canvasHeight, radius, radius));
		gs.setComposite(AlphaComposite.SrcAtop);
		gs.drawImage(setClip(srcImage, radius), padding, padding, null);
		if(border !=0){
			gs.setColor(Color.GRAY);
			gs.setStroke(new BasicStroke(border));
			gs.drawRoundRect(padding, padding, canvasWidth - 2 * padding, canvasHeight - 2 * padding, radius, radius);
		}
		gs.dispose();
		return image;
	}

	/**
	 * 图片切圆角
	 * @param srcImage
	 * @param radius
	 * @return
	 */
	public static BufferedImage setClip(BufferedImage srcImage, int radius){
		int width = srcImage.getWidth();
		int height = srcImage.getHeight();
		BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
		Graphics2D gs = image.createGraphics();

		gs.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
		gs.setClip(new RoundRectangle2D.Double(0, 0, width, height, radius, radius));
		gs.drawImage(srcImage, 0, 0, null);
		gs.dispose();
		return image;
	}

}

  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值