[size=large][color=blue]
图片水印:
package michael.io.image;
import java.awt.AlphaComposite;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.RenderingHints;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageDecoder;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
/**
* 图片水印
* @blog http://sjsky.iteye.com
* @author Michael
*/
public class ImageMarkLogoByIcon {
/**
* @param args
*/
public static void main(String[] args) {
String srcImgPath = "d:/test/michael/myblog_01.png";
String iconPath = "d:/test/michael/blog_logo.png";
String targerPath = "d:/test/michael/img_mark_icon.jpg";
String targerPath2 = "d:/test/michael/img_mark_icon_rotate.jpg";
// 给图片添加水印
ImageMarkLogoByIcon.markImageByIcon(iconPath, srcImgPath, targerPath);
// 给图片添加水印,水印旋转-45
ImageMarkLogoByIcon.markImageByIcon(iconPath, srcImgPath, targerPath2,
-45);
}
/**
* 给图片添加水印
* @param iconPath 水印图片路径
* @param srcImgPath 源图片路径
* @param targerPath 目标图片路径
*/
public static void markImageByIcon(String iconPath, String srcImgPath,
String targerPath) {
markImageByIcon(iconPath, srcImgPath, targerPath, null);
}
/**
* 给图片添加水印、可设置水印图片旋转角度
* @param iconPath 水印图片路径
* @param srcImgPath 源图片路径
* @param targerPath 目标图片路径
* @param degree 水印图片旋转角度
*/
public static void markImageByIcon(String iconPath, String srcImgPath,
String targerPath, Integer degree) {
OutputStream os = null;
try {
Image srcImg = ImageIO.read(new File(srcImgPath));
BufferedImage buffImg = new BufferedImage(srcImg.getWidth(null),
srcImg.getHeight(null), BufferedImage.TYPE_INT_RGB);
// 得到画笔对象
// Graphics g= buffImg.getGraphics();
Graphics2D g = buffImg.createGraphics();
// 设置对线段的锯齿状边缘处理
g.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
RenderingHints.VALUE_INTERPOLATION_BILINEAR);
g.drawImage(srcImg.getScaledInstance(srcImg.getWidth(null), srcImg
.getHeight(null), Image.SCALE_SMOOTH), 0, 0, null);
if (null != degree) {
// 设置水印旋转
g.rotate(Math.toRadians(degree),
(double) buffImg.getWidth() / 2, (double) buffImg
.getHeight() / 2);
}
// 水印图象的路径 水印一般为gif或者png的,这样可设置透明度
ImageIcon imgIcon = new ImageIcon(iconPath);
// 得到Image对象。
Image img = imgIcon.getImage();
float alpha = 0.5f; // 透明度
g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP,
alpha));
// 表示水印图片的位置
g.drawImage(img, 150, 300, null);
g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER));
g.dispose();
os = new FileOutputStream(targerPath);
// 生成图片
ImageIO.write(buffImg, "JPG", os);
System.out.println("图片完成添加Icon印章。。。。。。");
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (null != os)
os.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
文字水印:
package michael.io.image;
import java.awt.AlphaComposite;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.RenderingHints;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import javax.imageio.ImageIO;
/**
* 文字水印
* @blog http://sjsky.iteye.com
* @author Michael
*/
public class ImageMarkLogoByText {
/**
* @param args
*/
public static void main(String[] args) {
String srcImgPath = "d:/test/michael/myblog_01.jpg";
String logoText = "[ 测试文字水印 http://sjsky.iteye.com ]";
String targerPath = "d:/test/michael/img_mark_text.jpg";
String targerPath2 = "d:/test/michael/img_mark_text_rotate.jpg";
// 给图片添加水印
ImageMarkLogoByText.markByText(logoText, srcImgPath, targerPath);
// 给图片添加水印,水印旋转-45
ImageMarkLogoByText.markByText(logoText, srcImgPath, targerPath2, -45);
}
/**
* 给图片添加水印
* @param logoText
* @param srcImgPath
* @param targerPath
*/
public static void markByText(String logoText, String srcImgPath,
String targerPath) {
markByText(logoText, srcImgPath, targerPath, null);
}
/**
* 给图片添加水印、可设置水印的旋转角度
* @param logoText
* @param srcImgPath
* @param targerPath
* @param degree
*/
public static void markByText(String logoText, String srcImgPath,
String targerPath, Integer degree) {
// 主图片的路径
InputStream is = null;
OutputStream os = null;
try {
Image srcImg = ImageIO.read(new File(srcImgPath));
BufferedImage buffImg = new BufferedImage(srcImg.getWidth(null),
srcImg.getHeight(null), BufferedImage.TYPE_INT_RGB);
// 得到画笔对象
// Graphics g= buffImg.getGraphics();
Graphics2D g = buffImg.createGraphics();
// 设置对线段的锯齿状边缘处理
g.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
RenderingHints.VALUE_INTERPOLATION_BILINEAR);
g.drawImage(srcImg.getScaledInstance(srcImg.getWidth(null), srcImg
.getHeight(null), Image.SCALE_SMOOTH), 0, 0, null);
if (null != degree) {
// 设置水印旋转
g.rotate(Math.toRadians(degree),
(double) buffImg.getWidth() / 2, (double) buffImg
.getHeight() / 2);
}
// 设置颜色
g.setColor(Color.red);
// 设置 Font
g.setFont(new Font("宋体", Font.BOLD, 30));
float alpha = 0.5f;
g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP,
alpha));
// 第一参数->设置的内容,后面两个参数->文字在图片上的坐标位置(x,y) .
g.drawString(logoText, 150, 300);
g.dispose();
os = new FileOutputStream(targerPath);
// 生成图片
ImageIO.write(buffImg, "JPG", os);
System.out.println("图片完成添加文字印章。。。。。。");
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (null != is)
is.close();
} catch (Exception e) {
e.printStackTrace();
}
try {
if (null != os)
os.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
[/color]
[/size]
分享到:
相关推荐
本篇文章将详细探讨如何使用Java实现图片水印的添加,以及相关的知识点。 首先,我们需要了解Java中的图像处理库。Java标准库提供了`java.awt`和`javax.imageio`包,它们包含了处理图像的基本功能。`java.awt`包中...
在Java编程语言中,添加水印是一项常见的任务,特别是在处理图像和文档时,为了保护版权或者增加信息。这里我们将深入探讨两种方法,一种是给文字添加...通过这种方式,你可以灵活地为你的项目实现高质量的水印功能。
"java水印功能通用类"是一个专门为实现这一目的而设计的代码库,它提供了一种方便、可复用的方式来为各种类型的数据添加水印。下面我们将深入探讨Java水印功能的相关知识点,以及如何使用此类库进行实际操作。 1. *...
在Java编程语言中,添加图片水印是一项常见的图像处理任务,尤其在版权保护、品牌推广等领域广泛应用。通过编写代码,我们可以灵活...通过熟练掌握这些技巧,你可以轻松地在自己的项目中添加专业级别的图片水印功能。
### 使用Java实现图片水印的关键知识点 #### 一、背景介绍 在当今互联网时代,图片作为信息传递的重要载体之一,在各个领域中发挥着至关重要的作用。为了保护图片版权或者增加品牌标识度,很多网站和应用会选择为...
在Java盲水印BlindWatermark的实现中,通常有两种主要的方法:空域方法和频域方法。空域方法直接修改图像的像素值,而频域方法则是通过傅立叶变换等操作改变图像的频谱特性来嵌入水印。这两种方法都旨在确保水印在...
以上就是Java实现文字水印和图标水印的基本步骤。在实际应用中,可能还需要考虑水印的位置、透明度、旋转角度等因素,以达到最佳的视觉效果。同时,为了提高性能,可以考虑对大批量图片进行批量处理,或者使用多线程...
在Java编程中,给图片添加水印是一项常见的需求,无论是为了版权保护还是...但以上代码已经足够作为基础,帮助你开始在Java中实现图片加水印的功能。记得在运行此代码前,确保已经正确引入了Apache Commons Imaging库。
这个库允许开发者在Java应用程序中实现文件的创建、读取、修改、转换和打印等功能,无需依赖任何第三方软件。然而,免费版本的Aspose for Java通常会带有水印,并且对处理文件的数量有限制,这可能对商业应用造成...
总的来说,Java实现动态水印的过程涉及了文件I/O操作、图像处理和第三方库的使用。通过jxl库,开发者可以方便地在Excel文件上添加自定义的水印,以增加数据安全性。而提供修改过的jar包则表明这是一个针对特定需求...
下面将详细讲解如何使用Java实现这个功能。 首先,我们需要了解基本概念。水印通常是一个文字、图像或者透明度调整过的图案,被叠加到原始图片上,以达到标识或保护目的。在Java中,我们可以利用Java Advanced ...
总结起来,通过Java和iText库,我们可以方便地实现PDF文字水印的功能,保护文档的版权和防止非法复制。在处理包含亚洲字符的PDF时,需要引入如iTextAsianCmaps.jar这样的特殊字符集支持文件。这个过程需要对PDF结构...
通过以上这些知识点的结合运用,我们可以构建一个功能完善的Java应用,实现图片上传并添加自定义水印的效果,满足不同需求。这个过程既包括了基本的图像处理技术,也涵盖了Web服务和GUI设计的实践。
Java的`ImageIO`和` BufferedImage`类提供了缩放图片的功能。我们可以使用`getScaledInstance`方法进行等比例缩放,或者通过`Graphics2D`的`drawImage`方法自定义缩放比例。在处理过程中需要注意保持图片的原始宽高...
本知识点主要探讨如何在Java中实现自适应图片大小的水印功能,以及遇到图片过小时的处理策略。 首先,我们需要理解水印的基本概念。水印是在图像或文档上添加的一种视觉标记,它可以是文字、图像或者图形,用于表明...
这个API提供了读取、写入、播放和处理音频文件的能力,对于实现音频水印功能至关重要。 7. **文件I/O操作**:Java中的`java.io`包提供了处理文件输入输出的类和方法,如`FileInputStream`和`FileOutputStream`,...
`Graphics2D`是Java 2D API的一部分,它提供了丰富的功能,可以用来在图像上添加文本、图像等元素,实现水印效果。下面我们将深入探讨如何使用`Graphics2D`处理图片水印。 1. **Java 2D API** Java 2D API 是Java...
本文将详细讲解如何利用Java实现这一功能,包括如何动态设置水印的文字大小、颜色以及水印的倾斜角度。 首先,我们需要一个基础的图像处理库,如Java的`java.awt`和`java.awt.image`包,它们提供了处理图像的基本...
在处理文档操作时,Java提供了一些库来实现高级功能,比如在Word文档中添加图片水印。本篇将深入探讨如何使用Java和两个特定的库——iTextPDF与Jacob——来实现这一目标。 首先,iTextPDF是一个开源的Java库,专门...
接下来,`PdfUtil.java`和`controller.java`可能是实现具体功能的Java类。`PdfUtil`可能包含去除水印和转换文件为PDF的逻辑,而`controller`可能是处理用户请求的控制器,调用`PdfUtil`的方法来执行实际操作。例如,...