求教 关于java去除水印(模糊)(改错)

m0_55781066 2021-03-10 11:57:09
设想下是经过循环筛选出异常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();


}


}
...全文
110 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

58,454

社区成员

发帖
与我相关
我的任务
社区描述
Java Eclipse
社区管理员
  • Eclipse
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