package filter.filters; import java.awt.Color; import java.awt.Font; import java.awt.FontMetrics; import java.awt.Graphics2D; import java.awt.RenderingHints; import java.awt.image.BufferedImage; import filter.base.ImageFilter; public class WatermarkFilter extends ImageFilter { public static enum TextPosition{TOP_LEFT, TOP_RIGHT, BOTTOM_LEFT, BOTTOM_RIGHT; public int getX(int width, int strWidth) { switch (this) { case TOP_LEFT: case BOTTOM_LEFT: return 0; case TOP_RIGHT: case BOTTOM_RIGHT: return width - strWidth; } return 0; } public int getY(int height, int strHeight) { switch (this) { case TOP_LEFT: case TOP_RIGHT: return 0; case BOTTOM_LEFT: case BOTTOM_RIGHT: return height - strHeight; } return 0; } } public String text = "kussmaul.net/gifkr.html"; public Font font = new Font(Font.MONOSPACED, Font.PLAIN, 12); public Color fontColor = Color.white; public Color backgroundColor = Color.black; public double fontSize = 12; public TextPosition position = TextPosition.TOP_LEFT; @Override protected boolean randomControls() { return false; } @Override public BufferedImage apply(BufferedImage img) { final int minSize = 2; //final int maxSize = 2*img.getWidth(); float fontS = (float) Math.max(fontSize, minSize); Graphics2D g = (Graphics2D) img.getGraphics(); g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON); g.setFont(font.deriveFont(fontS)); FontMetrics fm = g.getFontMetrics(); int strWidth = fm.stringWidth(text), strHeight = fm.getHeight(); g.setColor(backgroundColor); g.fillRect(position.getX(img.getWidth(), strWidth), position.getY(img.getHeight(), strHeight), strWidth, strHeight); g.setColor(fontColor); g.drawString(text, position.getX(img.getWidth(), strWidth), position.getY(img.getHeight(), strHeight)-fm.getDescent()+strHeight); return img; } @Override public String getCategory() { return "Utilities"; } }