`
aa8945163
  • 浏览: 275302 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

图片加水印

阅读更多

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;

/**
* @author Eric Xu
*
*/
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;
}
}


分享到:
评论

相关推荐

    C# 图片添加水印(图片或者文字)

    在C#编程中,添加水印到图片是一项常见的任务,特别是在设计软件或处理图像的应用程序中。本示例主要关注如何使用C#和WPF(Windows Presentation Foundation)技术来实现这个功能,既可以添加图片水印,也可以添加...

    易语言图片加水印

    在“易语言图片加水印”这个主题中,我们主要探讨如何利用易语言来实现对图片添加水印的功能。水印通常用于保护版权,或者为图像增添个性化的标识。 首先,我们要理解什么是水印。水印是图片处理中的一个常见概念,...

    springboot实现上传图片添加水印

    在Spring Boot框架中实现图片上传并添加水印的功能,是一个常见的需求,特别是在开发涉及多媒体内容的Web应用时。下面将详细介绍这个过程,并涵盖相关的技术点。 首先,我们需要了解Spring Boot如何处理文件上传。...

    java给图片添加水印

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

    java图片加水印(适应铺满)

    开发一个项目,需要用到图片加水印的功能,这里考虑使用后台加水印,在上传的时候或者回显到页面时候,取图片文件的流数据,进行加水印在返回流数据就行了,非常简单,不懂可以问我

    QT给图片加水印(pro工程+代码)

    QT给图片加水印是一种常见的图像处理操作,用于在图片上添加标识或版权信息,防止未经授权的使用。本文将深入探讨如何使用Qt框架实现这一功能,包括必要的编程知识和步骤。 首先,Qt是一个跨平台的应用程序开发框架...

    PHP为原图片添加水印图片

    使用PHP,为图片添加水印图片。 缩放源水印图片,使其最大宽/高度不能超过原图片。

    html2canvas 网页对图片加水印

    在网页上对图片添加水印,通常是为了防止图片被未经授权的用户盗用,或者为了在分享的图片上显示一些特定的信息,如日期、用户标识或公司Logo。 使用HTML2Canvas添加水印的过程分为以下几个步骤: 1. **引入库**:...

    delphi实现给图片加水印2用ImageEn控件

    ### Delphi 实现给图片添加水印:使用 ImageEn 控件 #### 背景介绍 在 Delphi 开发环境中,实现对图像处理的需求时,经常会遇到需要为图片添加水印的情况。添加水印不仅可以保护图片版权,还能提高品牌识别度。本文...

    winform 图片加水印文字和水印图片

    总的来说,这个WinForm应用提供了一个方便的工具,可以对图片进行多种操作,如加水印(文字和图片)、等比例缩放和压缩,这对于日常需要处理图片的工作非常实用。通过理解并应用GDI+的图形处理技术,开发者可以...

    给图片加水印

    VB(Visual Basic)是一种由微软开发的编程环境,它提供了简单易用的图形用户界面(GUI)创建工具和丰富的功能,使得创建给图片加水印的小程序变得容易。下面我们将深入探讨如何使用VB来实现这个功能,以及涉及到的...

    Winform图片加水印

    通过以上步骤,你就可以在Winform应用中实现一个功能完善的图片加水印工具,包括图片和文字水印,以及透明度和字体调整。这个过程涉及了Windows Forms控件的使用、图像处理和图形绘制,是.NET框架中基础但实用的技能...

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

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

    易优批量图片加水印插件

    易优批量图片加水印插件是一款针对易优CMS(EyouCMS)设计的专业插件,主要用于提升网站的用户体验和优化网页加载速度。在互联网环境中,网页加载速度是影响用户体验的关键因素之一,尤其是当页面中包含大量图片时,...

    java图片加水印工具类

    总之,这个“java图片加水印工具类”是一个实用的组件,可以帮助Java开发者轻松地在图片上添加水印,提升工作效率,同时保持代码的整洁和可维护性。无论你是进行个人项目还是企业级应用,它都能成为一个有价值的辅助...

    微信小程序用Canvas给图片加水印,拼接图片,制作名片PHelper-master.zip

    1. **给图片加水印**: 在这个项目中,开发者可能会使用`wx.createSelectorQuery()`来选取Canvas元素,然后通过`canvasContext.drawImage()`方法加载图片并将其绘制到Canvas上。接着,利用`canvasContext....

    java 图片添加水印

    java 图片添加水印 图片叠加文字类 图片生成方法,如果需要在已有的图片叠加文字

    C#实现图片加水印

    在C#编程中,给图片添加水印是一项常见的...总之,C#提供了一套完整的API来处理图像和水印,使得在程序中实现图片加水印变得简单易行。通过理解并熟练运用上述技术,开发者可以轻松地为自己的项目添加这一实用功能。

    Vb图片加水印组件.rar

    "Vb图片加水印组件.rar" 提供了一个实用的技术方案,帮助开发者实现这一功能。该组件使得在图片上叠加图片或文字水印变得简单,通过VB的内置控件Picture1.Picture属性进行操作,并能将处理后的图片保存为新的格式。 ...

    图片加水印小工具绿色版

    【图片加水印小工具绿色版】是一款便捷的软件,专为用户设计,用于在图片上添加水印,以保护版权或进行个性化定制。这款工具因其便携式特性,无需安装即可直接运行,大大简化了用户的操作流程。下面将详细介绍这款...

Global site tag (gtag.js) - Google Analytics