在 Java 中按多边形区域裁剪图像 [英] Crop image by polygon area in Java
问题描述
通过使用 Canvas 和 JS,我可以绘制这样的形状并获得每个点的 x,y:
Tha 区域可以通过 4 个以上的点来选择,看看这个
我用过...
BufferedImage source = ImageIO.read(new File("Example.jpg"));GeneralPath 剪辑 = new GeneralPath();剪辑.moveTo(65, 123);clip.lineTo(241, 178);clip.lineTo(268, 405);clip.lineTo(145, 512);剪辑.closePath();矩形边界 = 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(剪辑);g2d.translate(-65, -123);g2d.drawImage(source, 0, 0, null);g2d.dispose();ImageIO.write(img, "png", new File("Clipped.png"));
生成...
现在,图像是矩形的,这就是它的工作方式
现在,setClip
相当粗糙,不受任何RenderingHints
的影响,您可以改用软剪辑",这更复杂,但会生成更好的结果.请参阅此示例和这个例子了解更多详情
by using Canvas and JS I can draw a shape like this and have the x,y of each point :
Tha area can be choosen by more than 4 points, look at this link to have an idea.
I need to save and crop the image of the selected area by using the points. I can not use BufferedImage
as it is just rectangular. Which lib in java I can use?
Okay, so starting with...
I used...
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"));
to generate...
Now, the image is rectangular, that's just the way it works
Now, setClip
is quite rough and isn't effect by any RenderingHints
, you could make use of "soft clipping" instead, which is more involved, but generates a nicer results. See this example and this exmaple for more details
这篇关于在 Java 中按多边形区域裁剪图像的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!