import java.awt.BasicStroke; import java.awt.Color; import java.awt.Font; import java.awt.GradientPaint; import java.awt.Graphics2D; import java.awt.Rectangle; import java.awt.RenderingHints; import java.awt.Shape; import java.awt.font.GlyphVector; import java.awt.geom.AffineTransform; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import java.io.OutputStream; import javax.imageio.ImageIO; public final class ImageUtils { private static OutputStream output; public static void main(String[] args) throws IOException { BufferedImage bufferedImage = ImageIO.read(new File("C:/Users/leters/Desktop/0823dd54564e9258a03481d59d82d158ccbf4e8c.jpg")); watermark(bufferedImage,"haha"); File newFile = new File("C:/Users/leters/Desktop/WatermarkedImage.jpg"); ImageIO.write(bufferedImage, "jpg", newFile); } private static void watermark(BufferedImage original, String watermarkText) { // create graphics context and enable anti-aliasing Graphics2D g2d = original.createGraphics(); g2d.scale(1, 1); g2d.addRenderingHints( new RenderingHints(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON)); g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON); // create watermark text shape for rendering Font font = new Font(Font.DIALOG_INPUT, Font.ITALIC , 28); GlyphVector fontGV = font.createGlyphVector(g2d.getFontRenderContext(), watermarkText); Rectangle size = fontGV.getPixelBounds(g2d.getFontRenderContext(), 8, 8); Shape textShape = fontGV.getOutline(); double textWidth = size.getWidth(); double textHeight = size.getHeight(); AffineTransform rotate45 = AffineTransform.getRotateInstance(Math.PI / 4d); Shape rotatedText = rotate45.createTransformedShape(textShape); // use a gradient that repeats 4 times g2d.setPaint(new GradientPaint(0, 0, new Color(0f, 0f, 0f, 0.1f), original.getWidth() / 2, original.getHeight() / 2, new Color(1f, 1f, 1f, 0.1f))); g2d.setStroke(new BasicStroke(0.5f)); // step in y direction is calc'ed using pythagoras + 5 pixel padding double yStep = Math.sqrt(textWidth * textWidth / 2) + 5; // step over image rendering watermark text for (double x = -textHeight * 3; x < original.getWidth(); x += (textHeight * 3)) { double y = -yStep; for (; y < original.getHeight(); y += yStep) { g2d.draw(rotatedText); g2d.fill(rotatedText); g2d.translate(0, yStep); } g2d.translate(textHeight * 3, -(y + yStep)); } } }
相关推荐
使用JS语言,给整个页面添加一个文字水印,这水印不影响页面结构,不影响其他元素点击,会根据页面大小缩放。已经封装为了函数,到手即用。
开发一个项目,需要用到图片加水印的功能,这里考虑使用后台加水印,在上传的时候或者回显到页面时候,取图片文件的流数据,进行加水印在返回流数据就行了,非常简单,不懂可以问我
在Java开发中,有时我们需要对各种类型的文档进行保护或标识,这时添加文本水印是一种有效的方法。本教程将详细介绍如何使用Free Spire.Office for Java库为Word、PPT和PDF文档添加文本水印,以及如何利用Apache POI...
### Java通过POI和JXL给Excel动态添加水印 #### 概述 在实际工作中,经常需要对敏感或重要的Excel文件进行保护措施,比如添加水印。这不仅可以增加文档的专业性,还可以作为版权保护的一种手段。本文将详细介绍...
在本例中,我们使用Canvas来实现在图片上添加平铺水印的功能。这个需求通常用于保护版权或者增加品牌标识。下面将详细解释实现这个功能的关键步骤和涉及的Canvas API。 1. **初始化Image对象**: `var img = new ...
itext5生成PDF(含水印文字及图片)的源代码,操作说明详细,代码完整可用。
文字水印、Logo水印、文字水印阴影、文字水印描边、浮雕文字、雕刻文字、立体文字、水印平铺、水印透明度、图片裁剪、马赛克处理、图像对比度、图像亮度、图像颜色调整。 ImageWaterMark3.0缩略图水印组件注册方式...
比GD库更强大的imagick php扩展,运行效率实现效率更快
最近在做一个食品溯源项目,需要对一些图片加上水印。 注释都在代码里了,有啥想法可以在评论区交流(๑•ᴗ•๑)~ // 水印透明度 private static float alpha = 0.5f; /** * 给图片添加水印图片、可设置水印图片...
【Winform全屏水印】是一种在Windows窗体应用程序(Winform)中实现的技术,用于在屏幕的全屏模式下添加具有透明度的水印效果。这种技术常用于软件开发中,以保护知识产权或者为用户提供视觉提示。在本文中,我们将...
总结来说,IText是Java中一个强大且灵活的PDF生成库,通过它可以轻松地创建包含文字、图片和表格的PDF文档。通过理解并实践提供的Demo,你将能够熟练地运用IText进行PDF的生成工作。记住,持续学习和更新库的版本以...
最近项目中遇到一个需求,需要把一张图片加上平铺的水印 类似这样的效果 首先想到的是用canvas完成这种功能,因为我之前也没有接触过canvas,所以做这个功能的时候,就是一步一步的摸索中学习,过程还是挺...
可自由选择添加文字水印、图片水印等格式,水印的大小、位置、旋转、透明度等都可自由设置,也可以将水印平铺于图片之上,更具有特色的是设置好的水印可保存,方便下次打开后即用,另外本工具还内置滤镜功能,也可以...
在Android中,可以通过Java代码来实现背景图片的平铺。一种常见的做法是利用`BitmapDrawable`类,并通过设置其`setTileModeXY()`方法来指定平铺模式。例如: ```java Bitmap bitmap = BitmapFactory.decodeResource...
在Java中,`java.awt.Graphics2D`类提供了强大的功能,可以实现各种复杂的纹理填充效果,包括但不限于简单的平铺、旋转、缩放、透明度控制等。此外,还可以结合Java的多线程和动画框架,创建动态的纹理填充特效,如...
本文将深入探讨Java中实现排列组合算法的方法,帮助开发者更好地理解和运用这些概念。 排列是有序的选择,而组合是无序的选择。在Java中,我们可以使用递归、回溯法或者迭代的方式来实现这两种算法。下面我们将详细...
易语言平铺窗口实例源码,平铺窗口实例,窗口平铺,GetClassName,API_SetWindowPos,API_寻找子窗口,API_取屏幕句柄,API_取窗口标题,API_SystemParametersInfo,API_判断窗口最小化,API_判断窗口最大化,API_ShowWindow
标题中的"窗口水平平铺、垂直平铺、重叠"是指在计算机操作系统中,如何管理和布局窗口的三种常见方式。这些功能通常出现在窗口管理器或桌面环境中,允许用户以不同的方式排列打开的应用程序窗口,以优化屏幕空间的...