`
xfxlch
  • 浏览: 167541 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

java 生成文字水印图片

    博客分类:
  • Java
阅读更多
有时候为了表明图片来源,或者是为了版权等要对图片加上水印,以表明出处。
本例主要是在一张图片上打上文字水印。
效果图:



直接上代码了:
/**
 * <br>
 * do what you want to do and never stop it.
 * <br>
 */
package com.luch.utils;

import java.awt.AlphaComposite;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;

import javax.imageio.ImageIO;

/**
 * @author Jack
 * 2014-4-27
 * <br>
 */
public class WaterMark {

	/**
	 * @param args
	 * @throws IOException 
	 */
	public static void main(String[] args) throws IOException {
		new WaterMark();
	}

	public WaterMark() throws IOException {
        String logoText = "取钱专用章";
        Font font = new Font("MS Song", Font.BOLD, 10);
		BufferedImage bufferedImage = ImageIO.read(new File("F:\\Tem\\IMG_20130106_163114.jpg"));
		BufferedImage bufImge = waterMark(bufferedImage, logoText , font,-20);
		ByteArrayOutputStream baos = new ByteArrayOutputStream();
		ImageIO.write(bufImge, "jpg", baos);
		File file = new File("F:\\Tem\\watermark.jpg");
		if(file.exists()) {
			file.delete();
		}
		FileOutputStream out = new FileOutputStream(file, true);
		out.write(baos.toByteArray());
		out.flush();
		out.close();
	}
	
    /**
     * 指定字体进行水印
     * 
     * @param bufferedImage
     * @param logoText
     * @param font
     * @param degree
     * @return
     */
    public BufferedImage waterMark(BufferedImage bufferedImage, String logoText, Font font, Integer degree) {
        if (bufferedImage == null) {
            return null;
        }
        int width = bufferedImage.getWidth();
        int height = bufferedImage.getHeight();
        int fontSize = (int) Math.sqrt(width * width + height * height) / (logoText.length() / 2 + 5);
        font = font.deriveFont(Font.BOLD, fontSize);
        double radians = Math.atan(height * 1.0 / width);

        Graphics2D graphics = bufferedImage.createGraphics();
        // 设置对线段的锯齿状边缘处理
        graphics.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
        graphics.drawImage(bufferedImage, 0, 0, null);
        if (null != degree) {
            // 设置水印旋转
            graphics.translate(width / 2.0, height / 2.0);
            graphics.rotate(-radians);// , width + fontSize / 2, 0);
        }
        // 设置颜色
        graphics.setColor(Color.black);
        // 设置 Font
        graphics.setFont(font);
        float alpha = 0.5f;
        graphics.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, alpha));
        graphics.drawString(logoText, -width / 2, 0);
        graphics.dispose();
        return bufferedImage;
    }

}





顺便也把图片水印的代码放在一起好了。这不部分代码是从网上来的。
效果图:



/**
     * 把图片印刷到图片上 
     *  
     * @param pressImg -- 
     *            水印文件 
     * @param targetImg -- 
     *            目标文件 
     * @param x 
     *            --x坐标 
     * @param y 
     *            --y坐标 
     * @throws IOException 
     */
    public static void pressImage(String pressImg, String targetImg,  
            int x, int y) throws IOException{
    	//目标文件
    	File file = new File(targetImg);
    	Image target = ImageIO.read(file);
    	int height = target.getHeight(null);
    	int width = target.getWidth(null);
    	BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
    	Graphics2D g = image.createGraphics();
    	g.drawImage(target, 0,0, width, height,null);
    	//水印文件
    	File fileMark = new File (pressImg);
    	Image water = ImageIO.read(fileMark);
    	int height_water  = water.getHeight(null);
    	int width_water  = water.getWidth(null);
    	System.out.println(height_water + "\t" + width_water);
    	// 左右\上下\宽\高  
        g.drawImage(water,x,  
                y, width/5, height/5, null);
        //水印结束
        g.dispose();
        FileOutputStream fos = new FileOutputStream(targetImg);
        JPEGImageEncoder encoder =  JPEGCodec.createJPEGEncoder(fos);
        encoder.encode(image);
        fos.close();
    			
    }
  • 大小: 125.5 KB
  • 大小: 94.2 KB
分享到:
评论

相关推荐

    Java生成文字水印或图片水印

    分享:Java生成文字水印或图片水印

    java生成水印图片

    在Java编程语言中,生成带有水印的图片是一项常见的任务,尤其在版权保护、品牌标识或者数据可视化等领域。本文将详细讲解如何利用Java实现这一功能,包括如何动态设置水印的文字大小、颜色以及水印的倾斜角度。 ...

    java实现图片上传并添加水印效果(文字水印,蒙版,logo图片),自动进行文字大小行数位置匹配 ,文字自动换行

    10. **安全考虑**:在接收用户上传的文件时,应验证文件类型和大小,防止恶意文件上传,同时对生成的水印图片进行权限控制,避免非法访问。 通过以上这些知识点的结合运用,我们可以构建一个功能完善的Java应用,...

    POI 完美生成带文字水印的excle

    标题中的“POI 完美生成带文字水印的excel”指的是使用Apache POI库在Java环境下创建带有文字水印的Excel文件。Apache POI是一个流行的开源库,它允许开发者在Java应用程序中读写Microsoft Office格式的文件,包括...

    java 图片添加水印

    java 图片添加水印 图片叠加文字类 图片生成方法,如果需要在已有的图片叠加文字

    java文字转图片

    在Java编程领域,将文字转换为图片是一种常见的需求,它广泛应用于验证码生成、文本水印、数据可视化等领域。本文将详细讲解如何利用Java实现这一功能,主要涉及以下几个知识点: 1. **Graphics2D API** Java中的`...

    POI 完美生成带文字水印的excle,可以完美打印

    以下是一个简单的Java代码示例,演示如何使用Apache POI生成带有文字水印的Excel文件: ```java import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.*; import javax.imageio.ImageIO; ...

    itext5生成PDF(含水印文字及图片)

    itext5生成PDF(含水印文字及图片)的源代码,操作说明详细,代码完整可用。

    上传图片加水印(图片水印和文字水印)

    同样,利用图像处理库,可以生成文字水印并将其融合到图片中。 3. **上传图片流程**:在用户端,通常会有个表单或API接口供用户上传图片。这些图片在上传过程中会被临时存储,并触发后台的水印添加逻辑。 4. **...

    java图片附加水印源码

    这个压缩包文件包含的源码是用于在图片上添加图片水印和文字水印的功能,同时允许调整水印的透明度和偏移度。让我们详细探讨这些关键知识点。 1. **Java 图片处理**:Java提供了`java.awt.image`和`javax.imageio`...

    java本地及网络图片重新生成

    标题“java本地及网络图片重新生成”与描述“java本地重新绘制生成到本地,及网络图片重新绘制生成Base64为字符串”所指向的知识点主要涵盖了在Java环境下,如何实现对本地图片的读取、编辑与保存,以及如何对网络...

    POI操作Excel完美生成水印

    水印通常用于标识文档的所有权或提供额外的安全层,而这里的水印是通过将文字转化为图片再添加到Excel工作表中实现的。 首先,我们需要了解Apache POI的基本概念。POI提供了HSSF(Horrible Spreadsheet Format)和...

    java 图片缩放、加水印

    图片操作类源代码,该类主要用于给图片进行缩放、加水印和得到图片的高、宽及类型。 具体操作请自己参照方法说明自己测试改写。

    java实现提取图片文字信息并生成表格

    对图片进行水印处理,利用TESS4J识别图片并提取信息生成excel表格。里面有字库文件所以占用空间较大。 说明:https://blog.csdn.net/xlantian/article/details/80789115

    java 长微博,文字&图片生成自定义图片

    "java 长微博,文字&图片生成自定义图片"这一主题聚焦于如何利用Java技术来创建包含文字和图片的个性化长微博图像。下面我们将深入探讨这一话题,讲解相关的知识点。 首先,Java提供了丰富的库来处理图像操作,其中...

    java处理图片大小等比例缩放,自定义修改图片大小,截取,水印

    在Java编程语言中,处理图片是一项常见的任务,包括调整图片大小、等比例缩放、裁剪、压缩以及添加水印等。以下将详细介绍这些知识点: 1. **等比例缩放图片**: 在Java中,我们可以使用`java.awt.image....

    java实现创建图片添加图片、文字水印;以及实现二维码生成与解析,zxing 依赖所需jar包

    首先,让我们关注如何在Java中创建图片并添加图片和文字水印。这个过程涉及到Java的图像处理能力,主要使用`java.awt`和`javax.imageio`这两个包。以下是一些关键步骤: 1. **加载源图像**:使用`ImageIO.read()`...

    处理linux java图片中文字显示方块乱码

    java——图片字体显示方块问题处理 /usr/java/jdk1.7.0_80/jre/lib/fonts/fallback msyhbd.ttf msyh.ttf wqy-microhei.ttf /usr/java/jdk1.7.0_80/lib/fonts/fallback msyhbd.ttf msyh.ttf wqy-microhei.ttf

    Java写的为图片添加水印的软件(含源代码)

    Java编程语言在图像处理领域有着广泛的应用,其中包括为图片添加水印的功能。水印的添加不仅可以保护图片的版权,还可以增加个性化元素。本软件就是基于Java实现的图片水印工具,提供了源代码供学习和参考。 该软件...

Global site tag (gtag.js) - Google Analytics