`
serryzhao
  • 浏览: 116537 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

三种读取网页上的图片方法,以及read() read(byte b)的使用

阅读更多
有人问这个问题,说实话我也就是从本地读读(难道和从网页尚读不一样吗?好像区别不大),就写了几个,中间也发现了不少问题。看代码把

package com;

import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.URL;

import javax.imageio.ImageIO;

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

public class TestInternet {
	Image image = null;
	public static void main(String args[]){
		TestInternet ti = new TestInternet();
		try {
			ti.getResource();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	public void getResource() throws IOException {
		String urlStr = "http://i3.itc.cn/20101008/394_06b5e5c1_d16a_48d2_9340_86b0c9292732_1.jpg";		
		URL url = new URL(urlStr);
		image = ImageIO.read(url);
		int width = image.getWidth(null);
		int height = image.getHeight(null);
		BufferedImage bi = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
		bi.getGraphics().drawImage(image, 0, 0, width , height, null); 
		FileOutputStream fos = new FileOutputStream(new File("myPic.jpg"));
		JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(fos);
		encoder.encode(bi); 
		fos.flush();
		fos.close();
		
	}

}




刚才又写了两种形式 上代码
package com;
import java.io.*;    
import java.net.MalformedURLException;    
import java.net.URL;    
   
   
public class DynamicGetURLImage {    
   
    /** 
      * @param args 
      */   
    public static void main(String[] args) {    
        // TODO Auto-generated method stub    
        try {    
            //图片的http全路径    
			String imgurl = "http://i3.itc.cn/20101008/394_06b5e5c1_d16a_48d2_9340_86b0c9292732_1.jpg"; 
			URL url = new URL(imgurl); 
			BufferedInputStream   in = new BufferedInputStream(url.openStream());    
			//保存的图片文件名    
			File img = new File("img.jpg");    
			BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(img));                   
            byte[] buf = new byte[2048];    
            int l = 0;
            int temp = 0;
            while( (l = in.read(buf)) != -1){  
            	temp =0;
            	temp += l;
                out.write(buf);
                 
             }
            System.out.println(temp);
             in.close();    
             out.close();    
         } catch (MalformedURLException e) {    
            // TODO Auto-generated catch block    
             e.printStackTrace();    
         } catch (IOException e) {    
            // TODO Auto-generated catch block    
             e.printStackTrace();    
         }    
            
     }    
   
}   




package com.yuanlai;

import java.io.BufferedInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;


public class TestInternet {
	public static void main(String args[]){
		TestInternet ti = new TestInternet();
		try {
			ti.getResource();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	public void getResource() throws IOException {
		String urlStr = "http://i3.itc.cn/20101008/394_06b5e5c1_d16a_48d2_9340_86b0c9292732_1.jpg";
		int ResponseCode = 0;
		URL url = new URL(urlStr);
		HttpURLConnection connection = (HttpURLConnection) url.openConnection();
		connection.setRequestMethod("GET");
		connection.setConnectTimeout(2 * 1000);
		ResponseCode = connection.getResponseCode();
		System.out.println(ResponseCode);
		if (ResponseCode == 200) {
			InputStream inputStream = connection.getInputStream();
			byte[] b = readInputStream(inputStream);
			inputStream.close();
			System.out.println(b.length);
			FileOutputStream fos = new FileOutputStream(new File("myPic.jpg"));
			fos.write(b);
			fos.flush();
			fos.close();
		}
	}

	private byte[] readInputStream(InputStream inputStream) throws IOException {
		ByteArrayOutputStream baos = new ByteArrayOutputStream();
		int l = -1;
		int temp = 0;
		byte [] by = new byte[1024];
		//int temp1 = inputStream.read(by);		
		/**
		while (temp1 != -1) {
			//baos.write(l);
			baos.write(by, 0, temp1);
			temp += l;
			temp1 = inputStream.read(by);
		}
		*/
		//read(byte[])是从输入流中读取一定数量的字节并将其存储在缓冲区数组 b 中
		//而read() 是读取下一个字节,
		while((l = inputStream.read(by)) >= 0){
			baos.write(by, 0, l);
		}
		return baos.toByteArray();
	}
}


看来得写个总结了,
第一种方式可以对图片进行操作,比如放大缩小什么的。
第二种比较简洁,适合做简单的应用的时候用,
第三种有点罗嗦,但你可以操作的东西比较多,比如connection对象等。


还有值得总结的地方就是关于read() 和read(byte[] b)
read() 指的是从输入流读取下一个数据字节。返回 0 到 255 范围内的 int 字节值。如果因已到达流末尾而没有可用的字节,则返回值 -1。
read(byte[]  b) 是开辟一块缓存区.“从输入流中读取一定数量的字节并将其存储在缓冲区数组 b 中。以整数形式返回实际读取的字节数”
read(b) 方法的效果等同于: read(b, 0, b.length)

注意判断的时候 要while((l = inputStream.read(by)) >= 0)  不能while((l = inputStream.read()) >= 0)



分享到:
评论

相关推荐

    VB 图片转换为Byte()和从Byte()中读取图片的捷径

    同样,可以使用 ReadProperty 方法从 Byte() 数组读取图片,并将其显示在图片框中。 代码示例: Dim PBag As New PropertyBag Dim B() As Byte PBag.WriteProperty "Picture", Picture1.Picture B = PBag.Contents...

    C# 图片转成byte存入,数据库读取byte转成图片的类

    在C#编程中,将图片转换为byte数组并存储到数据库,然后从数据库读取byte数组再还原为图片,是一种常见的处理方式。这种方式便于在不直接依赖文件系统的情况下管理和传输图像数据。以下是对这个主题的详细说明: 1....

    读取图片数据到byte[]数组,合并inputStream每次读取产生的缓冲byte[]

    这段代码首先使用`ImageIO.read(file)`方法从给定的文件中读取图片,然后调用`ImageIO.write()`方法将图片写入一个内存中的`ByteArrayOutputStream`,并返回其字节数据。 接下来,我们讨论如何“合并inputStream...

    JAVA语言中read方法分析

    当需要一次性读取多个字节并将它们存储到数组中时,则可以选择`read(byte[] b)`或`read(byte[] b, int off, int len)`。 #### 三、案例分析 假设我们要编写一个程序,该程序需要通过键盘接收两个整数,然后找出这...

    Byte_Read_Write.rar_byte_read_write_三菱 通讯_三菱PLC_单片机 Byte_Read

    在“Byte_Read_Write.rar”这个压缩包中,我们期待找到的可能是一个完整的源码示例,包括了如何在单片机端编写发送读取请求的代码,以及在PLC端接收并处理请求的梯形图或指令表程序。这些源码将有助于读者理解实际的...

    C# FileStream 分段读取文本内容

    `Read`方法接受三个参数:一个缓冲区(`byte[]`),一个缓冲区起始位置(`int`),以及要读取的字节数(`int`)。读取完成后,返回实际读取到的字节数。 ```csharp byte[] buffer = new byte[1024]; // 1KB的缓冲区...

    C#,BLOB读取操作

    3. 读取文件:使用 FileStream 对象的 Read 方法可以读取文件的内容。在给定的代码中,使用 byte数组来存储读取的数据。 4. 转换字符串:使用 Encoding.ASCII.GetString 方法可以将 byte 数组转换为字符串。 5. 写入...

    读取Java文件到byte数组的三种方法(总结)

    本文将介绍三种读取Java文件到byte数组的方法,供开发者参考。 ### 方法一:传统IO方式 这种方法是最常见的读取文件的方式,使用`FileInputStream`、`BufferedInputStream`和`ByteArrayOutputStream`组合实现。 `...

    [Java]读取文件方法大全.pdf

    一次读一个字节可以使用 read() 方法,而一次读多个字节可以使用 read(byte[] b) 方法。 二、按字符读取文件内容 按字符读取文件内容是指以字符为单位读取文件的内容,这种方式常用于读取文本、数字等类型的文件。...

    c#读取图片文件信息并转换成16进制文本方法.docx

    在C#编程中,将图片文件信息转换成16进制文本是一项常见的任务,这有助于在数据传输、存储或分析时以另一种形式处理图像数据。本文将详细解释如何实现这一过程,以及如何将16进制文本再还原为原始图片。 首先,我们...

    c#存储和读取图片

    本文将详细介绍如何使用C#进行图片的存储和读取,并特别关注大图片的处理方法。 #### 二、准备工作 为了实现图片的存储和读取功能,我们需要引入几个重要的命名空间: - `System.Drawing`:提供了用于创建、绘制和...

    java读取文件方法大全

    根据给定的文件信息,我们可以总结出一系列关于Java中读取文件的方法,这些方法涵盖了不同层次的数据读取,包括字节、字符以及行级别的读取。以下是对这些知识点的详细阐述: ### Java读取文件方法大全:读取File流...

    如何有效的使用C#读取文件

    另一种方法是使用内存流(`MemoryStream`)将文件内容全部读取到内存中。这种方式适用于较小的文件,因为较大的文件可能会导致内存溢出等问题。 ```csharp public static byte[] ReadFully(Stream stream) { byte[] ...

    WPF SQLite存储与读取二进制图片

    本篇文章将详细探讨如何在WPF应用中使用SQLite数据库来存储和读取二进制图片。 一、SQLite简介 SQLite是一款开源、无服务器、零配置、事务性的SQL数据库引擎,适用于嵌入式环境,无需额外的安装或管理。它支持标准...

    Access数据库存储和读取图片

    读取数据库中的图片则需要使用OleDbDataReader,当读取到OLE对象字段时,可以将其转换回Byte数组,然后写入到本地文件或直接显示在界面上。 ```csharp OleDbCommand cmd = new OleDbCommand("SELECT ImageField ...

    C# 读取 文件 方法

    以上介绍了两种使用C#读取TXT文件的方法:一种是利用`FileStream`直接操作二进制数据;另一种是使用`StreamReader`和`StreamWriter`操作文本数据。两种方法各有优势,选择哪种取决于具体的应用场景和需求。如果只...

    C#读取图片文件存入数据库

    在C#编程中,将图片文件读取并存储到数据库是一项常见的任务,这通常涉及到二进制...在实践中,你可能还需要考虑错误处理、数据库连接管理、性能优化以及使用更高级的ORM框架(如Entity Framework)来简化数据库操作。

    Java应用程序读取图片内容.zip

    2. **使用ImageIO.read()**: 要读取图片,首先需要导入`javax.imageio.ImageIO`和`java.awt.image.BufferedImage`。然后,你可以使用`ImageIO.read(file)`方法,其中`file`是一个指向图像文件的`File`对象。例如: ...

    数据读取 切除 大小端模式转换 每1024byte数据读取

    例如,在Python中,我们可以使用内置的`open()`函数打开一个文件,并使用`read()`或`readline()`方法来读取内容。对于大文件,为了提高效率,我们通常会采用分块读取,如每1024字节(1KB)为一块进行读取。这样可以...

Global site tag (gtag.js) - Google Analytics