【问题标题】:Crop image by polygon area in Java在Java中按多边形区域裁剪图像
【发布时间】:2017-04-21 11:04:22
【问题描述】:

通过使用 Canvas 和 JS,我可以绘制这样的形状并获得每个点的 x,y :

可以选择超过4个点的区域,看看这个link有一个想法。

我需要使用点来保存和裁剪所选区域的图像。我不能使用BufferedImage,因为它只是矩形。我可以使用 java 中的哪个库?

【问题讨论】:

  • 好吧,图像总是会是矩形的,你可以使用点来生成形状并使用它们来生成剪切区域来绘制图像,但正如我所说,结果将始终是矩形图像,仅包含您选择的内容以及您决定使用的任何背景颜色

标签: java canvas crop


【解决方案1】:

好的,那么从...开始

我用过……

BufferedImage source = ImageIO.read(new File("Example.jpg"));
GeneralPath clip = new GeneralPath();
clip.moveTo(65, 123);
clip.lineTo(241, 178);
clip.lineTo(268, 405);
clip.lineTo(145, 512);
clip.closePath();

Rectangle bounds = clip.getBounds();
BufferedImage img = new BufferedImage(bounds.width, bounds.height, BufferedImage.TYPE_INT_ARGB);
Graphics2D g2d = img.createGraphics();
clip.transform(AffineTransform.getTranslateInstance(-65, -123));
g2d.setClip(clip);
g2d.translate(-65, -123);
g2d.drawImage(source, 0, 0, null);
g2d.dispose();

ImageIO.write(img, "png", new File("Clipped.png"));

生成...

现在,图像是矩形的,这就是它的工作方式

现在,setClip 相当粗糙,不受任何RenderingHints 的影响,您可以改用“软剪辑”,它涉及更多,但会产生更好的结果。请参阅this examplethis exmaple 了解更多详情

【讨论】:

  • 谢谢,但是如果我选择 5 或 6 点而不是 4 点,在这种情况下我不能使用“矩形”边界!
  • 看看这个,看看如果你选择超过 4 个点会发生什么:jqueryrain.com/?FahE34Ft
  • @Majico 您可以使用任意数量的点数,并且仍然使用getBounds,但您可能需要查看Rectangle#getMinX/YRectangle#getMaxX/Y
  • 感谢您的 complate 解决方案,它就像一个魅力! :)
猜你喜欢
  • 2013-04-04
  • 2011-11-10
  • 1970-01-01
  • 2023-03-20
  • 2014-08-03
  • 1970-01-01
  • 2019-01-31
  • 1970-01-01
相关资源
最近更新 更多