文档章节

图片水印

chaun
 chaun
发布于 2016/11/16 15:16
字数 459
阅读 44
收藏 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.IOException;
import java.io.OutputStream;

import javax.imageio.ImageIO;
import javax.swing.ImageIcon;

import org.apache.log4j.Logger;

public class ImageWaterMarkUtil {
	private static final Logger LOG = Logger.getLogger(ImageWaterMarkUtil.class);
	
	// 水印透明度 
    private static float alpha = 0.5f;
	// 水印横向位置
    private static int positionWidth = 10;
    // 水印纵向位置
    private static int positionHeight = 10;
	
    public static void main(String[] args) {     
        String srcImgPath = "D:/myworkspaces/test/WebRoot/file/20161116/1479278096322.jpg";     
        String iconPath = "E:/test/temp/servertempdictory/fileicon/logo.png";     
        String targerPath = "D:/myworkspaces/test/WebRoot/file/20161116/1479278096322_water.jpg" ;   
        File srcImageFile = new File(srcImgPath);  
        File logoImageFile = new File(iconPath);  
        File outputImageFile = new File(targerPath);  
        File outputRoateImageFile = new File("E:/test/temp/servertempdictory/fileicon/myblog_water_icon_rotate.jpg");  
        createWaterMark(srcImageFile, logoImageFile, outputImageFile);  
        // 给图片添加水印     
        createWaterMark(srcImageFile, logoImageFile, outputRoateImageFile, 45); 
    }
    
    /**
     * 
    *<b>Summary: </b>
    * createWaterMark(给图片添加水印)
    * @param srcImageFile 源图片路径   
    * @param watermarkFilePath 水印图片路径   
    * @param targerImagePath 目标图片路径   
    * @param degree 水印图片旋转角度 
     */
    public static void createWaterMark(String srcImageFile, String watermarkFilePath, String targerImagePath, Integer degree) {    
    	createWaterMark(new File(srcImageFile), new File(watermarkFilePath), new File(targerImagePath), degree);
    }     
  
    /**
     * 
    *<b>Summary: </b>
    * createWaterMark(给图片添加水印)
    * @param srcImageFile 源图片路径   
    * @param watermarkFilePath 水印图片路径   
    * @param targerImagePath 目标图片路径   
     */
    public static void createWaterMark(File srcImageFile, File watermarkFilePath, File targerImagePath) {  
    	createWaterMark(srcImageFile, watermarkFilePath, targerImagePath, 0);  
    }  
    
    /**
     * 
    *<b>Summary: </b>
    * createWaterMark(给图片添加水印)
    * @param srcImageFile 源图片路径   
    * @param watermarkFilePath 水印图片路径   
    * @param targerImagePath 目标图片路径   
    * @param degree 水印图片旋转角度 
     */
    public static void createWaterMark(File srcImageFile, File watermarkFilePath, File targerImagePath, 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_INTERPOLATION,  RenderingHints.VALUE_INTERPOLATION_BILINEAR);  
            g.drawImage(srcImg.getScaledInstance(srcImg.getWidth(null),  srcImg.getHeight(null), Image.SCALE_SMOOTH), 0, 0, null);  
            ImageIcon logoImgIcon = new ImageIcon(ImageIO.read(watermarkFilePath));  
            Image logoImg = logoImgIcon.getImage();  
            // 设置水印旋转角度及坐标  
            if (degree>0) {  
                g.rotate(Math.toRadians(degree), (double) buffImg.getWidth() / 2,  (double) buffImg.getWidth() / 2);  
            }  
            g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, alpha));  
            //水印 的位置  
            g.drawImage(logoImg, positionWidth, positionHeight, null);  
            g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER));  
            g.dispose();  
            os = new FileOutputStream(targerImagePath);  
            //生成图片 (可设置 jpg或者png格式)
            ImageIO.write(buffImg, "JPG", os);  
        } catch (Exception e) {  
        	LOG.error("生成水印图片异常", e);
        } finally {  
            if(null != os){
            	try {
					os.close();
				} catch (IOException e) {
					LOG.error("close os error", e);
				}
            }
        }  
    }  
}

