图片模糊处理的Java 实现
String str = "2.jpg";
File f = new File(str);
try {
BufferedImage image2 = ImageIO.read(f);
int w = image2.getWidth();
int h = image2.getHeight();
int[] arr = image2.getRGB(0, 0, w, h, null, 0, w);
int[][] xy = new int[h][w];
for(int i = 0;i<h;i++) {
for(int k=0;k<w;k++) {
xy[i][k] = arr[i*k+k];
}
}
int th =0;
int tw =0;
for(int i = 0;i<h;i++) {
for(int k=0;k<w;k++) {
th =i+1;
tw = k+1;
if((th == h)) {
th = h-1;
}
if((tw == w)) {
tw = w-1;
}
int temp1 = xy[Math.abs(i-1)][k] -xy[i][k];
int temp2 = xy[th][k] -xy[i][k];
int temp3 = xy[i][Math.abs(k-1)] -xy[i][k];
int temp4 = xy[i][tw] -xy[i][k];
xy[i][k] =(int)(xy[i][k] + (temp1+temp2+temp3+temp4)/4);
}
;
}
for(int i = 0;i<h;i++) {
for(int k=0;k<w;k++) {
arr[i*k+k]=xy[i][k] ;
}
}
image2.setRGB(0, 0, w, h, arr, 0, w);
ImageIO.write(image2, "jpg", new File("22.jpg"));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
其原理就是获取图片的像素值,其表示就是int 类型的 一维数组,
对于图片来说有固定的height 和width ,因此我们将该数组转化为 int [height][width] 的二维数组,我们假设该二维数组表示图像上面的各点值,通过算法 取出该点 上下左右的数值,对其做数学上面的取平均值或者,使用方差等数学方法,我们即可得到新的 二维数组,再将该二维数组转给我们的一维数组,并通过setRGB 方法 将像素值覆写,得到图片。
其前后图片如下:

如果要改进模糊效果的话,无非是对像素值的取值算法做数学上面的优化。其原理都是大同小异的

浙公网安备 33010602011771号