JAVA给图片添加水印
添加文字和图片水印
import com.sun.image.codec.jpeg.JPEGImageEncoder;
public final class ImageUtils {
public ImageUtils() {
String fontName, int fontStyle, int color, int fontSize, int x,
int y) {
try {
File _file = new File(targetImg);
Image src = Байду номын сангаасmageIO.read(_file);
int wideth = src.getWidth(null);
int height = src.getHeight(null);
BufferedImage image = new BufferedImage(wideth, height,
BufferedImage.TYPE_INT_RGB);
第二种是添加图片水印和文字水印两种方法,水印图片可以是GIF,PNG透明的文件,我一般采用的是PNG的,因为它的质量和GIF相比要高一些:
Java代码
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
Graphics g = image.createGraphics();
g.drawImage(src, 0, 0, wideth, height, null);
// String s="";
java实现图片加水印效果
java实现图⽚加⽔印效果图⽚加⽔印代码,这些代码不常⽤,但是⽤到的时候需要注意的地⽅也挺多的,每次都重写⽐较⿇烦,记下来备忘。
代码是图⽚加⽔印的⼀般流程,可根据实际项⽬需要⾃⾏修改。
注:代码在JPG和PNG格式图⽚下测试通过,其他图⽚格式请⾃⾏测试和修改import java.awt.AlphaComposite;import java.awt.Color;import java.awt.Font;import java.awt.FontMetrics;import java.awt.Graphics2D;import java.awt.RenderingHints;import java.awt.geom.AffineTransform;import java.awt.image.BufferedImage;import java.io.File;import java.util.Iterator;import javax.imageio.IIOImage;import javax.imageio.ImageIO;import javax.imageio.ImageReader;import javax.imageio.ImageWriteParam;import javax.imageio.ImageWriter;import javax.imageio.stream.FileImageInputStream;import javax.imageio.stream.FileImageOutputStream;import org.junit.Test;public class Wjt {@Testpublic void t3() throws Exception {File rootDir = new File("C:/Users/Administrator/Desktop/tem1");String[] fa = { "1.png", "2.jpg" };for (String s : fa) {String f = s;{FileImageInputStream fileImageInputStream = new FileImageInputStream(new File(rootDir, f));Iterator<ImageReader> imageReaders = ImageIO.getImageReaders(fileImageInputStream); //根据图⽚⽂件获取读取器ImageReader imageReader = imageReaders.hasNext() ? imageReaders.next() : null; //检测读取器是否存在imageReader.setInput(fileImageInputStream); //设置读取器输⼊流BufferedImage bufferedImage = imageReader.read(0); //从读取器取BufferedImage,这⾥只有⼀个,所以可以直接写0{ //开始加⽔印Graphics2D graphics2d = bufferedImage.createGraphics(); //取画笔graphics2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON); //设置画笔⽂字抗锯齿graphics2d.transform(AffineTransform.getTranslateInstance(bufferedImage.getWidth() / 2, bufferedImage.getHeight() / 2)); //将画笔移动到图⽚中央graphics2d.transform(AffineTransform.getRotateInstance(Math.toRadians(45))); //将画笔旋转⼀定弧度float radius = Double.valueOf(Math.sqrt(bufferedImage.getWidth() * bufferedImage.getWidth() + bufferedImage.getHeight() * bufferedImage.getHeight()) / 2).floatValue(); //计算图⽚外切圆半径 Font waterMarkerFont = new Font("微软雅⿊", Font.PLAIN, bufferedImage.getHeight() / 25); //设置画笔要⽤的字体,这⾥可以设置字体样式和⼤⼩graphics2d.setFont(waterMarkerFont); //设置画笔字体graphics2d.setColor(Color.WHITE); //设置画笔颜⾊graphics2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, 0.3F)); //设置画笔操作透明度FontMetrics fontMetrics = graphics2d.getFontMetrics(); //取画笔字体信息String waterMarker = "THIS IS WATERMARK."; //⽔印⽂字int stringWidth = fontMetrics.stringWidth(waterMarker); //计算⽔印⽂字宽度,很多⼈卡在了这⼀步for (float i = -radius; i <= radius; i += (stringWidth + bufferedImage.getHeight() / 25)) { //循环添加⽔印,这⾥可以设置⽔印⽔平距离,单位:pxfor (float j = -radius; j <= radius; j += (fontMetrics.getHeight() + bufferedImage.getHeight() / 25)) { //这⾥可以设置⽔印垂直距离,单位:pxgraphics2d.drawString(waterMarker, i, j); //画⽔印}}graphics2d.dispose(); //释放画笔资源}ImageWriter imageWriter = ImageIO.getImageWriter(imageReader); //根据图⽚⽂件读取器获取图⽚⽂件写⼊器String[] split = f.split("\\.");FileImageOutputStream fileOutputStream = new FileImageOutputStream(new File(rootDir, split[0] + "r." + split[1])); //⽣成⽬标图⽚⽂件路径imageWriter.setOutput(fileOutputStream); //设置写⼊器输出流IIOImage iioImage = new IIOImage(bufferedImage, null, null);ImageWriteParam imageWriteParam = imageWriter.getDefaultWriteParam();if (imageReader.getFormatName().equals("JPEG")) { //jpg格式图⽚可设置输出图⽚⽂件的质量imageWriteParam.setCompressionMode(ImageWriteParam.MODE_EXPLICIT); //这⼀⾏固定这样写,跟下⼀⾏搭配imageWriteParam.setCompressionQuality(0.947F); //跟上⼀⾏搭配,设置输出图⽚⽂件的质量}imageWriter.write(null, iioImage, imageWriteParam); //写⽂件imageWriter.dispose(); //关闭写⼊器imageReader.dispose(); //关闭读取器}}}}代码流程在注释中写的很详细了,不多做解释。
基于Java语言的图像水印技术研究
基于Java语言的图像水印技术研究一、引言随着互联网和数字化技术的快速发展,图像在我们的日常生活中扮演着越来越重要的角色。
然而,随之而来的问题是图像的盗用和篡改现象也日益猖獗。
为了保护图像的版权和真实性,图像水印技术应运而生。
本文将重点探讨基于Java语言的图像水印技术研究。
二、图像水印技术概述图像水印技术是一种在数字图像中嵌入特定信息以实现身份认证、版权保护和内容完整性验证的技术。
通过在图像中添加水印信息,可以有效地防止图像被恶意篡改或盗用。
三、基于Java语言的图像处理库Java作为一种跨平台的编程语言,拥有丰富的图像处理库,如Java Advanced Imaging (JAI)和Java Image I/O。
这些库提供了丰富的API和功能,方便开发人员对图像进行处理和操作。
四、基于Java语言的图像水印算法1. 数字水印算法数字水印算法是一种将特定信息嵌入到数字媒体中的技术。
在Java语言中,可以利用LSB(Least Significant Bit)算法将水印信息嵌入到图像的最低有效位中,实现对图像的保护。
2. 空域水印算法空域水印算法是一种直接在空间域对原始图像进行修改以嵌入水印信息的方法。
在Java中,可以通过修改像素点的RGB值或灰度值来实现空域水印算法。
3. 频域水印算法频域水印算法是一种将水印信息嵌入到图像的频域表示中的方法。
在Java中,可以利用快速傅里叶变换(FFT)等算法将水印信息转换到频域,并嵌入到原始图像中。
五、基于Java语言的图像水印系统设计与实现1. 系统架构设计基于Java语言的图像水印系统通常包括前端界面设计、后端算法实现和数据库存储等模块。
开发人员可以根据需求选择合适的技术栈进行系统设计。
2. 算法实现开发人员可以根据具体需求选择合适的水印算法进行实现,并结合Java语言提供的图像处理库对图像进行处理和操作。
3. 系统测试与优化完成系统开发后,需要进行系统测试以验证系统功能和性能,并根据测试结果对系统进行优化和调整,以提高系统稳定性和用户体验。
Java 在PDF中添加文本水印和图片水印_基于Spire.Cloud.SDK for Java
Java 在PDF中添加文本水印、图片水印(基于Spire.Cloud.SDK for Java)Spire.Cloud.SDK for Java提供了接口pdfWartermarkApi可用于添加文本水印addTextWartermark()和图片水印addImageWartermark()到PDF文档。
文本将通过Java示例介绍具体实现方法。
首先请参考以下步骤准备程序运行环境:一、导入jar文件。
(有2种方式)(推荐)方式1. 创建Maven项目程序,通过maven仓库下载导入。
以IDEA为例,新建Maven项目,在xml文件中配置maven仓库路径,并指定spire.cloud.sdk的依赖,如下:<repositories><repository><id>com.e-iceblue</id><name>cloud</name><url>/repository/maven-public/</url></repository></repositories><dependencies><dependency><groupId> cloud </groupId><artifactId>spire.cloud.sdk</artifactId><version>3.5.0</version></dependency><dependency><groupId> com.google.code.gson</groupId><artifactId>gson</artifactId><version>2.8.1</version></dependency><dependency><groupId> com.squareup.okhttp</groupId><artifactId>logging-interceptor</artifactId><version>2.7.5</version></dependency><dependency><groupId> com.squareup.okhttp </groupId><artifactId>okhttp</artifactId><version>2.7.5</version></dependency><dependency><groupId> com.squareup.okio </groupId><artifactId>okio</artifactId><version>1.6.0</version></dependency><dependency><groupId> io.gsonfire</groupId><artifactId>gson-fire</artifactId><version>1.8.0</version></dependency><dependency><groupId>io.swagger</groupId><artifactId>swagger-annotations</artifactId><version>1.5.18</version></dependency><dependency><groupId> org.threeten </groupId><artifactId>threetenbp</artifactId><version>1.3.5</version></dependency></dependencies>完成配置后,点击“Import Changes” 即可导入所有需要的jar文件。
Java 如何在PDF文档中添加水印
Java在PDF中添加水印(文本/图片水印)水印是一种十分常用的防伪手段,常用于各种文档、资料等。
常见的水印,包括文字类型的水印、图片或logo类型的水印。
以下Java示例,将分别使用insertTextWatermark(PdfPageBase page, String watermark)方法以及page.SetBackgroundImage(String arg0)方法来设置文本水印和图片水印。
下面将演示具体的代码操作,内容供参考。
工具:Spire.PDF for Java文件引用:步骤1:首先,在Java程序中新建一个文件夹可命名为Lib。
下载安装Spire.PDF for Java 的包后,解压,将解压后的文件夹下的子文件夹lib中的Spire.Pdf.jar和mon.jar 两个文件复制到新建的文件夹下,如下图:步骤2:建好文件夹后,引用两个文件:选中这两个文件,点击鼠标右键,选择“Build Path”–“Add to Build Path”。
Java代码示例(供参考)【示例1】添加文本水印import com.spire.pdf.*;import com.spire.pdf.graphics.*;import java.awt.*;import java.awt.geom.*;public class Textwatermark {public static void main(String[] args) {//创建PdfDocument类的对象PdfDocument pdf = new PdfDocument();//加载测试文档pdf.loadFromFile("test.pdf");//获取测试文档中的第一页PdfPageBase page = pdf.getPages().get(0);//调用insertWatermark()方法添加文本水印insertWatermark(page, "TOP SECRET");//保存文档pdf.saveToFile("out/textWaterMark.pdf");}static void insertWatermark(PdfPageBase page, String watermark)Dimension2D dimension2D = new Dimension();dimension2D.setSize(page.getCanvas().getClientSize().getWidt h() / 2, page.getCanvas().getClientSize().getHeight() / 2); PdfTilingBrush brush = new PdfTilingBrush(dimension2D); brush.getGraphics().setTransparency(0.4F);brush.getGraphics().save();brush.getGraphics().translateTransform((float)brush.getSize().getWidth() / 2, (float)brush.getSize().getHeight() / 2);brush.getGraphics().rotateTransform(-45);brush.getGraphics().drawString(watermark, newPdfFont(PdfFontFamily.Helvetica, 30), PdfBrushes.getViolet(), 0 , 0 , new PdfStringFormat(PdfTextAlignment.Center)); brush.getGraphics().restore();brush.getGraphics().setTransparency(1);Rectangle2D loRect = new Rectangle2D.Float();loRect.setFrame(new Point2D.Float(0, 0),page.getCanvas().getClientSize());page.getCanvas().drawRectangle(brush, loRect);}}文本水印添加效果:【示例2】添加图片水印import com.spire.pdf.*;import java.awt.geom.Rectangle2D;public class watermark {public static void main(String[] args) {//实例化PdfDocument类的对象,并加载测试文档PdfDocument doc = new PdfDocument();doc.loadFromFile("test.pdf");//获取文档第1页PdfPageBase page = doc.getPages().get(0);//加载图片,设置为背景水印page.setBackgroundImage("logo.png");//指定水印在文档中的位置及图片大小Rectangle2D.Float rect = new Rectangle2D.Float(); rect.setRect(150, 150, 300, 150);page.setBackgroundRegion(rect);//保存文档doc.saveToFile("output/imageWaterMark.pdf"); doc.close();}}图片水印添加效果:(本文完)。
Java通过POI和JXL给Excel动态添加水印
一:设置水印要显示的model类(非必要)package zp.ExcelUtil;import java.text.SimpleDateFormat;import java.util.Date;public class Model {private String ip;private String user;private Date date;public Model() {// TODO Auto-generated constructor stub}public Model(String ip, String user, Date date) {this.ip = ip;er = user;this.date = date;}public String getIp() {return ip;}public void setIp(String ip) {this.ip = ip;}public String getUser() {return user;}public void setUser(String user) {er = user;}public String getDate() {SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日HH时mm分ss秒");return sdf.format(date);}public void setDate(Date date) {this.date = date;}}二.编写工具类package zp.ExcelUtil;import java.awt.AlphaComposite;import java.awt.BasicStroke;import java.awt.Color;import java.awt.Font;import java.awt.Graphics2D;import java.awt.font.FontRenderContext;import java.awt.geom.Rectangle2D;import java.awt.image.BufferedImage;import java.io.File;import java.io.IOException;import ng.reflect.Method;import java.util.HashMap;import java.util.Iterator;import java.util.Map;import javax.imageio.ImageIO;import org.json.JSONException;import org.json.JSONObject;public class Utilss {private static int width = 900; // 水印图片的宽度private static int height = 1020; // 水印图片的高度因为设置其他的高度会有黑线,所以拉高高度/*** 将JavaBean转换成JSONObject(通过Map中转)** @param bean* javaBean* @return json对象* @throws Exception*/public static JSONObject modelToJSON(Object bean) throws Exception {return new JSONObject(toMap(bean));}/*** 将Javabean转换为Map** @param javaBean* javaBean* @return Map对象*/@SuppressWarnings({ "unchecked", "rawtypes" })public static Map toMap(Object javaBean) throws Exception { Map result = new HashMap();Method[] methods = javaBean.getClass().getDeclaredMethods();for (Method method : methods) {if (method.getName().startsWith("get")) {String field = method.getName();field = field.substring(field.indexOf("get") + 3);field = field.toLowerCase().charAt(0) + field.substring(1);Object value = method.invoke(javaBean, (Object[]) null);result.put(field, null == value ? "" : value.toString());}}return result;}/*** 将Json对象转换成Map** @param jsonObject* json对象* @return Map对象* @throws JSONException*/@SuppressWarnings({ "rawtypes", "unchecked" })public static Map toMap(String jsonString) throws JSONException { JSONObject jsonObject = new JSONObject(jsonString);Map result = new HashMap();Iterator iterator = jsonObject.keys();String key = null;String value = null;while (iterator.hasNext()) {key = (String) iterator.next();value = jsonObject.getString(key);result.put(key, value);}return result;}/*** 生成水印图片** @param watermark* @return* @throws IOException*/public static File createWaterMark(String watermark) throws IOException { int width = 800;int height = 1020;File file = new File("watermark.bmp");Font font = new Font("Serif", Font.ITALIC, 20);BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);Graphics2D g2 = bi.createGraphics();// 设置字体颜色为灰色g2.setColor(Color.LIGHT_GRAY);// 设置字体g2.setFont(font);// 设置字体倾斜度g2.rotate(Math.toRadians(0), (double) bi.getWidth() / 2, (double) bi.getHeight() / 2);g2.setBackground(Color.WHITE);g2.clearRect(0, 0, width, height);FontRenderContext context = g2.getFontRenderContext();Rectangle2D bounds = font.getStringBounds(watermark, context);double x = (width - bounds.getWidth()) / 2;double y = (height - bounds.getHeight()) / 2;double ascent = -bounds.getY();double baseY = y + ascent;g2.drawString(watermark, (int) x, (int) baseY);// ImageIO.write(bi, "bmp", file);// 通过bmp写入文件//BMPEncoder.write(bi, file);return file;}@SuppressWarnings({ "rawtypes", "unchecked" })public static Map createWaterMark1(Map watermarkMessage) throws IOException { Map map = new HashMap();File file = new File("watermark.bmp");// 获取bufferedImage对象BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);// 处理背景色,设置为白色int minx = bi.getMinX();int miny = bi.getMinY();for (int i = minx; i < width; i++) {for (int j = miny; j < height; j++) {bi.setRGB(i, j, 0xffffff);}}// 获取Graphics2d对象Graphics2D g2d = bi.createGraphics();// 设置字体颜色为灰色g2d.setColor(Color.LIGHT_GRAY);// 设置图片的属性g2d.setStroke(new BasicStroke(1));// 设置字体g2d.setFont(new Font("Serif", Font.ITALIC, 40));// 设置字体倾斜度g2d.rotate(Math.toRadians(-8));// 写入水印文字原定高度过小,所以累计写水印,增加高度for (int i = 1; i < 7; i++) {Object[] key = watermarkMessage.keySet().toArray();for (int j = 0; j < key.length; j++) {if (key[j].equals("date")) {g2d.drawString("日期: " + watermarkMessage.get(key[j]), 0, 180 * i + 40 * (j + 1));} else if (key[j].equals("user")) {g2d.drawString("用户: " + watermarkMessage.get(key[j]), 0, 180 * i + 40 * (j + 1));} else if (key[j].equals("ip")) {g2d.drawString("IP地址: " + watermarkMessage.get(key[j]), 0, 180 * i + 40 * (j + 1));} else {g2d.drawString((String) key[j] + " : " + watermarkMessage.get(key[j]), 0, 180 * i + 40 * (j + 1));}}}// 设置透明度g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER));// 释放对象g2d.dispose();// 通过bmp写入文件// BMPEncoder.write(bi, file);ImageIO.write(bi, "bmp", file);map.put("file", file);map.put("width", width);map.put("height", height);return map;}}三.编写处理类package zp.ExcelUtil;import java.io.File;import java.io.FileInputStream;import java.io.InputStream;import java.util.Map;import org.json.JSONObject;import jxl.Workbook;import jxl.write.WritableSheet;import jxl.write.WritableWorkbook;public class ExcelUtil {/**** @param xls_filePath_in 要添加水印的excel文件路径(必须是*.xls文件,如"/in.xls")* @param xls_filePath_out excel文件输出路径(必须是*.xls文件,如"/out.xls")* @param watermarkText* @throws Exception*/@SuppressWarnings("rawtypes")public static void addWatermark(String xls_filePath_in,String xls_filePath_out,JSONObject watermarkText) throws Exception{InputStream is = new FileInputStream(new File(xls_filePath_in));Workbook wb = Workbook.getWorkbook(is); // 获得原始文档WritableWorkbook wwb = Workbook.createWorkbook(new File(xls_filePath_out),wb);WritableSheet ws1 = wwb.getSheet(0);// 得到工作薄中的第一个工作表//String watermarkMessage = jsonObject.toString();Map watermarkMessage = Utilss.toMap(watermarkText.toString());Map map = Utilss.createWaterMark1(watermarkMessage);File fileImg = (File) map.get("file");//File fileImg = new File("kkkk.bmp");byte imageData[] = new byte[(int) fileImg.length()];FileInputStream fis = new FileInputStream(fileImg);fis.read(imageData);// must be 24 bit true-colour,bmp file// * @param imageByte// * @param widthPixel// * @param heightPixelws1.setWaterMarkImage(imageData, (int)map.get("width"), (int)map.get("height"));wwb.write();wwb.close();fis.close();}}四.测试package zp.ExcelUtil;import java.util.Date;import org.json.JSONObject;public class test {public static void main(String[] args) throws Exception {Model model = new Model("1.1.1.1", "tom", new Date());JSONObject jo = Utilss.modelToJSON(model);ExcelUtil.addWatermark("in.xls", "out.xls", jo);}}。
Java 添加、删除Word水印
Java 添加、删除Word水印水印是一种常用于各种文档的声明、防伪手段,一般可设置文字水印或者加载图片作为水印。
以下内容将分享通过Java编程给Word文档添加水印效果的方法,以及如何将Word文档中已有的水印效果删除。
使用工具:Free Spire.Doc for Java 2.0.0(免费版)Jar导入:方法1:通过官网下载控件包。
在程序下新建一个directory目录,并命名(本示例中命名为lib);将控件包lib文件夹下的jar(如下图1)复制到程序中新建的目录下。
复制jar文件后,鼠标右键点击jar文件,选择”A dd as Library”。
完成导入(如下图2)。
图1:图2:方法2:通过maven导入。
参考导入方法。
Java代码示例(供参考)【示例1】添加文本水印import com.spire.doc.*;import com.spire.doc.documents.WatermarkLayout; import java.awt.*;public class Main {public static void main(String[] args) { //加载测试文档Document document = new Document();document.loadFromFile("sample.docx");//插入水印InsertTextWatermark(document.getSections().get(0));//保存文档document.saveToFile("textwatermark.docx",FileFormat.Docx ); }//自定义方法用于指定文本水印字样及格式化操作private static void InsertTextWatermark(Section section){TextWatermark txtWatermark = new TextWatermark();txtWatermark.setText("内部使用");txtWatermark.setFontSize(40);txtWatermark.setColor(Color.red);txtWatermark.setLayout(WatermarkLayout.Diagonal);section.getDocument().setWatermark(txtWatermark);}文本水印效果:【示例2】添加图片水印import com.spire.doc.*;public class Main {public static void main(String[] args) {//加载测试文档Document document = new Document();document.loadFromFile("sample.docx");//加载图片设置为水印PictureWatermark picture = new PictureWatermark();picture.setPicture("wx.png");picture.setScaling(5);picture.isWashout(false);document.setWatermark(picture);//保存文档document.saveToFile("imagewatermark.docx",FileFormat.Docx ); }}图片水印效果:【示例3】删除Word水印import com.spire.doc.*;public class DeleteWatermark {public static void main(String[] args){//加载含有水印的Word文档Document doc = new Document("test.docx");//调用方法setWatermark()设置为null,去掉水印效果doc.setWatermark(null);//保存文档doc.saveToFile("result.docx",FileFormat.Docx_2010); }}运行程序后,水印效果将被删除。
java实现图片水印或者文字水印
Java实现图片水印或者文字水印在原图之上再画一张图片(drawImage)或者文本文字(drawString),Java SE中提供了java.awt.image包和javax.imageio包可以实现非常方便的实现图片水印或者文字水印。
1.图片水印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.FileOutputStream;import java.io.OutputStream;import javax.imageio.ImageIO;import javax.swing.ImageIcon;* 生成图片水印* @author Ricky Fungpublic class WaterMarkIconTest {/*** @param argspublic static void main(String[] args) {File srcImageFile = new File( D:/test/myblog.pngFile logoImageFile = new File( D:/test/logo.pngFile outputImageFile = new File( D:/test/myblog_water_icon.jpgFile outputRoateImageFile = new File( D:/test/myblog_water_icon_rotate.jpgcreateWaterMarkByIcon(srcImageFile, logoImageFile, outputImageFile);createWaterMarkByIcon(srcImageFile, logoImageFile, outputRoateImageFile, 45); public static void createWaterMarkByIcon(File srcImageFile, File logoImageFile, File outputImageFile) {createWaterMarkByIcon(srcImageFile, logoImageFile, outputImageFile, 0);public static void createWaterMarkByIcon(File srcImageFile, File logoImageFile, File outputImageFile, double degree) {OutputStream os = null;try {Image srcImg = ImageIO.read(srcImageFile);BufferedImage buffImg = new BufferedImage(srcImg.getWidth(null),srcImg.getHeight(null), BufferedImage.TYPE_INT_RGB);Graphics2D g = buffImg.createGraphics();g.setRenderingHint(RenderingHints.KEY_INTERPOLA TION,RenderingHints.V ALUE_INTERPOLA TION_BILINEAR);g.drawImage(srcImg.getScaledInstance(srcImg.getWidth(null),srcImg.getHeight(null), Image.SCALE_SMOOTH), 0, 0,null);ImageIcon logoImgIcon = new ImageIcon(ImageIO.read(logoImageFile));Image logoImg = logoImgIcon.getImage();//旋转if (degree 0) {g.rotate(Math.toRadians(degree),(double) buffImg.getWidth() / 2,(double) buffImg.getWidth() / 2);float alpha = 0.8f; // 透明度g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_A TOP, alpha));//水印的位置g.drawImage(logoImg, buffImg.getWidth()/3, buffImg.getHeight()/2, null);g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER));g.dispose();os = new FileOutputStream(outputImageFile);// 生成图片ImageIO.write(buffImg, JPG , os);} catch (Exception e) {e.printStackTrace();} finally {try {if (null != os)os.close();} catch (Exception e) {e.printStackTrace();}2.文字水印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.OutputStream;import javax.imageio.ImageIO;* 生成文字水印* @author Ricky Fungpublic class WaterMarkTextTest {/*** @param argspublic static void main(String[] args) {File srcImgFile = new File( D:/test/myblog.pngString logoText = [ 水印文字电话邦]File outputImageFile = new File( D:/test/myblog_water_text.jpgFile outputRotateImageFile = new File( D:/test/myblog_water_text_rotate.jpg createWaterMarkByText(srcImgFile, logoText, outputImageFile);createWaterMarkByText(srcImgFile, logoText, outputRotateImageFile, 45); public static void createWaterMarkByText(File srcImgFile, String logoText, File outputImageFile) {createWaterMarkByText(srcImgFile, logoText, outputImageFile, 0);public static void createWaterMarkByText(File srcImgFile, String logoText, File outputImageFile, double degree) {OutputStream os = null;try {Image srcImg = ImageIO.read(srcImgFile);BufferedImage buffImg = new BufferedImage(srcImg.getWidth(null),srcImg.getHeight(null), BufferedImage.TYPE_INT_RGB);Graphics2D g = buffImg.createGraphics();g.setRenderingHint(RenderingHints.KEY_INTERPOLA TION,RenderingHints.V ALUE_INTERPOLA TION_BILINEAR);g.drawImage(srcImg.getScaledInstance(srcImg.getWidth(null),srcImg.getHeight(null), Image.SCALE_SMOOTH), 0, 0,null);if (degree 0) {g.rotate(Math.toRadians(degree),(double) buffImg.getWidth() / 2,(double) buffImg.getHeight() / 2);g.setColor(Color.RED);g.setFont(new Font( 宋体, Font.BOLD, 36));float alpha = 0.8f;g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_A TOP, alpha));g.drawString(logoText, buffImg.getWidth()/3, buffImg.getHeight()/2);g.dispose();os = new FileOutputStream(outputImageFile);// 生成图片ImageIO.write(buffImg, JPG , os);} catch (Exception e) {e.printStackTrace();} finally {try {if (null != os)os.close();} catch (Exception e) { e.printStackTrace();}。
Java实现为Word每一页设置不同图片水印的效果
Java实现为Word每⼀页设置不同图⽚⽔印的效果⽬录⽅法思路Jar引⼊Java代码⽰例代码补充Word中设置⽔印时,可加载图⽚设置为⽔印效果,但通常添加⽔印效果时,会对所有页⾯都设置成统⼀效果,如果需要对每⼀页或者某个页⾯设置不同的⽔印效果,则可以参考本⽂中的⽅法。
下⾯,将以Java代码为例,对Word每⼀页设置不同的图⽚⽔印效果作详细介绍。
⽅法思路在给Word每⼀页添加⽔印前,⾸先需要在Word⽂档每⼀页正⽂的最后⼀个字符后⾯插⼊“连续”分节符,然后在每⼀节的页眉段落⾥添加⽔印图⽚,并设置图⽚的坐标位置、对齐⽅式、衬与⽂字下⽅等。
最后保存⽂档。
Jar引⼊在程序中引⼊中的Spire.Doc.jar⽂件(该⽂件在lib⽂件夹下);如果需要通过下载导⼊,可进⾏如下配置pom.xml:<repositories><repository><id>com.e-iceblue</id><url>https:///repository/maven-public/</url></repository></repositories><dependencies><dependency><groupId>e-iceblue</groupId><artifactId>spire.doc.free</artifactId><version>5.1.0</version></dependency></dependencies>Java代码给每页添加图⽚⽔印时,可参考如下步骤:创建Document类的对象,并通过Document.loadFromFile(String fileName)⽅法加载Word⽂档。
通过Document.getSections().get(int index)⽅法获取指定节。
JAVA 处理图片水印
package com.cari.image;/****/import java.awt.AlphaComposite;import java.awt.Color;import java.awt.Graphics2D;import java.awt.Image;import java.awt.image.*;import java.io.*;import java.util.ArrayList;import java.util.Iterator;import java.util.List;import javax.swing.*;import com.sun.image.codec.jpeg.*;/*** @author zsy**/public class WaterMark {private static List logoImgs;private static List bgImgs ;private static float logoPosition = 1f;private static float logoSrcOver = 0.4f;private static float bgSrcOver = 0.3f;private static boolean flag;//为true时生成背景水印,为false 时生成图标水印public static List getBgImgs() {return bgImgs;}/*** 设置背景水印图片的路径并把图片加载到内存* @param bgImgUrls* @param path*/public static void setBgImgs(List bgImgUrls, String path) { bgImgs = new ArrayList();for (Iterator it = bgImgUrls.iterator(); it.hasNext(); ) {String tem = (String)it.next();ImageIcon waterIcon = new ImageIcon(path + tem);bgImgs.add(waterIcon.getImage());}}public static List getLogoImgs() {return logoImgs;}/*** 设置图标水印图片的路径并把图片加载到内存* @param logoImgUrls* @param path*/public static void setLogoImgs(List logoImgUrls, String path) { logoImgs = new ArrayList();for (Iterator it = logoImgUrls.iterator();it.hasNext(); ) {String tem = (String)it.next();ImageIcon waterIcon = new ImageIcon(path + tem);logoImgs.add(waterIcon.getImage());}}public static float getLogoPosition() {return logoPosition;}public static void setLogoPosition(float logoPosition) {WaterMark.logoPosition = logoPosition;}public static float getBgSrcOver() {return bgSrcOver;}public static void setBgSrcOver(float bgSrcOver) {WaterMark.bgSrcOver = bgSrcOver;}public static float getLogoSrcOver() {return logoSrcOver;}public static void setLogoSrcOver(float logoSrcOver) {WaterMark.logoSrcOver = logoSrcOver;}/*** 图片中添加图标水印并输出到指定流* @param data* @param out* @param channel* @return* @throws Exception*/public static boolean createLogoMark(byte[] data,FileOutputStream out, String channel) throws Exception {int i = (int)(logoImgs.size() * Math.random());return createMark(data, out, (Image)logoImgs.get(i), true);}/*** 图片中添加背景水印并输出到指定流* @param data* @param out* @param channelName* @return* @throws Exception*/public static boolean createBgMark(byte[] data,FileOutputStream out, String channelName) throws Exception {int i = (int)(bgImgs.size() * Math.random());return createMark(data, out, (Image)bgImgs.get(i), false);}/*** 生成随机水印并输出到指定流* @param data* @param out* @return* @throws Exception*/public static boolean createRandomMark(byte[] data,FileOutputStream out) throws Exception {int i = 0;Image temImg = null;int logoSize = logoImgs.size();int bgSize = bgImgs.size();if (logoSize <= 0 && bgSize <= 0) {return createMark(data, out, temImg, flag);}if (logoSize <= 0) {flag = true;} else if (bgSize <= 0) {flag = false;}if (!flag) {i = (int)(logoImgs.size() * Math.random());temImg = (Image)logoImgs.get(i);} else {i = (int)(bgImgs.size() * Math.random());temImg = (Image)bgImgs.get(i);}flag = !flag;return createMark(data, out, temImg, flag);}/*** 生成水印并输出到指定流* @param data 图片的二进制数据* @param out 处理后图片的输出流* @param waterImg 水印图片的类型(背景或图标),应与isLogoImg 参数一致,如果为空不加水印* @param isLogoImg 等于true 时生成图标水印,否则为背景水印* @return* @throws Exception*/private static boolean createMark(byte[] data, FileOutputStream out,Image waterImg ,boolean isLogoImg) throws Exception {ImageIcon imgIcon = new ImageIcon(data);Image theImg = imgIcon.getImage();int width = theImg.getWidth(null);int height = theImg.getHeight(null);int w = waterImg == null ? 0 : waterImg.getWidth(null);int h = waterImg == null ? 0 : waterImg.getHeight(null);if (w == 0 || h == 0 || width <= w || height <= h) {//小图片不加水印真接输入,如头像图片BufferedOutputStream fout = null;ByteArrayInputStream in = new ByteArrayInputStream(data);try {byte[] b = new byte[1024*10];fout = new BufferedOutputStream(out);while(in.read(b) > 0) {out.write(b);}out.flush();out.close();in.close();} catch(Exception e) {e.printStackTrace();throw e;} finally {if (in != null) {in.close();}if (fout != null) {fout.close();}}return true;}BufferedImage bimage = new BufferedImage(width, height,BufferedImage.TYPE_INT_RGB);Graphics2D g = bimage.createGraphics();g.setBackground(Color.white);g.drawImage(theImg, 0, 0, null);if (isLogoImg) {//生成图标水印//设置图片透明度g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, logoSrcOver));width = (int)(width * logoPosition) - w;height = (int)(height * logoPosition) - h;width = width < 0 ? 0 : width;height = height < 0 ? 0 : height;g.drawImage(waterImg, width, height, null);} else {//生成背景水印//'0.2f'设置字体透明度g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, bgSrcOver));int sw = (width % w) /(width / w + 1);//填充水印图片横向间距int sh = (height % h) /(height / h + 1);//填充水印图片纵向间距for(int i = sw; i + w + sw <= width; i += w + sw) {for (int j = sh; j + h + sh <= height; j += h + sh) {g.drawImage(waterImg, i, j, null);}}}g.dispose();try {JPEGImageEncoder encoder =JPEGCodec.createJPEGEncoder(out);JPEGEncodeParam param =encoder.getDefaultJPEGEncodeParam(bimage);param.setQuality(80f, true);encoder.encode(bimage);} catch (Exception e) {throw e;} finally {if (out != null) {out.close();}}return true;}}。
Java 设置PDF平铺图片背景(水印)
Java 设置PDF平铺图片背景(水印)一、概述及环境准备本文介绍使用免费版PDF库-Free Spire.PDF for Java加载图片来设置成PDF平铺图片背景的效果,也可以作为平铺图片水印来使用;编辑代码前,需要先导入jar文件,有两种方法可供选着导入:1. 手动下载导入:可前往官网下载jar包,并解压,将lib文件夹下的Spire.Pdf.jar文件导入Java程序;2. Maven仓库导入:通过创建Maven项目,在pom.xml文件中配置Maven仓库路径并指定Free Spire.PDF for Java的Maven依赖,如下:<repositories><repository><id>com.e-iceblue</id><url>/repository/maven-public/</url></repository></repositories><dependencies><dependency><groupId> e-iceblue </groupId><artifactId>spire.pdf.free</artifactId><version>2.6.3</version></dependency></dependencies>配置完成后,点击”Import Changes”即可导入Jar文件。
(注:本文中使用的是IDEA,如果使用的是Eclipse,可参考导入方法)Jar导入效果如下:二、Java代码示例import com.spire.pdf.*;import com.spire.pdf.graphics.PdfImage;import com.spire.pdf.graphics.PdfTilingBrush;import java.awt.*;import java.awt.geom.Dimension2D;import java.awt.geom.Rectangle2D;public class AddBackground {public static void main(String[] args) {//创建PdfDocument对象,并加载PDF测试文档PdfDocument pdf = new PdfDocument();pdf.loadFromFile("test.pdf");//遍历文档每一页,加载图片,并设置成平铺背景(水印)for (int i = 0; i < pdf.getPages().getCount();i++){PdfPageBase page = pdf.getPages().get(i);Dimension2D dimension2D = new Dimension();dimension2D.setSize(page.getCanvas().getSize().getWidth()/4,page.getCanvas().getSize().getHeight()/3);PdfTilingBrush brush = new PdfTilingBrush(dimension2D);brush.getGraphics().setTransparency(0.2f);brush.getGraphics().translateTransform(brush.getSize().getWidth()/10,brush.getSize().getHeig ht()/10);brush.getGraphics().rotateTransform(30);PdfImage image = PdfImage.fromImage("logo.png");brush.getGraphics().drawImage(image,brush.getSize().getWidth()-image.getWidth()/2,(brush.getSize().getHeight())/2);Rectangle2D rectangle2D = new Rectangle2D.Float();rectangle2D.setFrame(new Point(0,0),page.getCanvas().getClientSize());page.getCanvas().drawRectangle(brush,rectangle2D);}//保存文档pdf.saveToFile("SetTiledBackground.pdf");pdf.dispose();}}平铺图片背景(水印)效果:(完)。
Java操作图片改变大小加水印
Java操作图片改变大小加水印import java.awt.*;import java.awt.image.*;import javax.imageio.ImageIO;import javax.imageio.ImageIO.*;import javax.imageio.IIOException;import java.io.*;import com.sun.image.codec.jpeg.JPEGCodec;import com.sun.image.codec.jpeg.JPEGImageEncoder;import javax.servlet.http.HttpSession;// 图片操作,改变大小加水印***********@与羊共舞的狼public class ImageOperate {public void waterMark(String strOriginalFileName,String strWaterMarkFileName,HttpSession session){try{//源文件String root=session.getServletContext().getRealPath("/");File fileOriginal = new File(root+strOriginalFileName);Image imageOriginal = ImageIO.read(fileOriginal);int widthOriginal = imageOriginal.getWidth(null);int heightOriginal = imageOriginal.getHeight(null);System.out.println("widthOriginal:" + widthOriginal + "theightOriginal:" + heightOriginal);BufferedImage bufImage = newBufferedImage(widthOriginal,heightOriginal,BufferedImage. TYPE_INT_RGB );Graphics g = bufImage.createGraphics();g.drawImage(imageOriginal,0,0,widthOriginal,heightOrigina l,null);//水印文件File fileWaterMark = new File(root+strWaterMarkFileName);Image imageWaterMark = ImageIO.read(fileWaterMark);int widthWaterMark = imageWaterMark.getWidth(null);int heightWaterMark = imageWaterMark.getHeight(null);System.out.println("widthWaterMark:" + widthWaterMark + "theightWaterMark:" + heightWaterMark);//水印文件在源文件的右下角g.drawImage(imageWaterMark,widthOriginal -widthWaterMark,heightOriginal -heightWaterMark,widthWaterMark,heightWaterMark,null);g.dispose();FileOutputStream fos = new FileOutputStream( root+strOriginalFileName); JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(fos); encoder.encode(bufImage);fos.flush();fos.close();fos = null;}catch(Exception e){e.printStackTrace();}}public void alterSize(String srcImgFile,String addChar,int new_w,int new_h,HttpSession session){//System.out.print("文件路径为:"+"//"+srcImgFile);String root=session.getServletContext().getRealPath("/");java.io.File file=new java.io.File(root+srcImgFile);if(file.exists())System.out.println("文件存在");elseSystem.out.println("文件不存在");int i = srcImgFile.indexOf(".");int sLen = srcImgFile.length();String suffix = srcImgFile.substring(i, sLen); //带点+后缀名String urlName=srcImgFile.substring(0,i); //路径+文件名String newUrlName=root+urlName+addChar+suffix;//System.out.print("新文件名为"+newUrlName);Image src=null;try{src = javax.imageio.ImageIO.read(file);java.awt.image.BufferedImage tag = newjava.awt.image.BufferedImage(new_w,new_h,java.awt.image. BufferedImage .TYPE_INT_RGB);tag.getGraphics().drawImage(src,0,0,new_w,new_h,null); FileOutputStream newimage=new FileOutputStream(newUrlName); JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(newimage);encoder.encode(tag); //近JPEG编码newimage.close();}catch(IIOException ee){ee.printStackTrace();System.out.print("这里出错了"); }catch(Exception e){e.printStackTrace();}}//End sizeAlter }。
java实现图片添加水印封装类
Java实现图片添加水印/*** 图片水印*/public class ImageUtil {/*** @param args*/public static void main(String[] args) {String srcImgPath = "e:/QQ截图20140105122750.png";String iconPath = "e:\\doc\\logo.png";String targerPath = "e:/33333333333.jpg";// 给图片添加水印ImageUtil.waterMarkImageByIcon("java水印图片",iconPath, srcImgPath, targerPath, 0, 0,0, 0.9f);// 给图片添加水印,水印旋转-45// ImageUtil.waterMarkImageByIcon(iconPath, srcImgPath,// targerPath, degree, width, height, clarity);}/*** 给图片添加水印、可设置水印图片旋转角度** @param iconPath* 水印图片路径* @param srcImgPath* 源图片路径* @param targerPath* 目标图片路径* @param degree* 水印图片旋转角度* @param width* 宽度(与左相比)* @param height* 高度(与顶相比)* @param clarity* 透明度(小于1的数)越接近0越透明*/public static void waterMarkImageByIcon(String logoText,String iconPath, String srcImgPath,String targerPath, Integer degree, Integer width, Integer height,float clarity) {OutputStream os = null;try {Image srcImg = ImageIO.read(new File(srcImgPath));System.out.println("width:" + srcImg.getWidth(null));System.out.println("height:" + srcImg.getHeight(null));BufferedImage buffImg = newBufferedImage(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对象。
Java添加Word文本水印和图片水印
Java添加Word⽂本⽔印和图⽚⽔印⽔印是⼀种常⽤于各种⽂档的声明、防伪⼿段,⼀般可设置⽂字⽔印或者加载图⽚作为⽔印。
以下内容将分享通过Java编程给Word⽂档添加⽔印效果的⽅法,即⽂本⽔印图⽚⽔印使⽤⼯具:Free Spire.Doc for Java (免费版)Jar导⼊⽅法1:通过官⽹下载控件包。
在程序下新建⼀个directory⽬录,并命名(本⽰例中命名为lib);将控件包lib⽂件夹下的jar(如下图1)复制到程序中新建的⽬录下。
图1:复制jar⽂件后,⿏标右键点击jar⽂件,选择”Add as Library”。
完成导⼊(如下图2)。
图2:引⽤完成后,可以查看包含在其中的类、⽅法、属性等。
如图3:图3:⽅法2:通过maven导⼊。
参考。
Java代码⽰例(供参考)1.添加⽂本⽔印import com.spire.doc.*;import com.spire.doc.documents.WatermarkLayout;import java.awt.*;public class Main {public static void main(String[] args) {//加载测试⽂档Document document = new Document();document.loadFromFile("sample.docx");//插⼊⽂本⽔印InsertTextWatermark(document.getSections().get(0));//保存⽂档document.saveToFile("textwatermark.docx",FileFormat.Docx ); }//⾃定义⽅法指定⽂本⽔印字样,并设置成⽔印private static void InsertTextWatermark(Section section){TextWatermark txtWatermark = new TextWatermark();txtWatermark.setText("内部使⽤");txtWatermark.setFontSize(40);txtWatermark.setColor(Color.red);txtWatermark.setLayout(WatermarkLayout.Diagonal);section.getDocument().setWatermark(txtWatermark);}}⽂本⽔印效果:2. 添加图⽚⽔印import com.spire.doc.*;public class Main {public static void main(String[] args) {//加载测试⽂档Document document = new Document();document.loadFromFile("sample.docx");//加载需要设置成⽔印的图⽚PictureWatermark picture = new PictureWatermark();picture.setPicture("wx.png");picture.setScaling(5);picture.isWashout(false);//将图⽚设置成⽔印document.setWatermark(picture);//保存⽂档document.saveToFile("imagewatermark.docx",FileFormat.Docx );}}图⽚⽔印效果:到此这篇关于Java添加Word⽂本⽔印和图⽚⽔印的⽂章就介绍到这了,更多相关Java添加⽂本⽔印和图⽚⽔印内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!。
图片加水印(java版)
图片加水印(java版)一、功能说明1. 将水印图片叠加到原图上2. 可设置水印图片透明度(默认为1 不透明)3. 可设置水印图片相对于原图的左边距和上边距(默认为0)4. 可设置水印图片的宽高(默认为原始尺寸)5. 注意事项. 图片输出到本地. 为防止内存溢出,请增大jvm内存(推荐-Xmx1024m). 可处理20M左右(10000 ×10000)超高清图片二、代码1.原代码import java.awt.AlphaComposite;import java.awt.Graphics2D;import java.awt.Image;import java.awt.image.BufferedImage;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import javax.imageio.stream.ImageInputStream;import com.sun.image.codec.jpeg.JPEGCodec;import com.sun.image.codec.jpeg.JPEGImageEncoder;/*** 图片加水印* <li>图片输出到本地.</li>* <li>为防止内存溢出,请增大jvm内存(推荐<font color='red'>-Xmx1024m</font>).</li> * <li>可处理20M左右大图片.</li>** @author lily200825* @date 2011-6-1*/public class ImageWatermarkUtil {// 输出打印日志public static boolean IS_DEBUG = true;/*** 图片加水印** @param srcImg* 原图片路径* @param watermarkImg* 水印图片路径* @param destImg* 输出图片路径* @param alpha* 水印图透明度* @param left* 水印图相对原图左边距(默认值为<font color='red'>0</font>)* @param top* 水印图相对原图上边距(默认值为<font color='red'>0</font>)* @param width* 水印图输出宽(默认值为<font color='red'>水印图宽</font>)* @param height* 水印图输出高(默认值为<font color='red'>水印图高</font>)* @return* @throws IOException*/public static boolean watermarkImage(String srcImg, String watermarkImg,String destImg, Float alpha, Integer left, Integer top,Integer width, Integer height) throws IOException {if (destImg == null || destImg.trim().length() == 0) {if (IS_DEBUG) {System.err.println("图片加水印:输出图片路径[" + destImg + "]错误。
Java添加水印
Java添加水印(图片水印,文字水印)因为项目中考虑到添加图片版权的保护,特意看了下水印的处理...以下有两种方式: 第一种是添加文字水印:import java.awt.*;import java.awt.image.*;import java.io.*;import javax.swing.*;import com.sun.image.codec.jpeg.*;public class WaterSet {/*** 给图片添加水印** @param filePath* 需要添加水印的图片的路径* @param markContent* 水印的文字* @param markContentColor* 水印文字的颜色* @param qualNum* 图片质量* @return*/public boolean createMark(String filePath, String markContent,Color markContentColor, float qualNum) {ImageIcon imgIcon = new ImageIcon(filePath);Image theImg = imgIcon.getImage();int width = theImg.getWidth(null);int height = theImg.getHeight(null);BufferedImage bimage = new BufferedImage(width, height,BufferedImage.TYPE_INT_RGB);Graphics2D g = bimage.createGraphics();g.setColor(markContentColor);g.setBackground(Color.white);g.drawImage(theImg, 0, 0, null);g.drawString(markContent, width / 5, height / 5); // 添加水印的文字和设置水印文字出现的内容g.dispose();try {FileOutputStream out = new FileOutputStream(filePath);JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(bimage);param.setQuality(qualNum, true);encoder.encode(bimage, param);out.close();} catch (Exception e) {return false;}return true;}}第二种是添加图片水印和文字水印两种方法,水印图片可以是GIF,PNG透明的文件,我一般采用的是PNG的,因为它的质量和GIF相比要高一些:import java.awt.Color;import java.awt.Font;import java.awt.Graphics;import java.awt.Image;import java.awt.image.BufferedImage;import java.io.File;import java.io.FileOutputStream;import javax.imageio.ImageIO;import com.sun.image.codec.jpeg.JPEGCodec;import com.sun.image.codec.jpeg.JPEGImageEncoder;public final class ImageUtils {public ImageUtils() {}/** public final static String getPressImgPath() { return ApplicationContext* .getRealPath("/template/data/util/shuiyin.gif"); }*//*** 把图片印刷到图片上** @param pressImg --* 水印文件* @param targetImg --* 目标文件* @param x* --x坐标* @param y* --y坐标*/public final static void pressImage(String pressImg, String targetImg,int x, int y) {try {//目标文件File _file = new File(targetImg);Image src = ImageIO.read(_file);int wideth = src.getWidth(null);int height = src.getHeight(null);BufferedImage image = new BufferedImage(wideth, height,BufferedImage.TYPE_INT_RGB);Graphics g = image.createGraphics();g.drawImage(src, 0, 0, wideth, height, null);//水印文件File _filebiao = new File(pressImg);Image src_biao = ImageIO.read(_filebiao);int wideth_biao = src_biao.getWidth(null);int height_biao = src_biao.getHeight(null);g.drawImage(src_biao, (wideth - wideth_biao) / 2,(height - height_biao) / 2, wideth_biao, height_biao, null);//水印文件结束g.dispose();FileOutputStream out = new FileOutputStream(targetImg);JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);encoder.encode(image);out.close();} catch (Exception e) {e.printStackTrace();}}/*** 打印文字水印图片** @param pressText* --文字* @param targetImg --* 目标图片* @param fontName --* 字体名* @param fontStyle --* 字体样式* @param color --* 字体颜色* @param fontSize --* 字体大小* @param x --* 偏移量* @param y*/public static void pressText(String pressText, String targetImg,String fontName, int fontStyle, int color, int fontSize, int x,int y) {try {File _file = new File(targetImg);Image src = ImageIO.read(_file);int wideth = src.getWidth(null);int height = src.getHeight(null);BufferedImage image = new BufferedImage(wideth, height,BufferedImage.TYPE_INT_RGB);Graphics g = image.createGraphics();g.drawImage(src, 0, 0, wideth, height, null);// String s="";g.setColor(Color.RED);g.setFont(new Font(fontName, fontStyle, fontSize));g.drawString(pressText, wideth - fontSize - x, height - fontSize/ 2 - y);g.dispose();FileOutputStream out = new FileOutputStream(targetImg);JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);encoder.encode(image);out.close();} catch (Exception e) {System.out.println(e);}}public static void main(String[] args) {pressImage("F:/logo.png", "F:/123.jpg", 0, 0);}}。
Java实现图片加水印且控制位置和透明度
Java实现图片加水印且控制位置和透明度昨天要做一个给图片加水印的功能,不想使用一些插件,就在网上转了一会儿,经过改装成了我需要的功能,代码如下:package org.guhao;import java.awt.AlphaComposite;import java.awt.Graphics2D;import java.awt.Image;import java.awt.image.BufferedImage;import java.io.File;import java.text.SimpleDateFormat;import java.util.Date;import javax.imageio.ImageIO;public class TestWatermark {/*** 图片水印* @param pressimg 水印图片* @param targetimg 目标图片* @param location 位置:1、左上角,2、右上角,3、左下角,4、右下角,5、正中间* @param alpha 透明度*/public static void pressImage(String pressimg, String targetimg, int location, 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);//水印文件Image src_biao = ImageIO.read(new File(pressimg));int width_biao = src_biao.getWidth(null);int height_biao = src_biao.getHeight(null);//如果水印图片高或者宽大于目标图片是做的处理,使其水印宽或高等于目标图片的宽高,并且等比例缩放int new_width_biao = width_biao;int new_height_biao = height_biao;if(width_biao > width){new_width_biao = width;new_height_biao = (int) ((double)new_width_biao/width_biao*height); }if(new_height_biao > height){new_height_biao = height;new_width_biao = (int)((double)new_height_biao/height_biao*new_width_biao);}//根据位置参数确定坐标位置int x = 0;int y = 0;switch(location){case 1:break;case 2:x = width – new_width_biao;break;case 3:y = height – new_height_biao;break;case 4:x = width – new_width_biao;y = height – new_height_biao;break;case 5:x = (width – new_width_biao)/2;y = (height – new_height_biao)/2;break;default:break;}g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, alpha));g.drawImage(src_biao, x, y, new_width_biao, new_height_biao, null);//水印文件结束g.dispose();ImageIO.write( image, “png”, img);} catch (Exception e) {e.printStackTrace();}}}这个功能我用1000张图片做测试的,平均0.1秒左右操作一张图片,本地测的,如果是服务器的话相信会很快的,但是这个还有一个bug,就是给背景透明的png图片加水印会使背景变黑,这大概是重新drawImage的时候改变了图片的一些属性,如果那个朋友解决了这个问题记得告诉我一下(121145250@),不胜感激(这个bug我们没有花太多时间去解决,主要原因是在生产环境中,一般不会有客户去给一张透明背景的图片加水印,除非有特殊需求,那他们会使用ps之类的搞的,呵呵)!。
Java为图片添加水印的源代码
Java为图⽚添加⽔印的源代码
⽀持功能:
1、可设置⽔印的字体(字体名字、样式、⼤⼩)
2、可设置⽔印的位置(暂时只⽀持6个位置)
3、可设置⽔印的透明度,同时⽀持缩放
4、⽀持预览(按Esc键退出)
5、⽀持批量添加⽔印
6、⽀持拖拉:拖拉进⼊主界⾯试试(会⾃动预览第⼀张图⽚)
希望各位童鞋也分享分享⾃⼰的。
想想中国那么多程序员,若⼤家都分享⼀些⾃⼰的,中国的IT⾏业将会是怎样呢?呵!睡觉去了!晚安!出现的问题与解决⽅法:
1、⽔印出来在图⽚上字符变成了⽅框。
这主要与字体的选择有关。
建议在加⽔印时先预览下效果。
2、JPG的图⽚加⽔印后失真。
暂时的解决⽅法是改变⽔印后图⽚格式(在保存路径的⽂本框直接修改即可,改为bmp或者png都可以)。
3、有朋友指出预览后图⽚没法关闭。
其实上⾯已经指出。
⽀持预览(按Esc键退出)。
谢谢各位指出Bug的朋友!
源代码下载:。
通过代码示例跟我学J2EE控制层Servlet编程技术——体验在Servlet程序中如何为输出的图片添加水印效果
1.1体验在Servlet程序中如何为输出的图片添加水印效果1、在J2SE Java应用程序中为输出的图片添加水印效果的代码示例import java.awt.Graphics;import java.awt.Image;import java.awt.image.BufferedImage;import java.io.FileOutputStream;import javax.imageio.ImageIO;public class WaterMarkImage {public static void main(String[] args) throws Throwable {Image sourceImage = ImageIO.read(WaterMarkImage.class.getResourceAsStream("/images/sourceImage.jpg") ); //获得原图像int imageWidth = sourceImage.getWidth(null);int imageHeight = sourceImage.getHeight(null);BufferedImage image = new BufferedImage(imageWidth, imageHeight, BufferedImage.TYPE_INT_RGB);Graphics g = image.createGraphics();g.drawImage(sourceImage, 0, 0, imageWidth, imageHeight, null);Image waterMarkImage = ImageIO.read(WaterMarkImage.class.getResourceAsStream("/images/waterMarkImage.jp g")); //获得水印图像int waterMarkImageWidth= waterMarkImage.getWidth(null);int waterMarkImageHeight = waterMarkImage.getHeight(null);g.drawImage(waterMarkImage, imageWidth-waterMarkImageWidth, imageHeight-waterMarkImageHeight, waterMarkImageWidth, waterMarkImageHeight, null);/*如果不想加图片水印,而是文字,则是这里的代码String waterMarkString = "图片水印文字";g.setColor(Color.BLUE);g.setFont(new Font("Courier", Font.PLAIN, 36));g.drawString(waterMarkString, imageWidth-360, imageHeight-72);*/g.dispose();FileOutputStream oneFileOutputStream = new FileOutputStream("targetImage.jpg");javax.imageio.ImageIO.write(image, "JPEG", oneFileOutputStream); // 输出图像/*response.setContentType("image/jpeg");response.setHeader("Pragma","No-cache");response.setHeader("Cache-Control","no-cache");response.setDateHeader("Expires", 0);javax.imageio.ImageIO.write(image, "JPEG", response.getOutputStream());*/}}水印图片可以是GIF、PNG等透明的文件,但一般都采用PNG格式,因为它的质量和GIF 相比要高一些。
JAVA不使用POI给Word文档添加水印[PageOffice]
JAVA不使用POI给Word文档添加水印[PageOffice]程序员在开发项目时,经常需要给一些图片、文件添加水印,但往往代码编写复杂,只能是先将文件上传再调用Graphics类才能实现这一功能。
但是最无奈的是这个类只能给图片添加水印,而无法通过程序给Word文件添加水印,那如何实现这一功能呢,下面我就来和大家分享一下一种简单的实现方法吧。
第一步:拷贝文件到WEB项目的“WEB-INF/lib”目录下。
拷贝PageOffice 示例中下的“WEB-INF/lib”路径中的pageoffice.cab和pageoffice.jar到新建项目的“WEB-INF/lib”目录下。
第二步:修改WEB项目的配置文件。
将如下代码添加到配置文件中:<!-- PageOffice Begin --><servlet><servlet-name>poserver</servlet-name><servlet-class>com.zhuozhengsoft .pageoffice.poserver.Server</servlet-class></servlet><servlet-mapping><servlet-name>poserver</servlet-name><url-pattern>/poserver.do</url-pattern></servlet-mapping><servlet-mapping><servlet-name>poserver</servlet-name><url-pattern>/pageoffice.cab</url-pattern></servlet-mapping><servlet-mapping><servlet-name>poserver</servlet-name><url-pattern>/popdf.cab</url-pattern></servlet-mapping><servlet-mapping><servlet-name>poserver</servlet-name><url-pattern>/sealsetup.exe</url-pattern></servlet-mapping><servlet><servlet-name>adminseal</servlet-name><servlet-class>com.zhuozhengsoft.pageoffice.poserver.AdminSeal </servlet-class></servlet><servlet-mapping><servlet-name>adminseal</servlet-name><url-pattern>/adminseal.do</url-pattern></servlet-mapping><servlet-mapping><servlet-name>adminseal</servlet-name><url-pattern>/loginseal.do</url-pattern></servlet-mapping><servlet-mapping><servlet-name>adminseal</servlet-name><url-pattern>/sealimage.do</url-pattern></servlet-mapping><mime-mapping><extension>mht</extension><mime-type>message/rfc822</mime-type></mime-mapping><context-param><param-name>adminseal-password</param-name><param-value>123456</param-value></context-param><!-- PageOffice End -->第三步:添加引用。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
package com.nkl.waterMarkTest;import java.awt.Color;import java.awt.Font;import java.awt.Graphics;import java.awt.Image;import java.awt.image.BufferedImage;import java.io.File;import java.io.FileOutputStream;import javax.imageio.ImageIO;import com.sun.image.codec.jpeg.JPEGCodec;import com.sun.image.codec.jpeg.JPEGImageEncoder;/*** 本类的作用是给图片添加水印(文字或图片)* 可以设置水印的位置,但不可以设置水印的透明度* @author 聂昆仑**/public class WaterMark {/*** 把水印印刷到图片上(自定义位置)* @param oldfile 原图片* @param newfile 生成的新图片* @param pressImg --水印图片* @param x* @param y*/public final static void pressImage(String oldfile, String newfile,String pressImg,int x,int y) { try {//绘制目标文件File _file = new File(oldfile);Image src = ImageIO.read(_file);int wideth = src.getWidth(null);int height = src.getHeight(null);BufferedImage image = new BufferedImage(wideth, height,BufferedImage.TYPE_INT_RGB);Graphics g = image.createGraphics();g.drawImage(src, 0, 0, wideth, height, null);//绘制水印文件File _filebiao = new File(pressImg);Image src_biao = ImageIO.read(_filebiao);//设置水印位置g.drawImage(src_biao, x, y, src_biao.getWidth(null), src_biao.getHeight(null), null);g.dispose();//生成图片FileOutputStream out = new FileOutputStream(newfile);JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);encoder.encode(image);out.close();} catch (Exception e) {e.printStackTrace();}}/*** 把水印印刷到图片上(有固定位置可选)* @param oldfile 原图片* @param newfile 生成的新图片* @param pressImg --水印图片* @param position --水印位置*/public final static void pressImage(String oldfile, String newfile,String pressImg,int position) { try {//绘制目标文件File _file = new File(oldfile);Image src = ImageIO.read(_file);int wideth = src.getWidth(null);int height = src.getHeight(null);BufferedImage image = new BufferedImage(wideth, height,BufferedImage.TYPE_INT_RGB);Graphics g = image.createGraphics();g.drawImage(src, 0, 0, wideth, height, null);//绘制水印文件File _filebiao = new File(pressImg);Image src_biao = ImageIO.read(_filebiao);//设置水印位置setPressImgPosition(src, src_biao, g, position);g.dispose();//生成图片FileOutputStream out = new FileOutputStream(newfile);JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);encoder.encode(image);out.close();} catch (Exception e) {e.printStackTrace();}}/*** 设置水印图片位置* @param src 原图片* @param src_biao 水印图片* @param g 画笔* @param position 水印位置*/private static void setPressImgPosition(Image src,Image src_biao,Graphics g,int position) {switch (position) {//左上角case 0:g.drawImage(src_biao, 0, 0, src_biao.getWidth(null), src_biao.getHeight(null), null);break;//左下角case 1:g.drawImage(src_biao, 0, src.getHeight(null)-src_biao.getHeight(null), src_biao.getWidth(null), src_biao.getHeight(null), null);break;//右上角case 2:g.drawImage(src_biao, src.getWidth(null)-src_biao.getWidth(null), 0, src_biao.getWidth(null), src_biao.getHeight(null), null);break;//右下角case 3:g.drawImage(src_biao, src.getWidth(null)-src_biao.getWidth(null), src.getHeight(null)-src_biao.getHeight(null), src_biao.getWidth(null), src_biao.getHeight(null), null);break;//居中case 4:g.drawImage(src_biao, (src.getWidth(null)-src_biao.getWidth(null)) / 2,(src.getHeight(null)-src_biao.getHeight(null)) / 2, src_biao.getWidth(null), src_biao.getHeight(null), null);break;default:break;}}/*** 打印文字水印(自定义位置)* @param oldfile 原图片* @param newfile 生成的新图片* @param pressText --文字* @param fontName -- 字体名* @param fontStyle -- 字体样式* @param color -- 字体颜色* @param fontSize -- 字体大小* @param x -- 偏移量* @param y -- 偏移量*/public static void pressText(String oldfile, String newfile,String pressText, String fontName, int fontStyle, Color color, int fontSize, int x,int y) {try {//绘制原图片File _file = new File(oldfile);Image src = ImageIO.read(_file);int wideth = src.getWidth(null);int height = src.getHeight(null);BufferedImage image = new BufferedImage(wideth, height,BufferedImage.TYPE_INT_RGB);Graphics g = image.createGraphics();g.drawImage(src, 0, 0, wideth, height, null);//绘制文字g.setColor(color);g.setFont(new Font(fontName, fontStyle, fontSize));g.drawString(pressText, wideth - fontSize - x, height - fontSize/ 2 - y);g.dispose();//生成图片FileOutputStream out = new FileOutputStream(newfile);JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);encoder.encode(image);out.close();} catch (Exception e) {System.out.println(e);}}/*** 打印文字水印(有固定位置可选)* @param oldfile 原图片* @param newfile 生成的新图片* @param pressText --文字* @param fontName -- 字体名* @param fontStyle -- 字体样式* @param color -- 字体颜色* @param fontSize -- 字体大小* @param position -- 偏移量*/public static void pressText(String oldfile, String newfile,String pressText, String fontName, int fontStyle, Color color, int fontSize, int position) {try {//绘制原图片File _file = new File(oldfile);Image src = ImageIO.read(_file);int wideth = src.getWidth(null);int height = src.getHeight(null);BufferedImage image = new BufferedImage(wideth, height,BufferedImage.TYPE_INT_RGB);Graphics g = image.createGraphics();g.drawImage(src, 0, 0, wideth, height, null);//绘制文字g.setColor(color);g.setFont(new Font(fontName, fontStyle, fontSize));//设置文字位置setPressTxtPosition(src, pressText, fontSize, g, position);g.dispose();//生成图片FileOutputStream out = new FileOutputStream(newfile);JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);encoder.encode(image);out.close();} catch (Exception e) {System.out.println(e);}}/*** 设置水印文字位置* @param src 原图片* @param src_biao 水印图片* @param g 画笔* @param position 水印位置*/private static void setPressTxtPosition(Image src,String pressText,int fontSize,Graphics g,int position) {//取文字长度int len=pressText.length();switch (position) {//左上角case 0:g.drawString(pressText, 0, fontSize/2);break;//左下角case 1:g.drawString(pressText, 0, src.getHeight(null)-fontSize/2);break;//右上角case 2:g.drawString(pressText, src.getWidth(null)-fontSize*len, fontSize/2);break;//右下角case 3:g.drawString(pressText, src.getWidth(null)-fontSize*len, src.getHeight(null)-fontSize/2);break;//居中case 4:g.drawString(pressText, (src.getWidth(null)-fontSize*len)/2, src.getHeight(null)/2);break;default:break;}}public static void main(String[] args) {pressText("E:\\a.jpg", "E:\\a3.jpg", "中国人", "Helvetica", Font.PLAIN, Color.RED, 14, 3);}}。