`
neeleon
  • 浏览: 184462 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

java给图片加水印,文字

    博客分类:
  • java
阅读更多
import java.awt.AlphaComposite;
  import java.awt.Color;
  import java.awt.Font;
  import java.awt.Graphics2D;
  import java.awt.Image;
  import java.awt.geom.AffineTransform;
  import java.awt.image.AffineTransformOp;
  import java.awt.image.BufferedImage;
  import java.io.File;
  import java.io.IOException;
  import javax.imageio.ImageIO;

  public final class ImageUtils {
  /**
  * 图片水印
  * @param pressImg 水印图片
  * @param targetImg 目标图片
  * @param x 修正值 默认在中间
  * @param y 修正值 默认在中间
  * @param alpha 透明度
  */
  public final static void pressImage(String pressImg, String targetImg, int x, int y, float alpha) {
  try {
  File img = new File(targetImg);
  Image src = ImageIO.read(img);
  int wideth = src.getWidth(null);
  int height = src.getHeight(null);
  BufferedImage image = new BufferedImage(wideth, height, BufferedImage.TYPE_INT_RGB);
  Graphics2D g = image.createGraphics();
  g.drawImage(src, 0, 0, wideth, height, null);
  //水印文件
  Image src_biao = ImageIO.read(new File(pressImg));
  int wideth_biao = src_biao.getWidth(null);
  int height_biao = src_biao.getHeight(null);
  g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, alpha));
  g.drawImage(src_biao, (wideth - wideth_biao) / 2, (height - height_biao) / 2, wideth_biao, height_biao, null);
  //水印文件结束
  g.dispose();
  ImageIO.write((BufferedImage) image, "jpg", img);
  } catch (Exception e) {
  e.printStackTrace();
  }
  }
  /**
  * 文字水印
  * @param pressText 水印文字
  * @param targetImg 目标图片
  * @param fontName 字体名称
  * @param fontStyle 字体样式
  * @param color 字体颜色
  * @param fontSize 字体大小
  * @param x 修正值
  * @param y 修正值
  * @param alpha 透明度
  */
  public static void pressText(String pressText, String targetImg, String fontName, int fontStyle, Color color, int fontSize, int x, int y, float alpha) {
  try {
  File img = new File(targetImg);
  Image src = ImageIO.read(img);
  int width = src.getWidth(null);
  int height = src.getHeight(null);
  BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
  Graphics2D g = image.createGraphics();
  g.drawImage(src, 0, 0, width, height, null);
  g.setColor(color);
  g.setFont(new Font(fontName, fontStyle, fontSize));
  g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, alpha));
  g.drawString(pressText, (width - (getLength(pressText) * fontSize)) / 2 + x, (height - fontSize) / 2 + y);
  g.dispose();
  ImageIO.write((BufferedImage) image, "jpg", img);
  } catch (Exception e) {
  e.printStackTrace();
  }
  }
  /**
  * 缩放
  * @param filePath 图片路径
  * @param height 高度
  * @param width 宽度
  * @param bb 比例不对时是否需要补白
  */
  public static void resize(String filePath, int height, int width, boolean bb) {
  try {
  double ratio = 0.0; //缩放比例
  File f = new File(filePath);
  BufferedImage bi = ImageIO.read(f);
  Image itemp = bi.getScaledInstance(width, height, bi.SCALE_SMOOTH);
  //计算比例
  if ((bi.getHeight() > height) || (bi.getWidth() > width)) {
  if (bi.getHeight() > bi.getWidth()) {
  ratio = (new Integer(height)).doubleValue() / bi.getHeight();
  } else {
  ratio = (new Integer(width)).doubleValue() / bi.getWidth();
  }
  AffineTransformOp op = new AffineTransformOp(AffineTransform.getScaleInstance(ratio, ratio), null);
  itemp = op.filter(bi, null);
  }
  if (bb) {
  BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
  Graphics2D g = image.createGraphics();
  g.setColor(Color.white);
  g.fillRect(0, 0, width, height);
  if (width == itemp.getWidth(null))
  g.drawImage(itemp, 0, (height - itemp.getHeight(null)) / 2, itemp.getWidth(null), itemp.getHeight(null), Color.white, null);
  else
  g.drawImage(itemp, (width - itemp.getWidth(null)) / 2, 0, itemp.getWidth(null), itemp.getHeight(null), Color.white, null);
  g.dispose();
  itemp = image;
  }
  ImageIO.write((BufferedImage) itemp, "jpg", f);
  } catch (IOException e) {
  e.printStackTrace();
  }
  }
  public static void main(String[] args) throws IOException {
  pressImage("G:\\imgtest\\sy.jpg", "G:\\imgtest\\test1.jpg", 0, 0, 0.5f);
  pressText("我是文字水印", "G:\\imgtest\\test1.jpg", "黑体", 36, Color.white, 80, 0, 0, 0.3f);
  resize("G:\\imgtest\\test1.jpg", 500, 500, true);
  }
  public static int getLength(String text) {
  int length = 0;
  for (int i = 0; i < text.length(); i++) {
  if (new String(text.charAt(i) + "").getBytes().length > 1) {
  length += 2;
  } else {
  length += 1;
  }
  }
  return length / 2;
  }
  }
分享到:
评论

相关推荐

    java给图片添加水印

    在Java编程语言中,给图片添加水印是一项常见的任务,特别是在网站开发中,为了保护版权或者标识来源,经常需要在用户上传的图片上添加特定的文字或图像水印。以下将详细讲解如何使用Java来实现这一功能。 首先,...

    JAVA实现给图片增加图片水印或者文字水印-依赖包

    在Java编程中,给图片添加水印是一项常见的需求,无论是为了版权保护还是...但以上代码已经足够作为基础,帮助你开始在Java中实现图片加水印的功能。记得在运行此代码前,确保已经正确引入了Apache Commons Imaging库。

    JAVA处理图片 加文字水印以及灰色透明背景

    JAVA处理图片 加文字水印以及灰色透明背景,处理图片。

    Java给图片加水印

    "Java给图片加水印"这个主题,就是关于如何利用Java技术在图片上添加标识或文字,以保护版权或者增强视觉效果。下面我们将深入探讨这个话题。 首先,我们需要了解Java中的图像处理库,如Java Advanced Imaging (JAI...

    java 程序图片加水印

    java 程序图片加水印 加文字 任何图片都可以java 程序图片加水印 加文字 任何图片都可以java 程序图片加水印 加文字 任何图片都可以java 程序图片加水印 加文字 任何图片都可以

    java 图片缩放、加水印

    图片操作类源代码,该类主要用于给图片进行缩放、加水印和得到图片的高、宽及类型。 具体操作请自己参照方法说明自己测试改写。

    Java为图片添加水印功能.rar

    Java为图片添加水印功能,这个水印类的操作比较实用,不但可以旋转水印图像,还可设置其水印图片的透明度,使其与原图融为一体,给图片添加水印,可以设置图片水印的角度,设置对线段的锯齿状边缘处理,第一参数-&gt;...

    java 图片水印 改变图片大小

    在Java编程领域,图片处理是一项常见的任务,包括添加水印、改变图片大小等。这里我们将深入探讨这些知识点,以及如何在Struts2框架下实现它们。 首先,让我们了解"图片水印"。水印通常用于保护版权或者为图片增加...

    java实现图片上传并添加水印效果(文字水印,蒙版,logo图片),自动进行文字大小行数位置匹配 ,文字自动换行

    在Java编程中,实现图片上传并添加水印效果是一项常见的任务,这通常涉及到图像处理、图形用户界面(GUI)和文件I/O等多个方面。在这个项目中,我们将关注以下几个关键知识点: 1. **Java图像处理库**:Java标准库...

    java实现图片加水印.txt

    ### Java 实现图片加水印知识点详解 #### 一、背景与概述 在现代网络环境中,图片加水印是一项常用的技术手段,它主要用于版权保护、品牌宣传等方面。通过本篇文章,我们将详细介绍如何利用Java编程语言实现给图片...

    java图片加水印工具类

    这个“java图片加水印工具类”正是为了简化这一过程而设计的,它允许开发者通过调用预定义的方法,快速地在图片上添加文字或图形水印,无需每次都手动编写相同的功能代码。 首先,我们需要了解什么是水印。水印通常...

    java 水印(水印适应图片大小,但个别图片太小不支持)

    本知识点主要探讨如何在Java中实现自适应图片大小的水印功能,以及遇到图片过小时的处理策略。 首先,我们需要理解水印的基本概念。水印是在图像或文档上添加的一种视觉标记,它可以是文字、图像或者图形,用于表明...

    图片批量处理大小,批量加图片水印,文字水印

    解决图片的批量处理大小,批量给图片加图片水印,加文字水印

    用Java给图片添加文字或图像水印

    在本文中,我们将深入探讨如何使用Java编程语言为图片添加文字或图像水印。这个话题源于一个名为"Java水印.rar"的压缩包文件,它包含了一段Java源代码,用于实现这一功能。该压缩包有四个文件:RunIt.bat(运行脚本...

    水印 java Graphics2D实现文字图片水印

    // 设置水印文字的渲染属性 g2d.setColor(color); g2d.setFont(font); // 在图像的四个角落添加水印 int textWidth = g2d.getFontMetrics().stringWidth(watermarkText); int textHeight = g2d....

    java实现对图片加水印

    总结一下,Java 2D API和JAI库都能帮助我们实现图片加水印的功能。选择哪种方式取决于具体需求,如性能、复杂性和可用资源。理解这些概念和步骤,开发者就能根据实际情况编写出自己的Java代码,实现个性化的图片水印...

    java调用ffmpeg 添加水印转换视频

    java调用ffmpeg添加水印并且转换视频,代码中并没有判断哪些格式支持,那些不支持,mpg,mp4,avi,wmv基本都可以(传入格式),转换为flv avi mp4起码都没问题,其它的没事过ffmpeg是开源的支持的挺多的 补充:时间算错了,...

    Java图片加水印,支持旋转和透明度设置

    util实现Java图片水印添加功能,有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、水印图片的路径,水印一般格式是gif,png,这种图片可以设置透明度、水印旋转等,可以参考代码加以...

    Android 图片加图片logo水印,文字水印

    本文将详细讲解如何在Android中实现图片加图片Logo水印以及文字水印,并探讨它们在不同位置的设置方法。 首先,我们需要理解Android的图像处理基础。Android提供了丰富的图像处理API,包括Bitmap类用于表示位图,...

    java对图片添加水印的工具类

    添加文字水印的工具类,自己去下JAR包,MAVEN的网站http://mvnrepository.com/

Global site tag (gtag.js) - Google Analytics