Java将网络地址对应的图片转成本地的图片
只知道浏览器使用的是HTTP协议,那么如何将网络资源使用JavaHTTP下载下来呢!
这只是一个非常简单的小示例,只是不想每次碰到关于此方面的内容忘了就无从下手!
示例创建HttpURLConnection网络连接,并将这个连接获得的网络数据流写道本地磁盘!
示例代码如下:
- package imageView;
 - import java.io.ByteArrayOutputStream;
 - import java.io.File;
 - import java.io.FileOutputStream;
 - import java.io.InputStream;
 - import java.net.HttpURLConnection;
 - import java.net.URL;
 - /**
 - * @说明 从网络获取图片到本地
 - * @author 崔素强
 - * @version 1.0
 - * @since
 - */
 - public class GetImage {
 - /**
 - * 测试
 - * @param args
 - */
 - public static void main(String[] args) {
 - String url = "http://www.baidu.com/img/baidu_sylogo1.gif";
 - byte[] btImg = getImageFromNetByUrl(url);
 - if(null != btImg && btImg.length > ){
 - System.out.println("读取到:" + btImg.length + " 字节");
 - String fileName = "百度.gif";
 - writeImageToDisk(btImg, fileName);
 - }else{
 - System.out.println("没有从该连接获得内容");
 - }
 - }
 - /**
 - * 将图片写入到磁盘
 - * @param img 图片数据流
 - * @param fileName 文件保存时的名称
 - */
 - public static void writeImageToDisk(byte[] img, String fileName){
 - try {
 - File file = new File("C:\\" + fileName);
 - FileOutputStream fops = new FileOutputStream(file);
 - fops.write(img);
 - fops.flush();
 - fops.close();
 - System.out.println("图片已经写入到C盘");
 - } catch (Exception e) {
 - e.printStackTrace();
 - }
 - }
 - /**
 - * 根据地址获得数据的字节流
 - * @param strUrl 网络连接地址
 - * @return
 - */
 - public static byte[] getImageFromNetByUrl(String strUrl){
 - try {
 - URL url = new URL(strUrl);
 - HttpURLConnection conn = (HttpURLConnection)url.openConnection();
 - conn.setRequestMethod("GET");
 - conn.setConnectTimeout( * );
 - InputStream inStream = conn.getInputStream();//通过输入流获取图片数据
 - byte[] btImg = readInputStream(inStream);//得到图片的二进制数据
 - return btImg;
 - } catch (Exception e) {
 - e.printStackTrace();
 - }
 - return null;
 - }
 - /**
 - * 从输入流中获取数据
 - * @param inStream 输入流
 - * @return
 - * @throws Exception
 - */
 - public static byte[] readInputStream(InputStream inStream) throws Exception{
 - ByteArrayOutputStream outStream = new ByteArrayOutputStream();
 - byte[] buffer = new byte[];
 - int len = ;
 - while( (len=inStream.read(buffer)) != - ){
 - outStream.write(buffer, , len);
 - }
 - inStream.close();
 - return outStream.toByteArray();
 - }
 - }
 
package imageView;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
/**
 * @说明 从网络获取图片到本地
 * @author 崔素强
 * @version 1.0
 * @since
 */
