import javax.media.jai.JAI;
import javax.media.jai.iterator.RandomIter;
import javax.media.jai.iterator.RandomIterFactory;
import javax.media.jai.iterator.WritableRandomIter;
import javax.imageio.ImageIO;
import javax.imageio.ImageWriteParam;
import javax.imageio.IIOImage;
import javax.imageio.ImageWriter;
import javax.imageio.stream.ImageOutputStream;
import java.awt.image.BufferedImage;
import java.awt.image.DataBufferByte;
import java.awt.image.DataBufferInt;
import java.awt.image.PixelGrabber;
import java.awt.image.Raster;
import java.io.File;
File imageFile = new File("image.jpg");
BufferedImage image = ImageIO.read(imageFile);
BufferedImage resizedImage = new BufferedImage(newWidth, newHeight, image.getType());
resizedImage.getGraphics().drawImage(image, 0, 0, newWidth, newHeight, null);
OpImageFilter filter = new OpImageFilter(new float[]{0.1f, 0.1f, 0.1f, 0.1f, 0.3f, 0.1f, 0.1f, 0.1f, 0.1f});
ParameterBlock pb = new ParameterBlock();
pb.addSource(image);
pb.add(filter);
RenderingHints hints = new RenderingHints(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
RenderedOp result = JAI.create("convolve", pb, hints);
BufferedImage filteredImage = result.getAsBufferedImage();
String watermarkText = "My Watermark";
Graphics2D g2d = image.createGraphics();
g2d.setColor(Color.RED);
g2d.setFont(new Font("Arial", Font.BOLD, 20));
g2d.drawString(watermarkText, 10, 20);
g2d.dispose();
File outputImageFile = new File("output.jpg");
ImageIO.write(filteredImage, "JPEG", outputImageFile);
image.flush();
filteredImage.flush();