参考:https://my.oschina.net/AaronDMC/blog/750827 

© 著作权归作者所有

上一篇: RabbitMQ 消息确认
下一篇: 验证码加减法
chaun
粉丝 92
博文 271
码字总数 91117
作品 0
深圳
高级程序员
私信 提问
php编程之kindeditor上传图片加水印实现

  对于如何在图片上添加水印是许多技术人员遇到的一个难题,那大家都见过微信公众号及一些其他技术平台是可以实现这个功能的,但是对于源码是如何实现的,却没有头绪,那么今天就为大家介绍...

燚轩科技
2018/05/02
0
0
给图片加水印--手把手教新码农如何把技术变成产品

前言 加水印是为图片声明版权出处的一种常用方法。 平常都是写技术文章,文章的重点在技术本身,照片往往不需要加水印,或者需要加也不多,祭出神器PhotoShop很快就能完成。 前一段趁着夏天还...

俺踏月色而来
06/17
0
0
Thinkphp中文水印和图片水印合体集成插件

今天给大家分享一下中文水印和图片水印合体集成插件,Thinkphp只有单独的加文字或加图片,由于工作的需要需要同里加“文字”和“图片”于是,试着修改了一下,只需要一行代码解决图片和文字水...

2当家的
2016/12/14
232
0
自己写个小工具——图片水印生成器

自己写个小工具——图片水印生成器 自己写个小工具——图片水印生成器 介绍 安装 使用说明 其他 TODO LIST 介绍 做技术好几年了,最近想总结一下,写了几篇文章,不过发现经常有转载的地方,...

流水不腐小夏
2017/09/19
0
0
iOS全屏文字水印(取巧方法实现)

记录日常开发的点滴 效果展示 说明   这个主要是针对于类似有需要版权声明的那种全屏水印而设计的,当然也是公司提的一个需求。一开始,在网上搜到大致都是画出一张全屏水印的图片,然后旋...

极客飞
2018/05/19
0
0

没有更多内容

加载失败,请刷新页面

加载更多

PCB设计-Allegro软件入门系列-allegro环境变量和快捷键

Allegro作为一款高速PCB设计的EDA软件,有完善的约束规则设计和信号完整性电源完整性仿真等各种专业工具深受电子行业从业者喜爱。 对于该软件来说,电子从业者接触最多的就是Allegro的画板功...

demyar
刚刚
0
0
腾讯云存储

1、进入腾讯云平台,创建 2、进入配置查看域名 3、查看KEY参数 4、将2、3中的参数录入到cms后台 然后点测试按钮查看情况

迅睿CMS-PHP开源CMS程序
2分钟前
0
0
ES 6.x 版本 待验证的CURL命令查询操作

1. 查询数据 curl -H "Content-Type: application/json" -XGET http://elastic:123456@127.0.0.1:9200/alias1/_search -d '{"query": {"match_all": {}}}' 2. 添加数据 如果有不指定ID可以自......

coord
9分钟前
0
0
如何写好论文摘要:研究人员不得不知的小秘诀

我们为何要写摘要? 它的目的为何? 简而言之,摘要的目的就是简单的讨论这篇文章让读者更容易的了解这篇文。 它能在读者与作者之间搭起一条桥梁。当您搜索信息时,您无法一下阅读整篇文章,...

论文辅导员
12分钟前
0
0
移动端、PC端(前后台)、小程序常用的UI框架

移动端、PC端(前后台)、小程序常用的UI框架 1.移动端UI库 ①.Vant UI 官方地址:https://youzan.github.io/vant/#/zh-CN/intro github地址:https://github.com/youzan/vant 优点:用来做移...

jason_kiss
12分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部