`

Java 采用字节流操作图片

    博客分类:
  • Java
阅读更多

数据库(MySql、oracle等)使用Blob数据类型存储图像,java (1.6)现在支持bmp,jpg, wbmp, png, gif格式的图像。

1从数据库中Blob转为java程序中的Image类实体:

java.sql.Blob blob = rs.getBlob("Logo");
InputStream fin = blob.getBinaryStream();
Image im = javax.imageio.ImageIO.read(fin);

2从数据库中Blob转存为硬盘中的图像文件:

java.sql.Blob blob = rs.getBlob("Logo");
InputStream fin = blob.getBinaryStream();
//
用文件模拟输出流
File file = new File("d:\\output.gif");
OutputStream fout = new FileOutputStream(file);
//
BLOB数据写入文件
byte[] b = new byte[1024];
int len = 0;
while ((len = fin.read(b)) != -1) {
fout.write(b, 0, len);
}

3将磁盘中图像文件存入数据库的BLOB字段中(使用Bytes):

FileInputStream fis = new FileInputStream(“D:\\logo.gif”);
byte[] b = new byte[65000];//
限制图像体积小于65KB
fis.read(b);
rs.updateBytes("Logo", b);

Bytes数组转为Image

BufferedImage imag=ImageIO.read(new ByteArrayInputStream(bytearray));

4将磁盘中文件转为java程序中的Image类实体

Image image = Toolkit.getDefaultToolkit().getImage("D:\\logo.gif");

Image image = javax.imageio.ImageIO.read(new FileInputStream("D:\\logo.gif"));

5java程序中的Image类实体转为磁盘中文件

Image image;

.......
BufferedImage bufferedImage = (BufferedImage) image;
try {
ImageIO.write(bufferedImage, "PNG", new File("d:\\yourImageName.PNG"));//
输出到 png文件
ImageIO.write(bufferedImage, "JPEG", new File("d:\\yourImageName.JPG"));//
输出到 jpg文件
ImageIO.write(bufferedImage, "gif", new File("d:\\yourImageName.GIF"));//
输出到 gif文件
ImageIO.write(bufferedImage, "BMP", new File("d:\\yourImageName.BMP"));//
输出到 bmp文件
} catch (IOException e) {
e.printStackTrace();
}

6java程序中的Image类实体转为Byte数值后,存入数据库Blob字段中:

首先将Image实体转为BufferedImage,可以参考网上的程序,如 http://www.a3gs.com/BookViews.asp?InfoID=3111&classID=953&InfoType=0

Image image;.......

BufferedImage bi=Converter.toBufferedImage(image);

ByteArrayOutputStream baos=new ByteArrayOutputStream(1024);
ImageIO.write(bi, "jpg", baos);
baos.flush();
String base64String=Base64.encode(baos.toByteArray());
baos.close();
byte[] b = Base64.decode(base64String);
rs.updateBytes("Logo", b);

7得到屏幕中的图像:

robot = new Robot();
BufferedImage bimage = robot.createScreenCapture(new Rectangle(0, 0, 100, 100));
Image image=bimage;

 

分享到:
评论

相关推荐

    详解JAVA 字节流和字符流

    关于乱码的问题,这是因为字节流操作时并不会考虑字符编码的问题,如果源文件使用的编码和读取时指定的编码不一致,就会导致乱码。而字符流在读取时会根据指定的编码来转换字节,因此在处理文本文件时,通常推荐使用...

    用Java实现的图片加密程序

    4. **流操作与加密**:在Java中,可以使用BufferedInputStream和BufferedOutputStream来提高读写效率,并结合Cipher类(Java的加密/解密接口)进行数据加密和解密。通过CipherInputStream和CipherOutputStream,可以...

    java实现本地读取图片存储到数据库中并在html网页显示

    首先,我们需要理解的是,将图片存储到数据库中通常采用的方法是将图片转换为二进制数据流。这是因为数据库系统更善于处理结构化数据,而不是像图片这样的非结构化数据。在Java中,我们可以使用`java.io`和`java.nio...

    图片管理java软件

    在Java代码层面,该软件可能采用了面向对象的设计思想,通过类和对象来封装图片管理的各种功能,如图片的添加、删除、查看、搜索等。可能包括以下核心组件: 1. 图片存储模块:这部分可能使用数据结构如ArrayList或...

    java IO流详解

    - 字节流:以字节为单位进行输入输出操作,适用于处理二进制文件(如音频、视频、图片)。 - 字符流:以字符为单位进行输入输出操作,适用于处理文本文件。 - **按处理效率**:分为节点流(低级流)和包装流(高级...

    Java之IO流学习总结.pdf

    字符流则专为处理字符数据设计,它基于字节流,但考虑到不同文件可能采用不同的字符编码,因此字符流在读取时会参考特定的字符编码表,如ASCII、UTF-8等,以提高处理文本的效率。字符流包括Reader和Writer两个抽象...

    JAVA 流 的ppt课件

    - `FileInputStream`和`FileOutputStream`是字节流中处理文件操作的类,用于读写二进制文件,如图片、音频等非文本文件。 - `DataInputStream`和`DataOutputStream`则提供了对基本数据类型的读写支持,比如读写int...

    Java IO流.pdf

    字节流是以字节(8位)为基本单位处理数据,主要由`InputStream`和`OutputStream`两个抽象基类代表,它们及其子类如`FileInputStream`和`FileOutputStream`用于处理二进制数据,如图片、音频文件或非文本文件。...

    java源码包---java 源码 大量 实例

     Java访问权限控制,为Java操作文件、写入文件分配合适的权限,定义写到文件的信息、定义文件,输出到c:/hello.txt、写信息到文件、关闭输出流。 Java绘制图片火焰效果 1个目标文件 摘要:Java源码,图形操作,火焰...

    用java做的图片和文件传输

    4. **接收端**:服务器端接收到数据后,会按照相同的规则重组数据,将接收到的字节流写入到本地文件,恢复原始的图片或文件。在接收过程中,可能会有错误检测和重传机制,以处理网络中断或数据丢失的情况。 5. **...

    JAVA Socket编程实现文件上传

    3. **字节流传输**:由于文件可能是任意字节的组合,因此文件传输通常使用字节流。Socket提供InputStream和OutputStream,它们都是基于字节的。客户端可以将FileInputStream中的字节流通过Socket的OutputStream传递...

    java开源包5

    JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于...

    西农java实习五-文件操作.docx

    总的来说,这个实习涵盖了Java中基本的文件操作技术,包括文件和目录的管理,字符流和字节流的使用,以及如何利用缓冲提高性能。这些知识对于理解和编写Java应用程序至关重要,尤其是在处理大量数据或者需要持久化...

    javaio详解【2】.pdf

    字节流适用于处理任何类型的二进制数据,如图片、音频文件等。 字符流处理的是Unicode字符,处理单元为2个字节,主要由`Reader`和`Writer`两个抽象基类构成。字符流在处理文本数据时更为方便,因为它能自动处理字符...

    java源码包3

     Java访问权限控制,为Java操作文件、写入文件分配合适的权限,定义写到文件的信息、定义文件,输出到c:/hello.txt、写信息到文件、关闭输出流。 Java绘制图片火焰效果 1个目标文件 摘要:Java源码,图形操作,火焰...

    java源码包2

     Java访问权限控制,为Java操作文件、写入文件分配合适的权限,定义写到文件的信息、定义文件,输出到c:/hello.txt、写信息到文件、关闭输出流。 Java绘制图片火焰效果 1个目标文件 摘要:Java源码,图形操作,火焰...

    通过流获取图片

    - **InputStream**: 用于读取字节流,例如从文件或网络连接中读取图片数据。 - **OutputStream**: 用于写入字节流,例如将图片数据写入到响应体或文件中。 - **BufferedInputStream/BufferedOutputStream**: 提供...

    java开源包6

    JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于...

    java开源包9

    JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于...

    java开源包4

    JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于...

Global site tag (gtag.js) - Google Analytics