图片加水印(java版)

合集下载

JAVA不使用POI给Word文档添加水印[PageOffice]

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 -->第三步:添加引用。

java实现图片加水印效果

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 2D API实现图片处理

Java图像处理:使用Java 2D API实现图片处理

Java图像处理:使用Java 2D API实现图片处理引言:随着数字摄影技术的发展,我们每天都会拍摄大量的照片。

然而,有时候我们可能需要对这些照片进行一些处理,以使它们更加美观或符合特定的需求。

在本文中,我们将介绍如何使用Java 2D API来实现图片处理,帮助您更好地处理和优化您的图片。

第一部分:Java 2D API简介Java 2D API是Java平台中用于处理图形和图像的强大工具。

它提供了一组丰富的类和方法,使我们能够创建和操作各种图形对象,如线条、矩形、多边形和图像。

Java 2D API还支持图形渲染、颜色管理和图像转换等高级功能。

第二部分:加载和显示图片在开始处理图片之前,我们首先需要加载和显示图片。

Java 2D API提供了Image类来处理图像。

我们可以使用ImageIO类的静态方法read()来从文件中读取图像,并将其保存在一个Image对象中。

然后,我们可以使用Graphics类的drawImage()方法将图像绘制到指定的位置上。

第三部分:图片缩放有时候,我们可能需要调整图片的大小,使其适应特定的显示区域或满足特定的要求。

Java 2D API提供了AffineTransform类来处理图像的变换操作。

我们可以使用AffineTransform类的scale()方法来缩放图像。

通过指定缩放因子,我们可以按比例增加或减小图像的大小。

第四部分:图片旋转除了缩放,有时候我们还需要将图片旋转一定角度。

Java 2D API同样提供了AffineTransform类来实现图像的旋转操作。

我们可以使用AffineTransform类的rotate()方法来指定旋转的角度,并将其应用于图像。

第五部分:图片滤镜效果为了给图片增加一些特殊的效果,Java 2D API提供了一些内置的滤镜类。

我们可以使用这些滤镜类来对图像进行模糊、锐化、亮度调整等操作。

通过创建一个Filter对象,并将其应用于图像,我们可以很容易地实现这些效果。

hutool 水印偏移量

hutool 水印偏移量

hutool 水印偏移量Hutool 是一个Java工具包,提供了一系列的工具方法和函数,方便开发者进行Java 编程。

其中也包含了图片处理的工具类,用来进行图片的水印操作。

在Hutool 中,水印偏移量指的是水印在图片上的位置偏移量,即水印相对于图片左上角的位置偏移坐标。

可以通过设置偏移量来调整水印在图片上的位置。

以下是一个使用 Hutool 进行图片水印操作,并设置偏移量的示例代码:```javaimport cn.hutool.core.img.Img;import cn.hutool.core.io.FileUtil;import cn.hutool.core.io.IoUtil;import cn.hutool.core.util.ImageUtil;import java.awt.Font;import java.awt.Color;public class WatermarkExample {public static void main(String[] args) {String imagePath = "path/to/image.jpg";String watermarkText = "Watermark";int offsetX = 10; // x 偏移量int offsetY = 10; // y 偏移量// 加载图片Img img = Img.from(FileUtil.file(imagePath));// 设置水印字体样式和颜色Font font = new Font("Arial", Font.BOLD, 50);Color color = Color.RED;// 添加水印img.pressText(ImgUtil.modifyFont(font), watermarkText, color, new Pos(offsetX, offsetY), 0.8f);// 输出水印图片img.write(FileUtil.file("path/to/output.jpg"));}}```在上述代码中,我们使用 `Img.from` 方法加载图片,然后使用`pressText` 方法给图片添加文本水印。

详解javagoogleThumbnails图片处理

详解javagoogleThumbnails图片处理

