Skip to content
- package image;
-
- import java.awt.AlphaComposite;
- import java.awt.Color;
- import java.awt.Font;
- import java.awt.Graphics;
- import java.awt.Graphics2D;
- import java.awt.Image;
- import java.awt.image.BufferedImage;
- import java.awt.image.ColorModel;
- import java.awt.image.PixelGrabber;
- import java.io.File;
- import java.io.FileOutputStream;
-
- import javax.imageio.ImageIO;
-
- import com.sun.image.codec.jpeg.JPEGCodec;
- import com.sun.image.codec.jpeg.JPEGImageEncoder;
-
- public class WaterMark {
-
-
-
-
-
-
-
-
-
-
-
- private int[] getPixArray(Image imageSrc, int startX, int startY,
- int w, int h) {
- int[] pix = new int[(w – startX) * (h – startY)];
-
-
- PixelGrabber pg = null;
- try {
- pg = new PixelGrabber(imageSrc, startX, startY, w-startX, h-startY, pix, 0, w);
- if (pg.grabPixels() != true) {
- try {
- throw new java.awt.AWTException(“pg error” + pg.status());
- } catch (Exception eq) {
- eq.printStackTrace();
- }
- }
- } catch (Exception ex) {
- ex.printStackTrace();
- }
- return pix;
- }
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- private final void pressImage(String lightnessWaterImg,
- String darknessWaterImg, String targetImg, int startX, int startY,
- int x, int y, float alpha, float averageGray) {
- try {
-
- if (lightnessWaterImg == null || lightnessWaterImg == “”
- || targetImg == null || targetImg == “”) {
- throw new Exception(“亮水印或者源图片的地址不能为空”);
- }
-
- if (averageGray>255||averageGray<0) {
- averageGray = 128;
- }
-
-
-
- File _file = new File(targetImg);
-
- BufferedImage src = ImageIO.read(_file);
-
- int width = src.getWidth(null);
- int height = src.getHeight(null);
-
- BufferedImage image = new BufferedImage(width, height,
- BufferedImage.TYPE_INT_RGB);
- Graphics2D graphics = image.createGraphics();
-
- graphics.drawImage(src, 0, 0, width, height, null);
-
- graphics.setComposite(AlphaComposite.getInstance(
- AlphaComposite.SRC_ATOP, alpha));
-
-
-
- int[] pixels = getPixArray(src, startX, startY, x, y);
-
-
- float average = getAverageGrap(x-startX,y-startY,pixels);
-
-
- System.out.println(average);
-
-
-
- File water;
- BufferedImage bufferwater;
-
-
- if (darknessWaterImg == null||average>=averageGray) {
-
- water = new File(darknessWaterImg);
- }else{
-
- water = new File(lightnessWaterImg);
- }
-
- bufferwater = ImageIO.read(water);
-
- graphics.drawImage(bufferwater, startX, startY, x, y,
- null);
-
- graphics.dispose();
- FileOutputStream out = new FileOutputStream(targetImg);
- JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
-
- encoder.encode(image);
- out.close();
-
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
-
-
-
-
-
-
-
-
- private float getAverageGrap(int width,int height,int[] pixels){
-
- ColorModel colorModel = ColorModel.getRGBdefault();
- int i = 0;
- int j = 0;
- int k = 0;
- int r = 0;
- int g = 0;
- int b = 0;
- int gray = 0;
- float average = 0;
- for (i = 0; i < height; i++) {
- for (j = 0; j < width; j++) {
-
- k = i * width + j;
- r = colorModel.getRed(pixels[k]);
- g = colorModel.getGreen(pixels[k]);
- b = colorModel.getBlue(pixels[k]);
-
-
- gray = (r * 38 + g * 75 + b * 15) >> 7;
-
- average = average + gray;
- }
- }
-
- average = average / ((i – 1) * (j – 1));
- return average;
- }
- public static void main(String[] args) {
- WaterMark waterMark = new WaterMark();
-
- waterMark.pressImage(“F:\\Mine\\My Pictures\\素材\\w2.png”, “F:\\Mine\\My Pictures\\素材\\w1.png”,
- “F:\\Mine\\My Pictures\\素材\\2.jpg”, 520, 500, 900, 800, 0.5f, 50);
- System.out.print(“添加成功”);
- }
-
- }