求教 关于java去除水印(模糊)(改错)
设想下是经过循环筛选出异常rgb值,然后通过修改异常像素点(将异常值换成全图像素点rgb的平均值)去掉水印
这个代码现在的情况是:将图片直接涂黑了 import有些多余了,作为新手不知道那些有用就能用的全用l
代码如下:
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import javax.imageio.ImageIO;
import javax.imageio.ImageWriter;
import javax.imageio.stream.ImageOutputStream;
import javax.net.ssl.HttpsURLConnection;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileFilter;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Scanner;
public class Shuiyin{
public static void main(String args[]) throws IOException{
int a=0;
int b=0;
int c=0;
int d=0;
int i;
int j;
int[] rgb = new int[3];
File file = new File("c:\\abc\\a.jpg");
BufferedImage bi=null;
try{
bi = ImageIO.read(file);
}catch(Exception e){
e.printStackTrace();
}
int width=bi.getWidth();
int height=bi.getHeight();
int minx=bi.getMinX();
int miny=bi.getMinY();
System.out.println("width="+width+",height="+height+".");
System.out.println("minx="+minx+",miniy="+miny+".");
BufferedImage bufImg = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
Graphics2D g = bufImg.createGraphics();
for(i=minx;i<width;i++){
for(j=miny;j<height;j++){
//System.out.print(bi.getRGB(i, j));
int pixel=bi.getRGB(i, j);
rgb[0] = (pixel & 0xff0000 ) >> 16 ;
rgb[1] = (pixel & 0xff00 ) >> 8 ;
rgb[2] = (pixel & 0xff );
a=a+rgb[0];
b=b+rgb[1];
c=c+rgb[2];
d=d+1;
}
}
a=a/d;
b=b/d;
c=c/d;
System.out.println("a="+a+"b="+b+"c="+c+"d="+d);
for( i=minx;i<width;i++){
for( j=miny;j<height;j++){
//System.out.print(bi.getRGB(jw, ih));
int pixel=bi.getRGB(i, j);
rgb[0] = (pixel & 0xff0000 ) >> 16 ;
rgb[1] = (pixel & 0xff00 ) >> 8 ;
rgb[2] = (pixel & 0xff );
if(rgb[0]==0&&rgb[1]==0||rgb[0]==0&&rgb[2]==0||rgb[1]==0&&rgb[2]==0){
rgb[0]=a;
rgb[1]=b;
rgb[2]=c;
Color color=new Color(rgb[0],rgb[1],rgb[2],100);
g.setColor(color);
g.drawImage(bufImg, i,j,i,j, pixel, pixel, pixel, pixel, null);
}
}
}
FileOutputStream outImgStream = new FileOutputStream("c:\\abc\\a.jpg");
ImageIO.write(bufImg, "jpg", outImgStream);
outImgStream.flush();
outImgStream.close();
}
}