详解javagoogleThumbnails图⽚处理在后端开发的过程中,都逃不开与⽂件传输特别是图⽚的传输打交道,但是因为现在各种拍照设备发展越来越快,拍出的照⽚更是越来越清晰,但是照⽚⽂件的⼤⼩也是越来越⼤了,⼿机拍照⼩则2M⼤则30M这在⽹络传输过程中谁顶得住呀!所以在⽤户发布照⽚,后端对图像⽂件进⾏保存的过程中压缩图像⽂件是必不可少的⼀个过程。

⽽Thumbnails就是⼀个很好的图像处理⼯具,他把复杂的图像处理封装的很好,只需要短短的⼀⾏代码就能完成对图像的压缩。

Thumbnails⽀持:指定⼤⼩进⾏缩放按照⽐例进⾏缩放不按照⽐例,指定⼤⼩进⾏缩放旋转⽔印裁剪转化图像格式输出到OutputStream输出到BufferedImage输出到ByteArrayOutputStream(OutputStream)输出到ByteArrayInputStream(InputStream)输出到byte[]Thumbnails导⼊依赖<dependency><groupId>net.coobird</groupId><artifactId>thumbnailator</artifactId><version>0.4.8</version></dependency>⼀,指定⼤⼩进⾏缩放//size(宽度, ⾼度)/** 若图⽚横⽐200⼩,⾼⽐300⼩,不变* 若图⽚横⽐200⼩,⾼⽐300⼤,⾼缩⼩到300,图⽚⽐例不变* 若图⽚横⽐200⼤,⾼⽐300⼩,横缩⼩到200,图⽚⽐例不变* 若图⽚横⽐200⼤,⾼⽐300⼤,图⽚按⽐例缩⼩,横为200或⾼为300*/Thumbnails.of("images/a380_1280x1024.jpg").size(200, 300).toFile("c:/a380_200x300.jpg");Thumbnails.of("images/a380_1280x1024.jpg").size(2560, 2048).toFile("c:/a380_2560x2048.jpg");⼆,单个图⽚等⽐例缩放File file = new File("c:\\test.png");Thumbnails.of(new FileInputStream(file)).scale(3.0).toFile(new File("c:\\yyyyy.png"));3.0是⼀个double类型的数字,缩放⽐例,⼤于1就是变⼤,⼩于1就是缩⼩三,不按照⽐例,指定⼤⼩进⾏缩放//keepAspectRatio(false) 默认是按照⽐例缩放的Thumbnails.of("images/a380_1280x1024.jpg").size(200, 200).keepAspectRatio(false).toFile("c:/a380_200x200.jpg");四,批量产⽣缩略图Thumbnails.of(new File("D:\\pics").listFiles()).scale(0.2).outputFormat("png").toFiles(Rename.PREFIX_DOT_THUMBNAIL);五,控制图⽚质量,图⽚尺⼨不变File fromPic = new File("C:\\Users\\Administrator\\Desktop\\IdCardPositive_987136936_1531741954688.jpeg");File toPic =new File("C:\\Users\\Administrator\\Desktop\\IdCardPositive_987136936_08.jpeg");Thumbnails.of(fromPic).scale(1f).outputQuality(0.25f).toFile(toPic);outputQuality就是⽤来控制图⽚质量的六,给图⽚加⽔印Thumbnails.of(fromPic).scale(0.8).watermark(Positions.BOTTOM_RIGHT, ImageIO.read(waterPic), 0.5f).outputQuality(0.8f).toFile(toPic);//watermark(位置,⽔印图,透明度)Thumbnails.of("images/a380_1280x1024.jpg").size(1280, 1024).watermark(Positions.BOTTOM_RIGHT, ImageIO.read(new File("images/watermark.png")), 0.5f).outputQuality(0.8f).toFile("c:/a380_watermark_bottom_right.jpg");Thumbnails.of("images/a380_1280x1024.jpg").size(1280, 1024).watermark(Positions.CENTER, ImageIO.read(new File("images/watermark.png")), 0.5f).outputQuality(0.8f).toFile("c:/a380_watermark_center.jpg");fromPic是原图,waterPic是⽔印图⽚,toPic是⽣成后的图⽚七,旋转图⽚Thumbnails.of(fromPic).scale(0.5).rotate(90).toFile(toPic);⼋,图⽚裁剪Thumbnails.of(fromPic).sourceRegion(Positions.CENTER, 300, 300).scale(1.0).toFile(toPic);//sourceRegion()//图⽚中⼼400*400的区域Thumbnails.of("images/a380_1280x1024.jpg").sourceRegion(Positions.CENTER, 400,400).size(200, 200).keepAspectRatio(false).toFile("c:/a380_region_center.jpg");//图⽚右下400*400的区域Thumbnails.of("images/a380_1280x1024.jpg").sourceRegion(Positions.BOTTOM_RIGHT, 400,400).size(200, 200).keepAspectRatio(false).toFile("c:/a380_region_bootom_right.jpg");//指定坐标Thumbnails.of("images/a380_1280x1024.jpg").sourceRegion(600, 500, 400, 400).size(200, 200).keepAspectRatio(false).toFile("c:/a380_region_coord.jpg");九,WEB输出流图⽚某些应⽤上传的图⽚可能质量⽐较⾼,但是⽤户在列表浏览的时候,⼜不想原图展⽰,因为带宽要求较⾼,此时可以降低图⽚质量(上⾯提到的outputQuality),以outputstream输出流的⽅式response给浏览器去展⽰@RequestMapping("/getImages")public void getImages(HttpServletRequest request, HttpServletResponse response) throws IOException {Thumbnails.of("images/a380_1280x1024.jpg").scale(1f).outputQuality(0.5f).outputFormat("jpg").toOutputStream(response.getOutputStream());}⼗,图像的格式转换//outputFormat(图像格式)Thumbnails.of("images/a380_1280x1024.jpg").size(1280, 1024).outputFormat("png").toFile("c:/a380_1280x1024.png");Thumbnails.of("images/a380_1280x1024.jpg").size(1280, 1024).outputFormat("gif").toFile("c:/a380_1280x1024.gif");⼗⼀,输出到BufferedImage//asBufferedImage() 返回BufferedImageBufferedImage thumbnail = Thumbnails.of("images/a380_1280x1024.jpg").size(1280, 1024).asBufferedImage();ImageIO.write(thumbnail, "jpg", new File("c:/a380_1280x1024_BufferedImage.jpg"));⼗⼆,输出到ByteArrayOutputStream(OutputStream)ByteArrayOutputStream thumbnailOutputStream = new ByteArrayOutputStream();Thumbnails.of("images/a380_1280x1024.jpg").scale(1f).outputQuality(0.5f).outputFormat("jpg").toOutputStream(thumbnailOutputStream);⼗三,输出到ByteArrayInputStream(InputStream)ByteArrayOutputStream thumbnailOutputStream = new ByteArrayOutputStream();Thumbnails.of("images/a380_1280x1024.jpg").scale(1f).outputQuality(0.5f).outputFormat("jpg").toOutputStream(thumbnailOutputStream);ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(thumbnailOutputStream.toByteArray());⼗三,输出到byte[]ByteArrayOutputStream handlerOutputStream = new ByteArrayOutputStream();Thumbnails.of(inputStream).scale(1f).outputQuality(0.25f).outputFormat("jpg").toOutputStream(handlerOutputStream);byte[] bytes = handlerOutputStream.toByteArray();到此这篇关于java google Thumbnails 图⽚处理的⽂章就介绍到这了,更多相关java google Thumbnails 图⽚处理内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!。

