java如何实现图片中隐藏数据信息的功能啊,小弟死憋两天没有憋出来,请大神指导。
可能是水分不足
意思就是 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 {
/**
* @param sizeContext添加水印文字
* @param request 请求流对象
* @param request 响应流对象
* */
@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();
}
}
/**
* @param localPath 添加水印LOGO路径
* @param request 请求流对象
* @param request 响应流对象
**/
@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();
}
}
}
/**
* @param localPath 添加水印图片路径
* @param request 请求流对象
* @param request 响应流对象
* @param width 水印图片的宽度
* @param height 水印图片的长度
**/
@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>
你可以用图片信息修改工具,修改一项参数,然后用记事本打开,和原图对比下。然后用java转换为base64编码,并进行添加参数,最后输出
你说的就像是 现在流行的2维码?
ava的大方向是什么
EJB规范定义了EJB组件在何时如何与它们的容器进行交互作用。容器负责提供公用的服务,例如目录服务、事务管理、安全性、资源缓冲池以及容错性。但这里值得注意的是,EJB并不是实现J2EE的唯一途径。正是由于J2EE的开放性,使得有的厂商能够以一种和EJB平行的方式来达到同样的目的。4.RMI(RemoteMethodInvoke):...
微信上的AVA云直播电脑上怎么播放?
在微信上观看AVA云直播时,电脑上播放的方法相对简单。首先,确保你的电脑已经安装了微信客户端,并且登录了你的微信账号。接下来,按照以下步骤操作即可:首先,在电脑上打开微信客户端,确保你已经登录了自己的微信账号。然后,找到包含AVA云直播的微信公众号或者聊天窗口。通常,直播链接会以图文消息的形式...
解析AVA狙击玩法解析AVA狙击玩法
在《AVA狙击玩法解析》中,狙击手的角色不仅仅是精确射击,还需要具备出色的观察和监视能力。首先,观察技巧至关重要:1. 专注与观察:狙击手需要在众多目标中确定一个特定目标,不会随意开火,而是通过仔细观察来做出决策。在夜间,他们需要调整视力,如使用红色眼镜适应黑暗环境,利用不集中视觉观察,避免...
身份证扫描仪怎么用
运行Avision(虹光)厂家自带扫描仪软件,从开始——所有程序——AvisionAVA5Scanner——运行AvisionCaptureTool。2、出现对话框,选择如下(如果是AVA6设备,请选择AvisionA6):3、点击确定,打开虹光扫描仪厂家自带软件。4、将要扫描的文档放置到扫描仪玻璃面板上,点击Scan按钮。扫描仪正常扫出图片,说明...
AZAVA是什么意思?
AZAVA是一个词语,它的意思是“精神之旅”。这个词来源于阿兹特克文化中的一个古老传统,传统认为人们可以通过沉浸在自然环境中来实现内心的平静与自我探索。AZAVA是一种通过旅行、冒险和精神实践来找到自我、平衡生活的项目。AZAVA不只是一次简单的旅行,它是一次精神之旅。AZAVA的最大特点是在自然中...
常见的十五种Java开发工具是什么,有什么特点
BEA WebLogic Workshop是一个统一、简化、可扩展的开发环境,使所有的开发人员都能在 BEA WebLogic Enterprise Platform之上构建基于标准的企业级应用,从而提高了开发部门的生产力水平,加快了价值的实现。WebLogic Workshop除了提供便捷的Web服务之外,它能够用于创建更多种类的应用。作为整个BEA WebLogic ...
如何用用JavaScript编写一个外部调用JS文件,实现图片带超级链接_百度知 ...
document.writeln("");document.writeln("");document.writeln("");document.writeln("");把上面的代码修改好你要的链接地址和图片地址以后,保存为JS文件。然后你在html对应的地方调用这个js文件
avax币是什么币?币圈新势力
Avalanche主导的艾娃区块链平台是一个基于革命性共识算法AVAlanche的数字支付和计算平台。这种共识使分布式账本实现了交易的高度去中心化、高并发处理和快速确认,同时实现了历史记录删除和链式治理。AVA区块链平台的核心是一套统一的、可互操作的基础设施,它使任何人都能够在AVA的生态系统中根据自己的需要建立...
JAVA动态代理设计原理及如何实现
为了保持行为的一致性,代理类和委托类通常会实现相同的接口 2. 引入代理能够控制对委托对象的直接访问,可以很好的隐藏和保护委托对象,也更加具有灵活性 代理机制及其特点 首先让我们来了解一下如何使用 Java 动态代理。具体有如下四步骤:通过实现 InvocationHandler 接口创建自己的调用处理器;通过为 Proxy...
赢道顾问快消品营销中心Feava整合营销传播
Feava IMC的核心理念由五个单词的首字母组成:Focus(话题)、Event(事件)、Activity(活动)、Video(视频)和Animation(动漫),这五个元素构成五种创新的营销模式:话题营销、事件驱动营销、活动策划营销、视频营销以及动漫营销。它强调多元化的策略组合,通过各种互联网平台与渠道,运用文字、图片、音频...
长沙江枇杷: 就是加个水印吧 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....
八步区18985366772: Java实现简单数据隐藏图片文件 - ?
长沙江枇杷: 我给你写的示例程序:隐藏数据调用hiddenWords,读取数据用readWords,移除数据用removeWords.不管是什么简单数据复杂数据,图片不管什么格式.主要都是转化为流来处理哈.代码如下:有不明白的可以hi 我 import java.io....
八步区18985366772: (java高手请进)用java做一个信息隐藏软件,主要是将文字隐藏到图片(jpg)中!所需哪些java知识? - ?
长沙江枇杷: 我觉得应该不需要多线程的知识,多线程用在这儿有点大材小用.了解JPG格式储存方式和空间域的变化.你用JAVA写,我用C++在暑假写出来吧.给我分吧!!嘿嘿,还有LS的朋友,信息的加密算法目前最安全的应该是HASH吧.我空间有MD5加密算法.
八步区18985366772: jpg图片隐藏信息 - 怎样把信息隐藏在Jpg格式的图片中怎样用编程的方法把信息隐藏在J ?
长沙江枇杷: 以下是步骤,仅仅提供一个思路: 1、用内存流打开一个Jpg文件; 2、用内存流打开你要转入的信息,不妨称之为信息内存流; 3、统计文件内存流的大小,并将这个数字也转换为内存流,不妨称之为大小内存流,这个内存流应该有一定的长度,比如16个比特,跟大小无关; 4、在Jpg文件内存流中每隔一定的数目(比如100个比特)rewrite(Jpg文件流被覆盖)进一个比特的信息内存流.记得要将大小内存流放在前面. 这样就完成了信息的隐藏. 信息提取的过程就很简单了,你先提取出前16个比特,找到需要隐藏信息的长度,然后就可以找到相应的信息的位置,就是你的信息内存流.至于Jpg中被覆盖的字节,那肯定是永久性地丢失了.
八步区18985366772: java语言如何实现sqlserver对图片数据的贮存?
长沙江枇杷: 这个复杂主要代码以下//-----------------新增图书信息publicintaddBook(Bookbook,Filefile){intn=0;Connectionconn=this.reConn();try{InputStreamis=newFileInputStream(file);Stringsql=insertintobook(bookName,bookCategory,bookDesc,bookPrice,...
八步区18985366772: 怎么用java实现图中的数据结构 - ?
长沙江枇杷: 用编程实现图的存储一般有常见的有两种方式,第一种是邻接链表、第二种就是邻接矩阵.邻接链表就是将图中的每一个点都单独作为一个单独链表的起点,为每个顶点保存一个链表.链表的每一个节点都记录了与之相邻的节点的信息.邻接矩阵就是将图转换成一个二维数组,数组的x和y均表示图中每个节点到其他节点的连接状况,能连通用一种状态表示,不能连通用另外一中方式表示,这样就形成了一个笛卡尔积.也就是一个二维数组.
八步区18985366772: java中hidden属性怎样让隐藏的图片显示,之后再次隐藏?
长沙江枇杷: 你在js中获取这个对象,隐藏就用.hidden(),显示就用.show(),把这个代码绑定在你想要的动作里面,比如onclick等事件
八步区18985366772: java 如何将输入字符隐藏 - ?
长沙江枇杷: java中将输入字符隐藏,可以在jsp页面中使用password属性,示例如下:输入框 input标签的类型设置为password就可以了.<input type="password"/> 如果是按钮把type设置为button,如果是文本把type设置为text,总之这个是html的属性比较简单的.
八步区18985366772: java中关于图片内输入信息的存储及读取 - ?
长沙江枇杷: 直接把对象存入文件中 ObjectOutputStream(输出流)存 ObjectnputStream(输入流)读 读出来时用集合存起,那么使用起来就方便点了
八步区18985366772: java怎么实现不需要的数据隐藏掉 - ?
长沙江枇杷: 你可以在输出循环中添加一步判定 已拨打的直接跳过本次循环就好了