Java针对不同文件加水印

背景

  • 需求需要对不同文件加水印,例如:jpg,png,pdf,word
  • 由于不同文件不同的方式,所以进行逐个功能开发

调研

  • 图片文件(jpg,png,e.g.):通过ImageIO
  • PDF:1.itextpdf 2.pdfbox
  • Word:1.通过Free Spire for Doc 2.apache poi

分析

对比

  1. 图片文件,最好选择就是通过ImageIO,ImageIO为Java的自带工具类javax.imageio.ImageIO
  2. PDF下
    1. itext官网url:https://itextpdf.com/en(付费)
    2. pdfbox官网url:https://pdfbox.apache.org/(开源)
  3. Word:
    1. Free Spire Doc For java官网:https://www.e-iceblue.cn/licensing/install-spirepdf-for-java-from-maven-repository.html (开源版本功能有限,所有功能必须使用付费版)
    2. apache poi 官网: https://poi.apache.org/ (免费)

总结

  1. 图片文件加水印,通过ImageIO可以满足
  2. PDF文件加水印,由于itext为付费框架,所以选择开源框架pdfbox
  3. Word通过测试使用Free Spiredoc for java 开源版加完水印会在文件上生成一行字。而 apache poi对水印的操作只支持文字,最终用两者结合的方式来实现完整功能, 此方法受限很大,不支持wps生成的doc文件,部分旧版doc也不支持。

框架使用

ImageIO