Java在Excel中添加水印的实现(单一水印、平铺水印)

Java在Excel中添加水印的实现(单一水印、平铺水印)

Java在Excel中添加⽔印的实现(单⼀⽔印、平铺⽔印)在Excel中没有直接添加⽔印的功能,但依旧可以通过⼀定⽅式来实现类似⽔印效果。

本⽂通过Java程序代码介绍具体实现⽅法。

可添加单⼀⽔印效果,即⽔印是以单个⽂本字样来呈现;也可添加多个平铺⽔印效果,即⽔印是以多个⽂本字样来页⾯中平铺。

详细内容见下⽂。

程序环境:测试⽂档:Office Excel 2013编译环境:IntelliJ IDEA 2018JDK版本:1.8.0Excel库:Java系列 spire.xls.jar 3.9.11.单⼀⽔印效果import com.spire.xls.*;import java.awt.*;import java.awt.image.BufferedImage;import static java.awt.image.BufferedImage.TYPE_INT_ARGB;public class SingleWatermark {public static void main(String[] args) {//加载Excel测试⽂档Workbook wb = new Workbook();wb.loadFromFile("test.xlsx");//设置⽂本和字体⼤⼩Font font = new Font("仿宋", Font.PLAIN, 40);for (int i =0;i<wb.getWorksheets().getCount();i++){Worksheet sheet = wb.getWorksheets().get(i);//调⽤DrawText() ⽅法插⼊图⽚BufferedImage imgWtrmrk = drawText("内部专⽤", font, Color.pink, Color.white, sheet.getPageSetup().getPageHeight(), sheet.getPageSetup().getPageWidth());//将图⽚设置为页眉sheet.getPageSetup().setCenterHeaderImage(imgWtrmrk);sheet.getPageSetup().setCenterHeader("&G");//将显⽰模式设置为Layoutsheet.setViewMode(yout);}//保存⽂档wb.saveToFile("SingleWatermark.xlsx", ExcelVersion.Version2013);}private static BufferedImage drawText (String text, Font font, Color textColor, Color backColor,double height, double width){//定义图⽚宽度和⾼度BufferedImage img = new BufferedImage((int) width, (int) height, TYPE_INT_ARGB);Graphics2D loGraphic = img.createGraphics();//获取⽂本sizeFontMetrics loFontMetrics = loGraphic.getFontMetrics(font);int liStrWidth = loFontMetrics.stringWidth(text);int liStrHeight = loFontMetrics.getHeight();//⽂本显⽰样式及位置loGraphic.setColor(backColor);loGraphic.fillRect(0, 0, (int) width, (int) height);loGraphic.translate(((int) width - liStrWidth) / 2, ((int) height - liStrHeight) / 2);loGraphic.rotate(Math.toRadians(-45));loGraphic.translate(-((int) width - liStrWidth) / 2, -((int) height - liStrHeight) / 2);loGraphic.setFont(font);loGraphic.setColor(textColor);loGraphic.drawString(text, ((int) width - liStrWidth) / 2, ((int) height - liStrHeight) / 2);loGraphic.dispose();return img;}}单⼀⽔印效果:2.平铺⽔印效果import com.spire.xls.*;import java.awt.*;import java.awt.image.BufferedImage;import static java.awt.image.BufferedImage.TYPE_INT_ARGB;public class TiledWatermark {public static void main(String[] args) {//加载Excel测试⽂档Workbook wb = new Workbook();wb.loadFromFile("test.xlsx");//设置⽂本和字体⼤⼩Font font = new Font("仿宋", Font.PLAIN, 25);for (int i =0;i<wb.getWorksheets().getCount();i++){Worksheet sheet = wb.getWorksheets().get(i);//调⽤DrawText() ⽅法插⼊图⽚BufferedImage imgWtrmrk = drawText("内部专⽤内部专⽤内部专⽤内部专⽤", font, Color.pink, Color.white, sheet.getPageSetup().getPageHeight(), sheet.getPageSetup().getPageWidth()); //将图⽚设置为页眉sheet.getPageSetup().setCenterHeaderImage(imgWtrmrk);sheet.getPageSetup().setCenterHeader("&G");//将显⽰模式设置为Layoutsheet.setViewMode(yout);}//保存⽂档wb.saveToFile("TiledWatermark.xlsx", ExcelVersion.Version2013);}private static BufferedImage drawText (String text, Font font, Color textColor, Color backColor,double height, double width){//定义图⽚宽度和⾼度BufferedImage img = new BufferedImage((int) width, (int) height, TYPE_INT_ARGB);Graphics2D loGraphic = img.createGraphics();//获取⽂本sizeFontMetrics loFontMetrics = loGraphic.getFontMetrics(font);int liStrWidth = loFontMetrics.stringWidth(text);int liStrHeight = loFontMetrics.getHeight();//⽂本显⽰样式及位置loGraphic.setColor(backColor);loGraphic.fillRect(0, 0, (int) width, (int) height);loGraphic.translate(((int) width - liStrWidth) / 2, ((int) height - liStrHeight) / 2);//loGraphic.rotate(Math.toRadians(-45));loGraphic.translate(-((int) width - liStrWidth) / 2, -((int) height - liStrHeight) / 2);loGraphic.setFont(font);loGraphic.setColor(textColor);loGraphic.drawString(text, ((int) width - liStrWidth) /6 , ((int) height - liStrHeight) /6);loGraphic.drawString(text,((int) width - liStrWidth) /3, ((int) height - liStrHeight) /3);loGraphic.drawString(text,((int) width - liStrWidth) /2, ((int) height - liStrHeight) /2);loGraphic.dispose();return img;}}平铺⽔印效果:★需要注意的是:在添加完⽔印效果后,查看⽂档时,在“普通视图”⽔印不可见,需在“页⾯布局”模式或“打印预览”模式下查看。

Java 在PDF中添加文本水印和图片水印_基于Spire.Cloud.SDK for Java

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文档中添加水印

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();}}图片水印添加效果:(本文完)。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

