- 浏览: 88580 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
z694571598:
set 在哪?
js实现Set,Map,List,Queue -
coolboy09:
java并发编程实战上有类似的例子。我有一个疑惑,现在提出来和 ...
高速缓存实现 -
znlyj:
我同样关注,怎么更新缓存?另外,如果我不想将计算结果放到进程内 ...
高速缓存实现 -
Terry_zzz:
很好, 总结的很全面 谢谢!
深入浅出设计模式之单态模式(singleton) -
supertianyi:
好文,学习了
精通js中的Array
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("d:\\imgtest\\sy.jpg", "d:\\imgtest\\test1.jpg", 0, 0, 0.5f);
pressText("水印文字", "d:\\imgtest\\test1.jpg", "黑体", 12, Color.white, 80, 0, 0, 0.3f);
resize("d:\\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;
}
}
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("d:\\imgtest\\sy.jpg", "d:\\imgtest\\test1.jpg", 0, 0, 0.5f);
pressText("水印文字", "d:\\imgtest\\test1.jpg", "黑体", 12, Color.white, 80, 0, 0, 0.3f);
resize("d:\\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;
}
}
发表评论
-
Maven2 POM.xml 配置元素详解
2011-06-16 08:56 1421<!--可以免费转载,转载时请注明出处 http:// ... -
深入浅出URL编码
2010-12-24 09:35 948一、问题: 编码问题是JAVA初学者在web开 ... -
mysql自动关闭服务、连接限制等问题的解决方法
2010-11-22 09:36 3036通过mysql服务器端程序mysql Administrato ... -
高速缓存实现
2010-06-08 10:39 3995各位大虾,本人实现 ... -
Java开发中文件上传应用
2010-05-15 23:54 1163今天闲暇无所事事,很长时间没有写博客了,突然想起很多开发 ... -
Java ClassLoader 详解
2010-03-23 12:33 1102类加载器是 Java 语言的一个创新,也是 Java 语言流行 ... -
Java垃圾回收机制和性能调优
2010-01-29 12:40 8781.JVM的gc概述 g ... -
Java编码问题
2009-11-25 16:36 741乱码对于使用非英语文 ... -
JDK+Tomcat +eclipse+MyEclipse的配置
2009-11-16 14:48 1187说一下关于JDK+Tomcat +ecli ... -
Java正则表达式的解释说明
2009-10-28 18:18 713表达式意义: 1.字符 x ... -
Freemarker语法
2009-10-21 15:29 791常用语法 EG.一个对象BOOK 1.输出 $…{book.n ... -
Servlet的两种跳转区别
2009-10-19 13:46 1287在servlet中,一般跳转都 ... -
Berkeley DB实例
2009-10-15 09:49 1334package test; import com.sleep ... -
Berkeley DB使用说明
2009-10-14 18:32 1775关键字: berkeley db java edi ... -
Tomcat配置详解
2009-09-29 11:44 968第一步:下载j2sdk和tomcat 到sun官方站(htt ... -
URLConnection的连接、超时、关闭用法总结
2009-09-10 12:57 1797ava中可以使用HttpURLConnection来请求WEB ... -
时间操作工具类
2009-09-09 14:27 3213在项目开发工程中,使用了很多时间的操作,改工具类提供了很 ... -
Java操作图片改变大小加水印
2009-09-09 11:21 2070在实际的项目开发中,有可能遇到对图片的操作,比如加水印, ... -
操作抓取网络资源
2009-09-08 12:57 861在实际开发过程中,大家难免遇到抓取网络资源的操作,列如:抓 ... -
java中操作Excel
2009-09-08 12:49 1060在企业级开发中,经常遇到读写excel的操作,在此将一些 ...
相关推荐
在Java编程语言中,处理图片水印涉及到图像处理和图形绘制技术。`Graphics2D`是Java 2D API的一部分,它提供了丰富的功能,可以用来在图像上添加文本、图像等元素,实现水印效果。下面我们将深入探讨如何使用`...
总结来说,Java提供了丰富的API来处理图片水印和大小改变,而Struts2则提供了强大的Web开发支持。结合这两者,我们可以构建出高效、灵活的图片处理服务。理解并熟练掌握这些技术,对于提升Java Web开发能力大有裨益...
本篇文章将详细探讨如何使用Java实现图片水印的添加,以及相关的知识点。 首先,我们需要了解Java中的图像处理库。Java标准库提供了`java.awt`和`javax.imageio`包,它们包含了处理图像的基本功能。`java.awt`包中...
Java 生成水印图片技术详解 ...Java 生成水印图片技术可以广泛应用于图片保护和图片处理领域,如图片分享、图片编辑和图片识别等。该技术可以保护图片的所有权和确认图片的来源,防止图片被非法使用和篡改。
JAVA处理图片 加文字水印以及灰色透明背景,处理图片。
总的来说,Java通过Apache POI和PDFBox等库,为开发者提供了强大的工具来操作Word和PDF文档,并生成图片水印。这不仅可以提高工作效率,也能有效地保护和标记文档内容。通过深入学习和实践,开发者可以掌握这些技能...
本知识点主要探讨如何在Java中实现自适应图片大小的水印功能,以及遇到图片过小时的处理策略。 首先,我们需要理解水印的基本概念。水印是在图像或文档上添加的一种视觉标记,它可以是文字、图像或者图形,用于表明...
第二种是添加图片水印和文字水印两种方法,水印图片可以是GIF,PNG透明的文件,我一般采用的是PNG的,因为它的质量和GIF相比要高一些; 适用人群:Java开发者 使用场景:版权信息标注 目标:可以直接拿来用
2. **创建水印工具类**:创建一个名为`WatermarkUtils`的Java类,包含添加文字水印和图片水印的方法。 - **添加文字水印**:首先读取原始图片,然后创建一个含有文字的透明图像(水印),设置合适的字体、颜色、...
在Java编程环境中,给图片添加文字或图片水印是一项常见的图像处理任务,广泛应用于版权保护、品牌宣传等领域。本项目“基于Java给图片添加文字或图片水印”旨在教授如何利用Java实现这一功能,适用于大学生的课程...
### 使用Java实现图片水印的关键知识点 #### 一、背景介绍 在当今互联网时代,图片作为信息传递的重要载体之一,在各个领域中发挥着至关重要的作用。为了保护图片版权或者增加品牌标识度,很多网站和应用会选择为...
Java数字图像水印处理是一种在图像中嵌入隐藏信息的技术,通常用于版权保护、认证或追踪图像来源。在这个基于Eclipse的项目中,开发者利用Java的强大学术和工业支持,构建了一个简单但功能完备的数字水印系统,涵盖...
在Java编程语言中,生成带有水印的图片是一项常见的任务,尤其在版权保护、品牌标识或者数据可视化等领域。本文将详细讲解如何利用Java实现这一功能,包括如何动态设置水印的文字大小、颜色以及水印的倾斜角度。 ...
总的来说,这个Java代码库提供了图片水印功能,包括对水印的透明度和位置的自定义,以及支持生成带有水印的动画GIF。它利用了Java丰富的图像处理库,结合了颜色量化和数据压缩技术,是进行图片处理和编辑的实用工具...
util实现Java图片水印添加功能,有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、水印图片的路径,水印一般格式是gif,png,这种图片可以设置透明度、水印旋转等,可以参考代码加以...
Java盲水印BlindWatermark具有多项关键特性,首先,它的抗干扰性强,即便图像遭受一定程度的破坏,如质量下降、压缩处理,甚至旋转,水印依然可以被提取出来,保证了信息的完整性。其次,其安全性突出,采用的独特...
在实际应用中,你可能还需要处理更多细节,比如根据图片的宽高比动态调整水印的位置和大小,或者支持图片水印,这需要对图像处理有更深入的理解。但以上代码已经足够作为基础,帮助你开始在Java中实现图片加水印的...
解决图片的批量处理大小,批量给图片加图片水印,加文字水印
在Java编程语言中,添加文字或图片水印是一项常见的任务,尤其在处理图像处理和多媒体应用时。Graphics2D是Java 2D API的一部分,它提供了丰富的绘图和图形操作功能,包括添加水印到图像。下面将详细介绍如何使用...
SimpleImage是阿里巴巴的一个Java图片处理的类库,可以实现图片缩略、水印等处理。 SimpleImage中的ImageRender是图片处理的基类,它是一个抽象类,我们看到,该类中定义了一个抽象方法render(),同时持有一个对...