• 大小: 2KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-05-10
  • 语言: Java
  • 标签: java  图片  马赛克  

资源简介

java模拟实现图片马赛克效果,马赛克设置越大图片越模糊。

资源截图

代码片段和文件信息

package com.popo.tools;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.image.BufferedImage;
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.JPEGEncodeParam;
import com.sun.image.codec.jpeg.JPEGImageEncoder;

public class PicUtil {

/**
 * 图片马赛克化
 * 
 * @param inputFile
 *            输入图片路径
 * @param outputFile
 *            输出图片路径
 * @param mosaicSize
 *            马赛克大小
 * @return
 * @throws Exception
 * @author changqing/2012-12-11/2012
 */
public static boolean mosaic(String inputFile String outputFile int mosaicSize) throws Exception {
// 获得源文件
File file = new File(inputFile);
if (!file.exists()) {
return false;
}
BufferedImage img = ImageIO.read(file);
return mosaic(img outputFile mosaicSize);
}

/**
 * 图片马赛克化
 * 
 * @param img
 * @param outputFile
 * @param mosaicSize
 * @return
 * @throws Exception
 * @author changqing/2012-12-11/2012
 */
private static boolean mosaic(BufferedImage img String outputFile int mosaicSize) throws Exception {
// 判断图片格式是否正确
if (img == null) {
return false;
}
int imageWidth = img.getWidth(null);
int imageHeight = img.getHeight(null);
// 判断马赛克大小是否超出图片范围
if (mosaicSize <= 0 || mosaicSize > imageWidth || imageWidth > imageHeight) {
return false;
}

BufferedImage mosaicPic = new BufferedImage(imageWidth imageHeight BufferedImage.TYPE_INT_RGB);

int x = 0;// 矩形绘制点的x坐标
int y = 0; // 矩形绘制点的y坐标
int xCnt = 0;// 矩形绘制x方向个数
int yCnt = 0;// 矩形绘制y方向个数
if (imageWidth % mosaicSize == 0) {
xCnt = imageWidth / mosaicSize;
} else {
xCnt = imageWidth / mosaicSize + 1;
}
if (imageHeight % mosaicSize == 0) {
yCnt = imageHeight / mosaicSize;
} else {
yCnt = imageHeight / mosaicSize + 1;
}

// 绘制矩形并填充颜色
Graphics gs = mosaicPic.getGraphics();
for (int i = 0; i < xCnt; i++) {
for (int j = 0; j < yCnt; j++) {
// 计算矩形宽高
int mosaicWidth = mosaicSize;
int mosaicHeight = mosaicSize;
if (i == xCnt - 1) {
mosaicWidth = imageWidth - x;
}
if (j == yCnt - 1) {
mosaicHeight = imageHeight - y;
}
// 矩形颜色取中心像素点RGB值
int centerX = x;
int centerY = y;
if (mosaicWidth % 2 == 0) {
centerX += mosaicWidth / 2;
} else {
centerX += (mosaicWidth - 1) / 2;
}
if (mosaicHeight % 2 == 0) {
centerY += mosaicHeight / 2;
} else {
centerY += (mosaicHeight - 1) / 2;
}
Color color = new Color(img.getRGB(centerX centerY));
gs.setColor(color);
gs.fillRect(x y mosaicWidth mosaicHeight);
y = y + mosaicSize;// 计算下一个矩形的y坐标
}
y = 0;// 还原y坐标
x = x + mosaicSize;// 计算x坐标
}
gs.dispose();

// 输出图片
output(mosaicPic outputFile imageWidth imageHeight);

return true;
}


 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       4031  2012-12-11 17:50  src\com\popo\tools\PicUtil.java

     目录          0  2012-12-11 17:31  src\com\popo\tools

     目录          0  2012-12-11 17:31  src\com\popo

     目录          0  2012-12-11 17:31  src\com

     目录          0  2012-12-11 17:30  src

----------- ---------  ---------- -----  ----

                 4031                    5


评论

共有 条评论