2 u013912852 u013912852 于 2016.01.27 10:46 提问

Java保存网络图片到本地图片损毁
 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;

/**
 * 从网络获取图片到本地
 */
public class GetImage {

    /**
     * 测试
     * 
     * @param args
     */
    public static void main(String[] args) {
        String url = "http://www.iteye.com/upload/logo/user/1134656/d44c2b36-9869-360a-9c87-e88eaf8db3a5.jpg";
        byte[] btImg = getImageFromNetByUrl(url);
        if (null != btImg && btImg.length > 0) {
            System.out.println("读取到:" + btImg.length + "字节");
            String fileName = "abc.jpg";
            writeImageToDisk(btImg, fileName);
        } else {
            System.out.println("没有从该连接获得内容");
        }
    }

    /**
     * 从输入流中获取数据
     * 
     * @param inStream
     *            输入流
     * @return ByteArray
     * @throws Exception
     */
    public static byte[] readInputStream(InputStream inStream) throws Exception {
        ByteArrayOutputStream outStream = new ByteArrayOutputStream();
        // 设置数据缓冲区
        byte[] buffer = new byte[1024 * 2];
        // 读取到数据的长度
        int len;
        while ((len = inStream.read(buffer)) != -1) {
            outStream.write(buffer, 0, len);
        }
        outStream.close();
        inStream.close();
        return outStream.toByteArray();

    }

    /**
     * 根据地址获得数据的字节流
     * 
     * @param strUrl
     *            网络连接地址
     * @return
     */
    public static byte[] getImageFromNetByUrl(String strUrl) {
        try {
            URL url = new URL(strUrl);
            // 处理以http开头的地址
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setRequestMethod("GET");
            conn.setConnectTimeout(10 * 1000);// 设置链接超时时间为10s
            InputStream inStream = conn.getInputStream();// 通过输入流获取图片数据
            byte[] btImg = readInputStream(inStream);// 得到图片的二进制数据
            inStream.close();
            return btImg;
        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 将图片写入到磁盘
     * 
     * @param img
     *            图片数据流
     * @param fileName
     *            文件保存时的名称
     */
    public static void writeImageToDisk(byte[] img, String fileName) {
        try {
            File file = new File("E:\\" + fileName);
            FileOutputStream fops = new FileOutputStream(file);
            fops.write(img);
            fops.flush();
            fops.close();
        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        }
    }

}

1个回答

91program
91program   Ds   Rxr 2016.01.27 11:19
已采纳

先计算一下接收到的数据长度,测试一下与你的图片是否相等?

        byte[] buffer = new byte[1024 * 2];
        // 读取到数据的长度
        int len;
        while ((len = inStream.read(buffer)) != -1) {
            outStream.write(buffer, 0, len);
        }

如果相等,再分析一下接收到手文件中的数据与原始的图片有多大差别。

u013912852
u013912852 嗯 我改好了 可以读取图片了 3Q
2 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
将网络图片保存到本地
using System; using System.Net; using System.IO; using System.Text; namespace mynamespace { public class Downloader { /// /// 下载图片 /// /// 图片Http地址 /
Android网络请求图片缓存本地无OOM支持安卓7.0
Android网络请求图片缓存本地无OOM支持安卓7.0在开发中经常遇到异步网络请求图片,为了节约流量经常需要把图片存放在本地文件夹,下次请求直接读取文件夹下面图片。但有可能图片太大造成内存溢出(OOM)。为了解决这些问题专门写了一个类来做这些事情。代码注释十分详细。 1.网络连接采用import java.net.URLConnection;更加快速,更加稳定 2.引入线程池管理
Android网络获取图片保存到本地,并在ViewPager中显示图片
本文章提供的技术有:网络获取图片并保存到SD卡、网络或本地图片展示到ViewPager中、判断网络状态(是否联网)。 自己写了一个demo,提供demo下载 点击打开链接    效果如图        网络获取的主要思路是,根据url地址获取图片的数据流,继而将数据流转换为bitmap,在imageview中展示bitmap。需要注意的一个问题是,图片可能会很大,容易造成OutO
富文本编辑器保存网络图片到本地
简易的富文本编辑器保存网络图片到本地的方法,简单易懂易用
Android基于Gallery实现网络图片和本地图片循环播放
实现网络图片和本地图片循环播放
ConvenientBanner的使用
支持本地图片,网络图片的轮播
Java加载与显示图片—含本地图片与网络图片
<br />Java加载与显示图片—含本地图片与网络图片<br />  <br />描述:<br /> <br />本文以例子代码的形式讲述在Java下如何加载与显示图片。<br /> <br />技术实现:<br /> <br />导入包:<br />                                                  <br />import java.awt.Frame;<br />import java.awt.Graphics;<br />import java.aw
微信小程序保存网络图片的方式1:getimageinfo+saveImageToPhotosAlbum
好吧,我错了,这个getimageinfo是需要去下载图片的,所以我们还是需要https。。。。(修改) 首先,我们使用getimageinfo去获取到我们的图片的信息先(主要是缓存在本地的时候,会保存下一个临时文件),接着再去使用这个方式去保存到本地的相册 思路很清晰,代码肯定也就很是简单了 onLoad: function () { wx.getImage
加载本地图片和网络图片的轮播图
加载本地图片和网络图片的轮播图.zip
UEditor设置上传图片值允许网络图片和本地图片的方式
最近在用ueditor编辑器做东西,发现这个编辑器有好多的配置文件啊。 这个编辑器传图片默认的有4种方式,那么当我们只需要其中的几种的时候,有时候不知道去哪里修改这个配置。 我们可以找到dialogs文件--》image中的image.html 只需要修改其中的大概14,15行最有的span就可以选择你想要的图片上传方式了。 我用的这个编辑器在谷歌和火狐下传图片没有问题,但是在360兼容模