永发信息网

用java实现对视频添加水印的代码或思路

答案:2  悬赏:40  手机版
解决时间 2021-03-01 06:14
做网站,使得用户在下载该网站视频时,对视频进行添加水印,用java实现的
最佳答案
package com.jc.ts.services;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.sun.image.codec.jpeg.ImageFormatException;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;


public class WaterMark {

@SuppressWarnings("deprecation")
public static void createMarkSize(String sizeContext,HttpServletRequest request,HttpServletResponse response) {
try {
String path=request.getRealPath(request.getServletPath());
FileInputStream in=new FileInputStream(path);
Image src=ImageIO.read(in);
int w=src.getWidth(null);
int h=src.getHeight(null);
BufferedImage img=new BufferedImage(w,h,BufferedImage.TYPE_INT_RGB);//构建画板
Graphics g=img.getGraphics();//得到画笔
g.drawImage(src,0,0,w,h,null);//把源图片写入画板
g.setColor(Color.red);
g.drawString(sizeContext,10,5); // 添加文字
g.dispose();//生成图片
JPEGImageEncoder e=JPEGCodec.createJPEGEncoder(response.getOutputStream());
e.encode(img);
response.getOutputStream().close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ImageFormatException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

@SuppressWarnings("deprecation")
public static void createMarkLogo(String localPath,HttpServletRequest request,HttpServletResponse response) {
try {
FileInputStream file=new FileInputStream(localPath);
Image fimg=ImageIO.read(file);
int fw=fimg.getWidth(null);
int fh=fimg.getHeight(null);
String path=request.getRealPath(request.getServletPath());
FileInputStream in=new FileInputStream(path);
Image src=ImageIO.read(in);
int w=src.getWidth(null);
int h=src.getHeight(null);
BufferedImage img=new BufferedImage(w,h,BufferedImage.TYPE_INT_RGB);//构建画板
Graphics g=img.getGraphics();//得到画笔
g.drawImage(src,0,0,w,h,null);//把原图片写入画板
g.drawImage(fimg,w-20,h-15,fw,fh,null);//把水印图片写入画板
g.dispose();//生成图片
JPEGImageEncoder e=JPEGCodec.createJPEGEncoder(response.getOutputStream());
e.encode(img);
response.getOutputStream().close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ImageFormatException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

}


@SuppressWarnings("deprecation")
public static void createMarkLogo(String localPath,HttpServletRequest request,HttpServletResponse response,int width,int height) {
try {
FileInputStream file=new FileInputStream(localPath);
Image fimg=ImageIO.read(file);
int fw=fimg.getWidth(null);
int fh=fimg.getHeight(null);
String path=request.getRealPath(request.getServletPath());
FileInputStream in=new FileInputStream(path);
Image src=ImageIO.read(in);
int w=src.getWidth(null);//w为你过滤图片的宽度
int h=src.getHeight(null);//h为你过滤图片的长度
BufferedImage img=new BufferedImage(w+width,h+height,BufferedImage.TYPE_INT_RGB);//构建画板(画板的宽度为两个图片之和)
Graphics g=img.getGraphics();//得到画笔
g.drawImage(src,0,0,w,h,null);//把原图片写入画板
g.drawImage(fimg,width,height,fw,fh,null);//把水印图片写入画板
g.dispose();//生成图片
JPEGImageEncoder e=JPEGCodec.createJPEGEncoder(response.getOutputStream());
e.encode(img);
response.getOutputStream().close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ImageFormatException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

}
注意第三个方法的注释地方g.drawImage(fimg,width,height,fw,fh,null);根据参数你在调调(放原图下面的)

过滤器调用
package com.jc.ts.filter;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.jc.ts.services.WaterMark;

public class WaterFilter implements Filter {

public void destroy() {
// TODO Auto-generated method stub

}
public void doFilter(ServletRequest arg0, ServletResponse arg1,
FilterChain arg2) throws IOException, ServletException {
HttpServletRequest request=(HttpServletRequest)arg0;
HttpServletResponse response=(HttpServletResponse)arg1;
//WaterMark.createMarkSize("南京ts", request, response);
//WaterMark.createMarkLogo("D:\\workspace\\mybook\\WebRoot\\images\\logo\\book.jpg", request, response);
WaterMark.createMarkLogo("D:\\workspace\\mybook\\WebRoot\\images\\logo\\book.jpg", request, response,20,30);
//注意路径为绝对路径且三个效果不能同时执行

}

public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub

}

}

web.xml配置(写在servlet上面)

<filter>
<description>This is the description of my J2EE component</description>
<display-name>This is the display name of my J2EE component</display-name>
<filter-name>WaterFilter</filter-name>
<filter-class>com.jc.ts.filter.WaterFilter</filter-class>
</filter>
全部回答
后来发现需要linux的东西实现,用java编程的话还是没有实现。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
给你的一封信作文600字
加盟艾依格衣柜品牌,索菲亚衣柜,好莱客衣柜
标准集装箱角件尺寸是多少?
魔兽世界半肉半输出职业
运输参与者包括()。A.物主B.承运人C.货运代
脸上黑斑如何去掉偏方
94.6除以0.18的商是525时余数是几?
请问脾气和脾阳之间是什么关系?
济南洪楼哪里有交通银行或者交通银行自动取款
我以前玩的航海王启航怎么找不到了
范爱农读后感100字
塑颜洗化美容养生馆这个地址在什么地方,我要
魔域里的外套“浪漫礼服”在哪弄啊?
.把一根长2.4米的长方体木料锯成5段,表面积比
玩了蛮久了,大神给看看养什么卡好
推荐资讯
七彩蝶园 北京蝴蝶生态观赏园怎么样
小毛南阳校油泵在哪里啊,我有事要去这个地方
南天泳衣百货商行怎么去啊,有知道地址的么
【董事长和总经理的区别】...的董事长兼总经
中山窃糟中的欣欣然自以为有独得焉的然指什么
绵阳市粮油企业总公司良友贸易公司销售一门市
在以下四个比例尺中,最小的是:A. 1:35000B.
这位法国网球选手是谁?
B超检查为双颈部可见多个低回声结节,腮腺也
谁有写父亲的作文要有细节描写
唯物辩证法与形而上学的根本分歧是什么?
找韩贤松,江苏泗洪人,南京国泰君安证券公司营
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?