图片加水印(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 + "]错误。

");}return false;}File srcfile = new File(srcImg);if (srcfile == null || srcfile.exists() == false|| srcfile.isFile() == false) {if (IS_DEBUG) {System.err.println("图片加水印:[" + srcImg + "]文件不存在。

");}return false;}File watermarkfile = new File(watermarkImg);if (watermarkfile == null || watermarkfile.exists() == false|| watermarkfile.isFile() == false) {if (IS_DEBUG) {System.err.println("图片加水印:[" + watermarkImg + "]文件不存在。

");}return false;}return watermarkImage(javax.imageio.ImageIO.read(srcfile),javax.imageio.ImageIO.read(watermarkfile), destImg, alpha,left, top, width, height);}/*** 图片加水印** @param srcInput* 原图输入流* @param watermarkInput* 水印图输入流* @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(InputStream srcInput,InputStream watermarkInput, 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 + "]错误。

");}return false;}if (srcInput == null) {if (IS_DEBUG) {System.err.println("图片加水印:源图输入流为空。

");}return false;}if (watermarkInput == null) {if (IS_DEBUG) {System.err.println("图片加水印:水印图输入流为空。

");}return false;}return watermarkImage(javax.imageio.ImageIO.read(srcInput),javax.imageio.ImageIO.read(watermarkInput), destImg, alpha,left, top, width, height);}/*** 图片加水印** @param srcInput* 原图输入流* @param watermarkInput* 水印图输入流* @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(ImageInputStream srcInput,ImageInputStream watermarkInput, 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 + "]错误。

");}return false;}if (srcInput == null) {if (IS_DEBUG) {System.err.println("图片加水印:源图输入流为空。

");}return false;}if (watermarkInput == null) {if (IS_DEBUG) {System.err.println("图片加水印:水印图输入流为空。

");}return false;}return watermarkImage(javax.imageio.ImageIO.read(srcInput),javax.imageio.ImageIO.read(watermarkInput), destImg, alpha,left, top, width, height);}public static boolean watermarkImage(Image srcImage, Image watermarkImage,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 + "]错误。

相关文档
最新文档