在 Java 中按多边形区域裁剪图像
Crop image by polygon area in Java
通过使用 Canvas 和 JS,我可以绘制这样的形状并具有每个点的 x、y:
那个区域可以选择4个以上的点,看这个link有个思路
我需要使用点来保存和裁剪所选区域的图像。我不能使用 BufferedImage
,因为它只是矩形。我可以使用 java 中的哪个库?
好的,那么从...开始...
我用过...
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
的影响,您可以改用 "soft clipping",这更复杂,但会产生更好的结果.有关详细信息,请参阅 and this exmaple
通过使用 Canvas 和 JS,我可以绘制这样的形状并具有每个点的 x、y:
那个区域可以选择4个以上的点,看这个link有个思路
我需要使用点来保存和裁剪所选区域的图像。我不能使用 BufferedImage
,因为它只是矩形。我可以使用 java 中的哪个库?
好的,那么从...开始...
我用过...
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
的影响,您可以改用 "soft clipping",这更复杂,但会产生更好的结果.有关详细信息,请参阅