Android中图片的文件储存

  两种常见情况。1、储存一个bitmap,2、直接下载一个图片并储存。

  1、将一个bitmap存成文件

public static void saveMyBitmap(Bitmap mBitmap, String fileName) {
        // 新建文件
        File f = new File(fileName);
        // 新建文件输出流
        FileOutputStream fOut = null;
        try {
            fOut = new FileOutputStream(f);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        // 将bitmap压缩至文件输出流
        mBitmap.compress(Bitmap.CompressFormat.JPEG, 100, fOut);
        try {
            fOut.flush();
        } catch (IOException e) {
            e.printStackTrace();
        }
        try {
            fOut.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

  其中,核心的方法就是Bitmap类中的compress方法。

public boolean compress(Bitmap.CompressFormat format, int quality, OutputStream stream) {
        throw new RuntimeException("Stub!");
    }

  这个方法有三个参数,第一个参数是压缩格式,第二个是压缩质量(最大是100),第三个是文件输出流。

public static enum CompressFormat {
        JPEG,
        PNG,
        WEBP;

        private CompressFormat() {
        }
    }

  由上面代码易知,图片可以选择三种格式压缩。

  2、直接下载一个图片并储存

  

public class DownloadTask extends AsyncTask<String, Integer , String> {

    Context context;

    public DownloadTask(Context context){
        this.context = context;
    }

    @Override
    protected String doInBackground(String... strings) {
        // 文件的下载地址
        String fileUrl = strings[0];
        // 文件名
        String fileName = strings[1];
        // 文件的扩展名
        String expandName = strings[2];

        try {
            // 下载图片
            URL u = new URL(fileUrl);
            InputStream is = u.openStream();
            DataInputStream dis = new DataInputStream(is);
            // 保存图片文件
            byte[] buffer = new byte[1024];
            int length;
            FileOutputStream fos = new FileOutputStream(new File(fileName + expandName));
            while ((length = dis.read(buffer))>0) {
                fos.write(buffer, 0, length);
            }
            // 扫描指定文件使媒体更新
            Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
            Uri uri = Uri.fromFile(new File(fileName + expandName));
            intent.setData(uri);
            context.sendBroadcast(intent);

        } catch (MalformedURLException mue) {
            mue.printStackTrace();
        } catch (IOException ioe) {
            ioe.printStackTrace();
        } catch (SecurityException se) {
            se.printStackTrace();
        }

        return (fileName+expandName);
    }

    @Override
    protected void onPostExecute(String fileName) {
        UIUtil.toastMessage(context, "下载成功,图片已保存至:" + fileName);

    }

  Done

时间: 2024-10-27 11:12:56

Android中图片的文件储存的相关文章

Android中图片的处理(放大缩小,去色,转换格式,增加水印等)(转)

Android中图片的处理(放大缩小,去色,转换格式,增加水印等) 原文地址:http://menxu.lofter.com/post/164b9d_3ebf79 package com.teamkn.base.utils; import java.io.ByteArrayOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.

Android中图片的三级缓存策略

一.简介 现在的Android应用程序中,不可避免的都会使用到图片,如果每次加载图片的时候都要从网络重新拉取,这样不但很耗费用户的流量,而且图片加载的也会很慢,用户体验很不好.所以一个应用的图片缓存策略是很重要的.通常情况下,Android应用程序中图片的缓存策略采用"内存-本地-网络"三级缓存策略,首先应用程序访问网络拉取图片,分别将加载的图片保存在本地SD卡中和内存中,当程序再一次需要加载图片的时候,先判断内存中是否有缓存,有则直接从内存中拉取,否则查看本地SD卡中是否有缓存,SD

Android中使用File文件进行数据存储

Android中使用File文件进行数据存储 上一篇学到使用SharedPerences进行数据存储,接下来学习一下使用File进行存储 我们有时候可以将数据直接以文件的形式保存在设备中, 例如:文本文件,图片文件等等 使用File进行存储操作主要使用到以下的 ①:public abstract FileInputStream openFileInput (String name) 这个主要是打开文件,返回FileInputStream ②:public abstract FileOutputS

浅谈android中图片处理之图形变换特效Matrix(四)

今天,我们就来谈下android中图片的变形的特效,在上讲博客中我们谈到android中图片中的色彩特效来实现的.改变它的颜色主要通过ColorMatrix类来实现. 现在今天所讲的图片变形的特效主要就是通过Matrix类来实现,我们通过上篇博客知道,改变色彩特效,主要是通过ColorMatrxi矩阵的系数,以及每个像素点上所对应的颜色偏移量.而今天的图形变换与那个也是非常的类似.它是一个3*3矩阵,而颜色矩阵则是一个4*5的矩阵.在这个3*3矩阵中则表述出了每个像素点的XY坐标信息.然后通过修

Android 中图片压缩分析(上)

作者: shawnzhao,QQ音乐技术团队一员 一.前言 在 Android 中进行图片压缩是非常常见的开发场景,主要的压缩方法有两种:其一是质量压缩,其二是下采样压缩. 前者是在不改变图片尺寸的情况下,改变图片的存储体积,而后者则是降低图像尺寸,达到相同目的. 由于本文的篇幅问题,分为上下两篇发布. 二.Android 质量压缩逻辑 在Android中,对图片进行质量压缩,通常我们的实现方式如下所示: ByteArrayOutputStream outputStream = new Byte

解决Android中fragment_main.xml文件中的组件获取的问题

package com.dhy.phonedial; import android.app.Activity; import android.app.Fragment; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.view.LayoutInflater; import android.view.Menu; import android.view.Me

Android中layout.xml文件中加载自定义的View类

<com.bn.summer.GGView3 android:layout_width="100dip" android:layout_height="114dip" android:layout_marginLeft="11dip" /> View类的实现: package com.bn.summer; import android.content.Context; import android.content.res.Resour

android 中生成xml文件

在Android中生成xml文件真的很简单,下面提供2中方法,一种是通过String写入到文件,另外一种是通过XML 的 XmlSerializer. 以后遇到Android写xml内容就不会困惑了 1.通过string写入文件 String name=mEtName.getText().toString(); String age=mEtAge.getText().toString(); String Id=mEtID.getText().toString(); File file=new F

android 中获取视频文件的缩略图(非原创)

在android中获取视频文件的缩略图有三种方法: 1.从媒体库中查询 2. android 2.2以后使用ThumbnailUtils类获取 3.调用jni文件,实现MediaMetadataRetriever类 三种方法各有利弊 第一种方法,新视频增加后需要SDCard重新扫描才能给新增加的文件添加缩略图,灵活性差,而且不是很稳定,适合简单应用 第二种方法,实现简单,但2.2以前的版本不支持 第三种方法,实现复杂,但比较灵活,推荐使用 下面给出三种方法的Demo 1.第一种方法: publi