public class GetImage {
	/**
	 * 测试
	 * @param args
	 */
	public static void main(String[] args) {
		String url = "http://www.baidu.com/img/baidu_sylogo1.gif";
		byte[] btImg = getImageFromNetByUrl(url);
		if(null != btImg && btImg.length > 0){
			System.out.println("读取到:" + btImg.length + " 字节");
			String fileName = "百度.gif";
			writeImageToDisk(btImg, fileName);
		}else{
			System.out.println("没有从该连接获得内容");
		}
	}
	/**
	 * 将图片写入到磁盘
	 * @param img 图片数据流
	 * @param fileName 文件保存时的名称
	 */
	public static void writeImageToDisk(byte[] img, String fileName){
		try {
			File file = new File("C:\\" + fileName);
			FileOutputStream fops = new FileOutputStream(file);
			fops.write(img);
			fops.flush();
			fops.close();
			System.out.println("图片已经写入到C盘");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	/**
	 * 根据地址获得数据的字节流
	 * @param strUrl 网络连接地址
	 * @return
	 */
	public static byte[] getImageFromNetByUrl(String strUrl){
		try {
			URL url = new URL(strUrl);
			HttpURLConnection conn = (HttpURLConnection)url.openConnection();
			conn.setRequestMethod("GET");
			conn.setConnectTimeout(5 * 1000);
			InputStream inStream = conn.getInputStream();//通过输入流获取图片数据
			byte[] btImg = readInputStream(inStream);//得到图片的二进制数据
			return btImg;
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}
	/**
	 * 从输入流中获取数据
	 * @param inStream 输入流
	 * @return
	 * @throws Exception
	 */
	public static byte[] readInputStream(InputStream inStream) throws Exception{
		ByteArrayOutputStream outStream = new ByteArrayOutputStream();
		byte[] buffer = new byte[1024];
		int len = 0;
		while( (len=inStream.read(buffer)) != -1 ){
			outStream.write(buffer, 0, len);
		}
		inStream.close();
		return outStream.toByteArray();
	}
}												
											Java将网络地址对应的图片转成本地的图片的更多相关文章
- java向图片上写字,两个图片合并的方法
		
package writeimg; import javax.imageio.ImageIO; import java.awt.Color; import java.awt.Font; import ...
 - Java图片工具类,完成图片的截取和任意缩放
		
package com.common.util; import java.awt.Graphics2D; import java.awt.Image; import java.awt.Renderin ...
 - Java  用Freemarker完美导出word文档(带图片)
		
Java 用Freemarker完美导出word文档(带图片) 前言 最近在项目中,因客户要求,将页面内容(如合同协议)导出成word,在网上翻了好多,感觉太乱了,不过最后还是较好解决了这个问题. ...
 - Java给图片和PDF文件添加水印(图片水印和文字水印)
		
有时候我们看到的图片或者PDF文件会自动加上水印.分为文字水印和图片水印. ----------------------------图片水印---------------------------- 1 ...
 - Atitit. 图像处理jpg图片的压缩  清理垃圾图片 java版本
		
Atitit. 图像处理jpg图片的压缩 清理垃圾图片 java版本 1. 清理图片压缩图片尺寸 1 2. 所以要使用ImageWriter 1 3. Thumbnails质量压缩builder.o ...
 - Java开发桌面程序学习(七)——ImageView设置图片以及jar包读取fxml文件
		
ImageView设置图片 JavaFx的ImageView,设置图片不能直接通过属性设置,只能通过代码来设置 ImageView设置图片 首先,我们让fxml对应的那个controller的java ...
 - Android之本地相冊图片选取和拍照以及图片剪辑
		
转载请注明出处:http://blog.csdn.net/loveyaozu/article/details/51160482 相信有非常多Android开发者在日常开发中,因为项目需求,须要我们的A ...
 - Android中将一个图片切割成多个图片
		
有种场景,我们想将一个图片切割成多个图片.比如我们在开发一个拼图的游戏,就首先要对图片进行切割. 以下是封装好的两个类,可以实现图片的切割.仅供参考和学习. 一个是ImagePiece类,此类保存了一 ...
 - Android中将一个图片切割成多个图片[转]
		
有种场景,我们想将一个图片切割成多个图片.比如我们在开发一个拼图的游戏,就首先要对图片进行切割. 以下是封装好的两个类,可以实现图片的切割.仅供参考和学习. 一个是ImagePiece类,此类保存了一 ...
 
随机推荐
- Oracle12c中SQL性能优化(SQL TUNING)新特性之自动重优化(automatic reoptimization)
			
Oracle12c中的自动重优化 Oracle12c中的自适应查询优化有一系列不同特点组成.像自适应计划(AdaptivePlans)功能可以在运行时修改执行计划,但并不允许计划中连接顺序的改变.自动 ...
 - Docker常见仓库MySQL
			
MySQL 基本信息 MySQL 是开源的关系数据库实现. 该仓库提供了 MySQL 各个版本的镜像,包括 5.6 系列.5.7 系列等. 使用方法 默认会在 3306 端口启动数据库. $ sudo ...
 - Docker Hub
			
目前 Docker 官方维护了一个公共仓库 Docker Hub,其中已经包括了超过 15,000 的镜像.大部分需求,都可以通过在 Docker Hub 中直接下载镜像来实现. 登录 可以通过执行 ...
 - Android给控件添加触摸回调
			
Android给控件添加触摸回调 脑补一个场景,一个页面点击某个按钮会弹出PopupWindow,然后点击PopupWindow以外的任意位置关闭 效果图 实现方法 可以在布局的最外层容器监听触摸事件 ...
 - 长度为N的数组乱序存放着0带N-1.现在只能进行0与其他数的swap操作,请设计并实现排序,必须通过交换实现排序。
			
void sort(int* arr, int len) { if (!arr) { return; } for (int i = 1; i < len; ++i) { while (arr[0 ...
 - 理解性能的奥秘——应用程序中慢,SSMS中快(4)——收集解决参数嗅探问题的信息
			
本文属于<理解性能的奥秘--应用程序中慢,SSMS中快>系列 接上文:理解性能的奥秘--应用程序中慢,SSMS中快(3)--不总是参数嗅探的错 前面已经提到过关于存储过程在SSMS中运行很 ...
 - FORM开发之说明性弹性域开发
			
1.注册使用弹性域的表,字段 注册表语法:ad_dd.register_table('所有者','表名','T自动扩展/S非自动扩展','下一区','自由','已使用') AD_DD.REGISTER ...
 - 协议系列之TCP/IP协议
			
根据前面介绍的几种协议,将IP协议.TCP协议.UDP协议组合起来,于是便有了TCP/IP协议.现在很多的应用的通信都是建立在TCP/IP协议的基础上,运用非常广泛,很有必要对其学习一下. 打个不太恰 ...
 - Android传感器
			
Android传感器 开发传感器应用 1. 获取传感器管理者对象 // 获取传感器管理者对象 SensorManager mSensorManager = (SensorManager) getSys ...
 - SSH架构实现在线支付功能
			
在线支付是指卖方与卖方通过因特网上的电子商务网站进行交易时,银行为其提供网上资金结算服务的一种业务,她为企业和个人提供了一个安全.快捷.方便的电子商务应用环境和网上资金结算工具,在线支付不仅帮助企业实 ...