java图片增加马赛克

  • 粘贴即用 具体需要根据项目情况进行调整

粘贴即用 具体需要根据项目情况进行调整

借鉴了许多代码粘贴的 不是原创 只是代码的拼凑师

package com.ruoyi.hfiveinterface.util;import java.awt.Color;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.*;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.List;import javax.imageio.ImageIO;import org.springframework.stereotype.Service;/*** 图片增加马赛克工具类*/@Service
public class PhototMosaicUtil {/*** 给图片指定位置打马赛克* @param filePath 图片位置* @param targetPath 打码后的图片保存位置,若为空则保存路径默认为原图片路径* @param x 图片要打码区域左上角的横坐标* @param y 图片要打码区域左上角的纵坐标* @param width 图片要打码区域的宽度* @param height 图片要打码区域的高度* @param mosaicSize 马赛克尺寸,即每个矩形的长宽* @return* @throws IOException*/@SuppressWarnings("static-access")public static boolean mosaic(String filePath, String targetPath,int x, int y, int width, int height, int mosaicSize) throws IOException {//1. 初始化图像处理各变量if (!filePath.endsWith(".png") && !filePath.endsWith(".jpg") &&!filePath.endsWith(".gif")) {System.err.println("ImageUtil>>>文件名非法,不是正确的图片文件名");return false;}int index = filePath.lastIndexOf(".");String suffix = filePath.substring(index + 1);if (targetPath != null  && !targetPath.endsWith(suffix)) {System.err.println("ImageUtil>>>目标文件后缀应与源文件后缀一致");return false;}File file = new File(filePath);if (!file.isFile()) {System.err.println("ImageUtil>>>" + filePath + "不是一个文件!");return false;}BufferedImage bi = ImageIO.read(file); // 读取该图片BufferedImage spinImage = new BufferedImage(bi.getWidth(),bi.getHeight(), bi.TYPE_INT_RGB);if (bi.getWidth() < mosaicSize || bi.getHeight() < mosaicSize || mosaicSize <= 0) { // 马赛克格尺寸太大或太小System.err.println("马赛克尺寸设置不正确");return false;}//2. 设置各方向绘制的马赛克块个数int xcount = 0; // 方向绘制个数int ycount = 0; // y方向绘制个数if (width % mosaicSize == 0) {xcount = width / mosaicSize;} else {xcount = width / mosaicSize + 1;}if (height % mosaicSize == 0) {ycount = height / mosaicSize;} else {ycount = height / mosaicSize + 1;}//3. 绘制马赛克(绘制矩形并填充颜色)Graphics gs = spinImage.getGraphics();gs.drawImage(bi, 0, 0, null);int xTmp = x;int yTmp = y;for (int i = 0; i < xcount; i++) {for (int j = 0; j < ycount; j++) {//马赛克矩形格大小int mwidth = mosaicSize;int mheight = mosaicSize;if(i == xcount - 1){   //横向最后一个比较特殊,可能不够一个sizemwidth = width - xTmp;}if(j == ycount - 1){  //同理mheight = height - yTmp;}//矩形颜色取中心像素点RGB值int centerX = xTmp;int centerY = yTmp;if (mwidth % 2 == 0) {centerX += mwidth / 2;} else {centerX += (mwidth - 1) / 2;}if (mheight % 2 == 0) {centerY += mheight / 2;} else {centerY += (mheight - 1) / 2;}Color color = new Color(bi.getRGB(centerX, centerY));gs.setColor(color);gs.fillRect(xTmp, yTmp, mwidth, mheight);yTmp = yTmp + mosaicSize;// 计算下一个矩形的y坐标}yTmp = y;// 还原y坐标xTmp = xTmp + mosaicSize;// 计算x坐标}gs.dispose();if (targetPath == null )targetPath = filePath;File sf = new File(targetPath);ImageIO.write(spinImage, suffix, sf); // 保存图片return true;}public static boolean mosaic(String filePath, String targetPath,ImageArea area, int mosaicSize) throws IOException {return  mosaic(filePath, targetPath, area.getX(), area.getY(),area.getWidth(), area.getHeight(), mosaicSize);}//链接url下载图片/*** 功能描述:* @param:  urlList  图片url地址* @param:  path     下载到本地的路径*/private static void downloadPicture(String urlList,String path) {try {URL url = new URL(urlList);DataInputStream dataInputStream = new DataInputStream(url.openStream());FileOutputStream fileOutputStream = new FileOutputStream(new File(path));ByteArrayOutputStream output = new ByteArrayOutputStream();byte[] buffer = new byte[1024];int length;while ((length = dataInputStream.read(buffer)) > 0) {output.write(buffer, 0, length);}fileOutputStream.write(output.toByteArray());dataInputStream.close();fileOutputStream.close();} catch (MalformedURLException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}public static void deleteFile(File file){//判断文件不为null或文件目录存在if (file == null || !file.exists()){System.out.println("文件删除失败,请检查文件路径是否正确");return;}//取得这个目录下的所有子文件对象File[] files = file.listFiles();//遍历该目录下的文件对象for (File f: files){//打印文件名String name = file.getName();System.out.println(name + "文件夹已清空");//判断子目录是否存在子目录,如果是文件则删除if (f.isDirectory()){deleteFile(f);}else {f.delete();}}//删除空文件夹  for循环已经把上一层节点的目录清空。//file.delete();}/*** 测试 图片打马赛克* @param args* @throws IOException*/public static void main(String[] args) throws IOException {long time = System.currentTimeMillis();System.out.println(time);//先清空下载本地文件夹File file = new File("D:\\subImgKouBei0917dowlond");//输入要删除文件目录的绝对路径deleteFile(file);//https路径存入 本地文件夹String url ="https://k2.autoimg.cn/koubeidfs/g4/M12/E7/36/480x360_1_q87_autohomecar__ChsFVmDcMmuAFEIAAAWSEQyzIJs599.jpg";String path="D:\\subImgKouBei0917dowlond\\"+time+".jpg";downloadPicture(url,path);//再清空本地的 图片增加马赛克文件夹File file2 = new File("D:\\subImgKouBei0917");//输入要删除文件目录的绝对路径deleteFile(file2);//获取下载的图片的 宽度和高度 用于计算增加马赛克的位置File image=new File("D:\\subImgKouBei0917dowlond\\"+time+".jpg");BufferedImage localImg = ImageIO.read(new FileInputStream(image));int width=localImg.getWidth();int height=localImg.getHeight();//图片右下角增加马赛克boolean successOrFail = mosaic("D:\\subImgKouBei0917dowlond\\"+time+".jpg","D:\\subImgKouBei0917\\"+time+".jpg", new ImageArea(width-60, height-20, 70, 40), 20);if (successOrFail){System.out.println("图片增加马赛克成功");}else {System.out.println("图片增加马赛克失败");}}}
package com.ruoyi.hfiveinterface.util;import org.springframework.stereotype.Service;/*** 图片区域类* @author hty**/
@Service
public class ImageArea {int x;  //指定区域左上角横坐标int y;  //指定区域左上角纵坐标int width;  //指定区域宽度int height; //指定区域高度public ImageArea(int x, int y, int width, int height) {super();this.x = x;this.y = y;this.width = width;this.height = height;}public int getX() {return x;}public void setX(int x) {this.x = x;}public int getY() {return y;}public void setY(int y) {this.y = y;}public int getWidth() {return width;}public void setWidth(int width) {this.width = width;}public int getHeight() {return height;}public void setHeight(int height) {this.height = height;}@Overridepublic int hashCode() {final int prime = 31;int result = 1;result = prime * result + height;result = prime * result + width;result = prime * result + x;result = prime * result + y;return result;}@Overridepublic boolean equals(Object obj) {if (this == obj)return true;if (obj == null)return false;if (getClass() != obj.getClass())return false;ImageArea other = (ImageArea) obj;if (height != other.height)return false;if (width != other.width)return false;if (x != other.x)return false;if (y != other.y)return false;return true;}}

java图片增加马赛克相关推荐

