java图片水印斜角铺满
时间:2020-04-26
本文章向大家介绍java图片水印斜角铺满,主要包括java图片水印斜角铺满使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
/** * Created by toutou on 2013/8/28. */ import com.sun.image.codec.jpeg.JPEGCodec; import com.sun.image.codec.jpeg.JPEGImageEncoder; import java.awt.*; import java.awt.image.BufferedImage; import java.io.*; import javax.imageio.ImageIO; public class WaterMarkUtils { //定义水印文字样式 private static final String MARK_TEXT = "请叫我头头哥"; private static final String FONT_NAME = "微软雅黑"; private static final int FONT_STYLE = Font.BOLD; private static final int FONT_SIZE = 20; private static final Color FONT_COLOR = Color.gray; private static final String PATH = "D:\\Project"; private static final float ALPHA = 0.3F; //添加多条文字水印 public static String moreTextWaterMark(String myFile,String imageFileName) { InputStream is =null; OutputStream os =null; int X = 636; int Y = 763; File logossss = new File(myFile); try { Image image = ImageIO.read(logossss); //计算原始图片宽度长度 int width = image.getWidth(null); int height = image.getHeight(null); //创建图片缓存对象 BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); //创建java绘图工具对象 Graphics2D graphics2d = bufferedImage.createGraphics(); //参数主要是,原图,坐标,宽高 graphics2d.drawImage(image, 0, 0, width, height, null); graphics2d.setFont(new Font(FONT_NAME, FONT_STYLE, FONT_SIZE)); graphics2d.setColor(FONT_COLOR); //使用绘图工具将水印绘制到图片上 //计算文字水印宽高值 int waterWidth = FONT_SIZE*getTextLength(MARK_TEXT); int waterHeight = FONT_SIZE; //水印透明设置 graphics2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, ALPHA)); graphics2d.rotate(Math.toRadians(30), bufferedImage.getWidth()/2, bufferedImage.getHeight()/2); int x = -width/2; int y = -height/2; while(x < width*1.5){ y = -height/2; while(y < height*1.5){ graphics2d.drawString(MARK_TEXT, x, y); y+=waterHeight+100; } x+=waterWidth+100; } graphics2d.dispose(); os = new FileOutputStream(PATH+"/"+imageFileName); //创建图像编码工具类 JPEGImageEncoder en = JPEGCodec.createJPEGEncoder(os); //使用图像编码工具类,输出缓存图像到目标文件 en.encode(bufferedImage); if(is!=null){ is.close(); } if(os!=null){ os.close(); } } catch (IOException e) { e.printStackTrace(); } return "success"; } //计算水印文本长度 //1、中文长度即文本长度 2、英文长度为文本长度二分之一 public static int getTextLength(String text){ //水印文字长度 int length = text.length(); for (int i = 0; i < text.length(); i++) { String s =String.valueOf(text.charAt(i)); if (s.getBytes().length>1) { length++; } } length = length%2==0?length/2:length/2+1; return length; } public static void main(String[] args) { File file = new File(PATH); File[] tempList = file.listFiles(); for (int i = 0; i < tempList.length; i++) { // 文件 if (tempList[i].isFile()) { String fileFullName = tempList[i].getName(); // 获取文件名(不包含后缀名) String fileName = fileFullName.substring(0,fileFullName.lastIndexOf(".")); // 获取后缀名 String prefix = fileFullName.substring(fileFullName.lastIndexOf(".")+1); String newFileName = fileName + "_1." + prefix; System.out.println(fileFullName); System.out.println(newFileName); moreTextWaterMark(tempList[i].toString(),newFileName); } // 文件夹 if (tempList[i].isDirectory()) { } } // e.g. moreTextWaterMark("原始文件路径","新生成的水印图片文件名"); System.out.println("成功"); } }
效果图如下:
原文地址:https://www.cnblogs.com/toutou/p/9549791.html
- 微信力推搜一搜,培养用户微信搜索习惯,搜一搜直接给红包
- datetime
- [转自JeffreyZhao]在LINQ to SQL中使用Translate方法以及修改查询用SQL
- Flask-SQLAlchemy
- 2017全球存储大会:存储设备面临三大挑战
- cobbler自动安装系统(Centos7.X)
- Python接口自动化-7-unittest
- cobbler自动安装系统(Centos7.X)
- Linux NTP时间服务器
- 子查询的另一种方式——映射
- LNMP架构之搭建wordpress博客网站
- Nginx的各种报错总结
- 谷歌TensorFlowLite正式发布,机器学习框架向移动端大步挺进!
- ABP+AdminLTE+Bootstrap Table权限管理系统一期
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- php使用curl伪造浏览器访问操作示例
- 关于laravel后台模板laravel-admin select框的使用详解
- 基于Laravel-admin 后台的自定义页面用法详解
- php解决约瑟夫环算法实例分析
- 浅谈laravel-admin的sortable和orderby使用问题
- 使用composer安装使用thinkphp6.0框架问题【视频教程】
- 基于laravel-admin 后台 列表标签背景的使用方法
- 解决laravel-admin 自己新建页面里 js 需要刷新一次的问题
- laravel-admin 中列表筛选方法
- Laravel框架控制器的middleware中间件用法分析
- laravel-admin的图片删除实例
- 在laravel-admin中列表中禁止某行编辑、删除的方法
- Laravel的Auth验证Token验证使用自定义Redis的例子
- laravel-admin解决表单select联动时,编辑默认没选上的问题
- laravel-admin 后台表格筛选设置默认的查询日期方法