Api总览

  • 类名 描述
    ImageIO 一个类包含静态方便定位方法 s和 s,并进行简单的编码和解码。
    BufferedImage 类描述了一个 与访问图像数据缓冲区。一个 是由一个 和 图像数据。在 的 数量和类型的乐队必须匹配的数量和类型的 要求代表它的颜色和alpha分量。所有的 对象的左上角坐标(0, 0)。任何 用来构建一个 必须有X = 0和迷你= 0。 这类依赖于数据的读取和设置方法,并对颜色表征方法。
    Graphics2D 提供强大的绘图能力。Graphic2D类扩展了Graphic类提供几何更复杂的控制系统的坐标变换,色彩管理和文本布局。
    AlphaComposite 实现基本的alpha合成相结合的源和目标的颜色来实现融合,图形和图像的透明度的影响规律
  • ImageIO的方法

    • Modifier and Type Method and Description
      返回一个 将从给定的输入 。
      返回一个 ,将其输出到了 。
      返回由 的当前值,或 如果没有显式设置了。
      返回一个 corresponding到给定的 ,如果有一个,或 如果插件,这 不指定相应的 ,或者给 没有注册。
      返回一个包含所有当前注册 s 声称能提供 解码,通常 。
      返回一个包含所有当前注册 s声称能够解码的命名格式。
      返回一个包含所有当前注册 s声称能够解码文件与给定的MIME类型。
      返回一个包含所有当前注册 s声称能够解码文件的后缀。
      返回一个包含所有当前注册 s 声称能将给定的 和 元数据之间。
      返回一个 corresponding到给定的 ,如果有一个,或 如果插件,这 不指定相应的 ,或者给 没有注册。
      返回一个包含所有当前注册 s声称能够编码的图像(使用一个给定的布局 指定)在给定的格式。
      返回一个包含所有当前注册 s声称能够编码的命名格式。
      返回一个包含所有当前注册 s 声称能与给定的MIME类型文件的编码。
      返回一个包含所有当前注册 s 声称能与给定的后缀文件编码。
      返回 s列出所有与格式的当前注册读者理解相关的文件后缀数组。
      返回 s列出所有的非正式格式名称注册读者理解数组的当前设置。
      返回 s列出所有的MIME类型注册读者了解当前设置的数组。
      返回由 的当前值,或 如果没有显式设置了。
      返回 s列出所有的格式由注册作家当前理解的关联文件后缀数组。
      返回 s列出所有的非正式格式名称注册作家当前理解数组。
      返回 s列出所有的MIME类型注册作家当前理解数组。
      返回一个 作为一个 自动选择从当前注册提供 解码结果。
      返回一个 作为一个 自动选择从当前注册提供 解码结果。
      返回一个 作为一个 自动选择从当前注册提供 解码结果。
      返回一个 作为一个 自动选择从当前注册提供 解码结果。
      在应用程序的类路径加载插件扫描,服务提供程序类,并注册一个服务提供商,例如每一个发现与 。
      设置要创建缓存文件的目录。
      设置一个指示是否基于磁盘的缓存文件应该创造 s和 s时使用的国旗。
      写一个图像使用任意 支持特定格式的一 。
      写一个图像使用任意 支持给格式的 。
      写一个图像使用任意 支持给格式的 。
  • BufferedImage方法

    • Modifier and Type Field and Description
      代表8位RGB分量图像,对应一个Windows风格BGR颜色模型)与蓝色、绿色、红色3个字节存储。
      代表8位RGBA颜色成分的蓝色、绿色和红色的图像,存储在3字节和1字节的α。
      代表8位RGBA颜色成分的蓝色、绿色和红色的图像,存储在3字节和1字节的α。
      表示一个不透明的字节填充的1,2,或4位图像。
      表示一个无符号字节的灰度图像,无索引。
      表示一个索引字节图像。
      图像类型是不被识别的,所以它必须是一个自定义的图像。
      代表8位RGBA颜色组件包装成整数像素的图像。
      代表8位RGBA颜色组件包装成整数像素的图像。
      代表8位RGB分量图像,对应于Windows或Solaris式BGR颜色模型,用蓝色、绿色和红色包装成整数像素。
      代表8位RGB分量包装成整数像素的图像。
      代表5-5-5 RGB分量图像(五位红、五位绿色,五位蓝色)没有α。
      代表5-6-5 RGB分量图像(五位红,六位绿色,五位蓝色)没有α。
      表示一个无符号的短灰度图像,非索引的。
  • Graphics2D

    • Graphic2D类提供强大的绘图能力。Graphic2D类扩展了Graphic类提供几何更复杂的控制系统的坐标变换,色彩管理和文本布局。

    • Java文档

    • 方法

      • Modifier and Type Method and Description
        设置渲染算法的任意数量的首选项的值。
        与目前的 与指定的 室内设置产生的交叉 。
        下一 使用当前 语境设置的轮廓。
        绘制指定矩形的三维突出显示的轮廓。
        使文本的指定 使用 语境的渲染属性。
        呈现 ,与 过滤。
        渲染一个图像,在绘制之前将图像空间的一个变换转换成用户空间。
        呈现 ,应用变换从图像空间到用户空间的画前。
        呈现 ,应用变换从图像空间到用户空间的画前。
        使指定的迭代器将其属性按照 类的规范文本。
        使指定的迭代器将其属性按照 类的规范文本。
        将由指定的 指定的文本,使用当前的文本属性状态的 语境。
        使指定的 文本,使用当前的文本属性状态的 语境。
        填补了一 使用的 语境设置的内部。
        画一个充满当前颜色的三维高亮矩形。
        返回用于清除区域的背景色。
        在返回的 上下文的当前 。
        返回与此相关的设备配置 。
        在这 上下文得到的 渲染上下文。
        返回的 上下文的当前 。
        返回一个单独的渲染算法的偏好值。
        获取渲染算法的首选项。
        在返回的 上下文的当前 。
        返回一个在 上下文的当前 。
        检查是否 相交的指定 ,这是设备空间。
        将当前 与旋转变换。
        将当前 与翻译旋转变换。
        将当前 与尺度转换以后呈现大小按指定的比例因子缩放相对于以前。
        设置为 上下文的背景颜色。
        设置为 语境 。
        设置为 语境 属性。
        设置一个单独的渲染算法的偏好值。
        取代所有偏好值与指定的 渲染算法。
        设置为 语境 。
        覆盖在 语境的变换。
        将当前 与剪切变换。
        在这 组成的 对象根据规则上指定的首次应用。
        将当前 与平移变换。
        翻译语境的 起源点(nullx, nully)在当前坐标系统。

基本使用

1.图片的输入输出
  1. 读取图片

  2. 保存图片

  3. 将一幅图片输入输出:

    • 来源:Shacoray

      声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2022年4月15日
下一篇 2022年4月15日

相关推荐