在Java中按多边形区域裁剪图像

时间:2017-04-21 11:04:22

标签: java canvas crop

通过使用Canvas和JS我可以绘制这样的形状并且每个点都有x,y: enter image description here

Tha区域可以选择超过4个点,请查看此link以获得一个想法。

我需要使用这些点保存并裁剪所选区域的图像。我不能使用 Dim lst As List(Of KeyValuePair(Of String, Object)) = fvPairs.ToList Dim serializer As New XmlSerializer(lst.GetType) Dim stringWriter As StringWriter = New StringWriter() serializer.Serialize(stringWriter, lst) ,因为它只是矩形。我可以使用java中的哪个lib?

1 个答案:

答案 0 :(得分:2)

好的,从...开始......

Your original image

我用过......

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

生成......

Clipped

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

现在,setClip并不是很粗糙,并且不受任何RenderingHints的影响,你可以使用"软剪辑"相反,这涉及更多,但产生更好的结果。有关详细信息,请参阅this examplethis exmaple