  1. java 给图片加马赛克_java处理图片--图片的缩放,旋转和马赛克化

    下面是编程之家 jb51.cc 通过网络收集整理的代码片段. 编程之家小编现在分享给大家,也给大家做个参考. 这是我自己结合网上的一些资料封装的java图片处理类,支持图片的缩放,旋转,马赛克化.(转 ...

  2. java图片马赛克_java实现图片缩放、旋转和马赛克化

    本文是作者结合网上的一些资料封装的java图片处理类,支持图片的缩放,旋转,马赛克化. 不多说,上代码: package deal; import java.awt.Color; import jav ...

  3. 用java实现给图片增加图片水印或者文字水印(也支持视频图像帧添加水印)

    javaCV图像处理系列: javaCV图像处理之1:实时视频添加文字水印并截取视频图像保存成图片,实现文字水印的字体.位置.大小.粗度.翻转.平滑等操作 javaCV图像处理之2:实时视频添加图片水 ...

  4. java 图片不失真缩放,ico格式图片转换,透明图层,jar->exe

    Java 图片缩放,转ico格式 Java 在转换图片格式为 ico 时 需要引入 image4j 的依赖,这里分享一个自己写好的并通过exe4j 打包好的exe小程序.因为功能太少所以再引入 thu ...

  5. linux程序给图片打马赛克,word中给图片打马赛克

    一.如何将word图片打马赛克 将word图片打马赛克的具体操作步骤如下: 我们需要准备的材料有:电脑.Word. 1.首先我们打开需要编辑的Word,在插入页面下方点击点击"形状" ...

  6. 机器视觉——OpenCV案例分析基础(二)(给图片打马赛克与图像的运算处理)

    给图片打马赛克与图像的运算处理 一.理论分析 二.代码分析 2.1 对图像全局采用马赛克处理 2.2 局部马赛克 2.3 对图片进行运算处理 2.3.1 图像的或运算 2.3.2 图像的与运算 2.3 ...

  7. linux程序给图片打马赛克,iOS集成OpenCV,并实现图片马赛克

    关于Open CV OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux.Windows.Android和Mac OS操作系统上.它轻量级而且高效--由一系列 C 函 ...

  8. Java图片压缩工具类(递归压缩到指定大小范围)

    Java图片压缩工具 工具类使用场景 公司做人脸识别项目时候需要上传学生.家长.教师.访客的正面照图片,但是人脸识别机器有限制只接收200KB-1M的图片,所以必须做图片压缩到指定范围大少. APP上 ...

  9. java 图片生成器_用Java来显示图片生成器

    一.本图片生成器具有以下功能特性: 1.可以设置图片的宽度.高度.外框颜色.背景色: 2.可以设置图片字体的大小.名称.颜色: 3.可以设置输出图片的格式,如JPEG.GIF等: 4.可以将图片存储到 ...

最新文章

  1. 五分钟使你的Firefox快两倍
  2. SQL SERVER 2012 修改数据库默认位置不立即生效
  3. 操作系统OS-分页、页表
  4. 树莓派学习——文件传输
  5. 17 初探Context的使用场景
  6. 一元多项式计算器_人教版初中数学七年级上册——去括号、去分母解一元一次方程公开课优质课课件教案视频...
  7. 【电路仿真】基于matlab Simulink四旋翼PID控制【含Matlab源码 454期】
  8. UA PHYS515 电磁理论II 静电场问题7 柱坐标系中的Laplace方程与Bessel函数
  9. 微弱信号检测_世界上最轻薄的信号放大器:可精准监测生物信号!
  10. Python读取文件找出重复元素
  11. 力扣刷题思考:347. 前 K 个高频元素
  12. xftp无法取消被动模式
  13. [项目过程中所遇到的各种问题记录]工具篇——.NET开发时常用的工具类库
  14. c语言中int和void,关于指针:void(*)void和int(*)int在C中的含义是什么?
  15. 火线精英手游服务器维护,4399火线精英7月4日23:00全区停机维护公告
  16. C语言编程题:分数的加减乘除
  17. 计算机if语句翻译,5.4.1 if 语句的翻译
  18. 拼音首字母缩写在线翻译源码
  19. 使用Jmockit完成static方法的mock
  20. java毕业生设计预防接种服务平台计算机源码+系统+mysql+调试部署+lw

热门文章

  1. 修改Discuz! X2标题、底部和Archiver页面的版权信息
  2. 做好项目信息管理,是优秀项目经理的必备技能
  3. 基于JAVA和Oracle数据库实现的项目信息管理系统
  4. 计算机网络CPT简单应用
  5. 微信首页登录html页面,H5页面接入微信授权登录和分享
  6. JZOJ 5585 老夫
  7. 致谢计算机组成原理老师的致谢,论文致谢优秀.doc
  8. win7如何进入计算机配置,教您win7怎么进入设置bios
  9. js实现倒计时,定时器--完成时间倒计时
  10. docker下安装typecho建立自己得博客系统(1)dockerfile篇