Я предлагаю этот метод, который принимает изображение и производит изображение и сохраняет изображения IO вне:
Edit: я, наконец, удалось сделать Java2D мягкой клип графики с помощью Java 2D Trickery: Soft Clipping Крис Кэмпбелл , К сожалению, это не то, что Java2D поддерживает из коробки с RenderhingHint
.
public static BufferedImage makeRoundedCorner(BufferedImage image, int cornerRadius) {
int w = image.getWidth();
int h = image.getHeight();
BufferedImage output = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);
Graphics2D g2 = output.createGraphics();
// This is what we want, but it only does hard-clipping, i.e. aliasing
// g2.setClip(new RoundRectangle2D ...)
// so instead fake soft-clipping by first drawing the desired clip shape
// in fully opaque white with antialiasing enabled...
g2.setComposite(AlphaComposite.Src);
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g2.setColor(Color.WHITE);
g2.fill(new RoundRectangle2D.Float(0, 0, w, h, cornerRadius, cornerRadius));
// ... then compositing the image on top,
// using the white shape from above as alpha source
g2.setComposite(AlphaComposite.SrcAtop);
g2.drawImage(image, 0, 0, null);
g2.dispose();
return output;
}
Вот тест драйвера:
public static void main(String[] args) throws IOException {
BufferedImage icon = ImageIO.read(new File("icon.png"));
BufferedImage rounded = makeRoundedCorner(icon, 20);
ImageIO.write(rounded, "png", new File("icon.rounded.png"));
}
Это то, что вход/выход выше метода выглядит следующим образом:
Вход:
Гадкий, зубчатый выход с setClip()
:
Ницца, гладкий выход с композитным трюка:
Крупным планом углов на сером фоне (setClip()
, очевидно, слева, композитный справа):
Вы должны быть более конкретными в отношении закругленных углов: Прозрачный или заполненный цветом фона (первый, вероятно, заставит PNG в качестве выходного формата)? Фиксированный или переменный радиус, если последний относительно чего? –
Я предполагаю, что на это был дан ответ: http://stackoverflow.com/questions/1826665/round-corners-on-images-using-java-and-jai – Kris
В этом вопросе отсутствует много необходимой детали, что затрудняет ответ. –