文档章节

PhotoManage

金丨豆
 金丨豆
发布于 2016/11/08 11:33
字数 972
阅读 90
收藏 0

本人博客地址:http://my.oschina.net/lijindou/blog

转载请标明原址:https://my.oschina.net/lijindou/blog/783649

 

每个方法我都写的 有 注释。

直接上代码:

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.PixelFormat;
import android.graphics.drawable.Drawable;
import android.os.Environment;
import android.util.Base64;
import android.util.Log;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

/**
 * 本类  用于 图片的处理
 * Created by admin on 2016/8/6.
 */
public class PhotoManage {

    private static final String TAG = "PhotoManage";

    /*获取手机本地存储的路径*/
    public static String get() {
        return String.valueOf(Environment.getExternalStorageDirectory());
    }


    /**
     * 加载本地图片
     *
     * @param uri 图片的路径
     * @return Bitmap 返回的是 一个 Bitmap 类型
     */
    public static Bitmap getLoacalBitmap(String uri) {
        try {
            FileInputStream fis = new FileInputStream(uri);
            return BitmapFactory.decodeStream(fis);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
            return null;
        }
    }

    /**
     * @param bitmap
     * @return string 返回的是 一个 String 类型
     * @effect 将 Bitmap 类型 的数据 转换  成  String 类型
     */
    public static String bitmaptoString(Bitmap bitmap) {

        //将Bitmap转换成字符串
        String string = null;
        ByteArrayOutputStream bStream = new ByteArrayOutputStream();
        bitmap.compress(Bitmap.CompressFormat.PNG, 100, bStream);
        byte[] bytes = bStream.toByteArray();
        string = Base64.encodeToString(bytes, Base64.DEFAULT);
        return string;
    }

    /**
     * @param string
     * @return Bitmap 返回的是 一个 Bitmap 类型
     * @effect 将 string 类型 的数据 转换  成  Bitmap 类型
     */
    public static Bitmap stringtoBitmap(String string) {
        //将字符串转换成Bitmap类型
        Bitmap bitmap = null;
        try {
            byte[] bitmapArray;
            bitmapArray = Base64.decode(string, Base64.DEFAULT);
            bitmap = BitmapFactory.decodeByteArray(bitmapArray, 0, bitmapArray.length);
        } catch (Exception e) {
            e.printStackTrace();
        }

        return bitmap;
    }

    /**
     * @param bitmap  图片 数据
     * @param picName 图片名称  例:yhewm.png
     * @effect 将图片保存到本地  将 bitmap 类型的 图片,保存到本地
     */

    public static void savePhoto(Bitmap bitmap, String picName) {
        if (bitmap == null) {

            Log.e(TAG, "savePhoto: 图片为空");
            return;
        }
        Log.e(TAG, "savePhoto保存图片");
        File f = new File(PhotoManage.get() + "/Android/data/com.zimoedu/files/", picName);//这里 的路径 要改变下,这个 是我项目的路径
        if (f.exists()) {
            f.delete();
        }
        try {
            FileOutputStream out = new FileOutputStream(f);
            bitmap.compress(Bitmap.CompressFormat.PNG, 90, out);
            out.flush();
            out.close();
//            Log.i(TAG, "已经保存");
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }


    }

    /**
     * @param src : 原图片
     * @return : 返回的是已经缩放的图片
     * @effect 缩放  图片
     */
    public static Bitmap scaleBitmap(Bitmap src) {
        int width = src.getWidth();//原来尺寸大小
        int height = src.getHeight();
        final float destSize = 30;//缩放到这个大小,你想放大多少就多少
        //图片缩放比例,新尺寸/原来的尺寸
        float scaleWidth = ((float) destSize) / width;
        float scaleHeight = ((float) destSize) / height;
        Matrix matrix = new Matrix();
        matrix.postScale(scaleWidth, scaleHeight);
        //返回缩放后的图片
        return Bitmap.createBitmap(src, 0, 0, width, height, matrix, true);
    }

    /**
     * 这个和上面的一样
     *
     * @param src : 原图片
     * @return : 返回的是已经缩放的图片
     * @effect 缩放  图片
     */
    public static Bitmap scaleBitmapbag(Bitmap src) {
        int width = src.getWidth();//原来尺寸大小
        int height = src.getHeight();
        final float destSize = 500;//缩放到这个大小,你想放大多少就多少

        //图片缩放比例,新尺寸/原来的尺寸
        float scaleWidth = ((float) destSize) / width;
        float scaleHeight = ((float) destSize) / height;

        Matrix matrix = new Matrix();
        matrix.postScale(scaleWidth, scaleHeight);

        //返回缩放后的图片
        return Bitmap.createBitmap(src, 0, 0, width, height, matrix, true);
    }


    /**
     * @effect Drawable 转 Bitmap
     */
    public static Bitmap drawableToBitmap(Drawable drawable) {


        Bitmap bitmap = Bitmap.createBitmap(

                drawable.getIntrinsicWidth(),

                drawable.getIntrinsicHeight(),

                drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888

                        : Bitmap.Config.RGB_565);

        Canvas canvas = new Canvas(bitmap);

        //canvas.setBitmap(bitmap);

        drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());

        drawable.draw(canvas);

        return bitmap;

    }

    /**
     * @param url 网络图片的URL
     * @return 返回的 bitmap 类型
     * @effect 读取网络图片 返回 bitmap类型
     */
    public final static Bitmap returnBitMap(String url) {
        Log.e(TAG, "returnBitMap: " + url);
        URL myFileUrl = null;
        Bitmap bitmap = null;
        try {
            myFileUrl = new URL(url);
            HttpURLConnection conn;
            conn = (HttpURLConnection) myFileUrl.openConnection();
            conn.setDoInput(true);
            conn.connect();
            InputStream is = conn.getInputStream();
            bitmap = BitmapFactory.decodeStream(is);

        } catch (MalformedURLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return bitmap;
    }

    /**
     * @param url 网络图片的URL
     * @return 返回的 bitmap 类型
     * @effect 读取网络图片 返回 bitmap类型
     */
    public static Bitmap netPicToBmp(String url) {
        try {
            Log.d("FileUtil", url);
            URL Url = new URL(url);
            HttpURLConnection connection = (HttpURLConnection) Url.openConnection();
            connection.setDoInput(true);
            connection.connect();
            InputStream input = connection.getInputStream();
            Bitmap myBitmap = BitmapFactory.decodeStream(input);

            //设置固定大小
            //需要的大小
            float newWidth = 200f;
            float newHeigth = 200f;

            //图片大小
            int width = myBitmap.getWidth();
            int height = myBitmap.getHeight();

            //缩放比例
            float scaleWidth = newWidth / width;
            float scaleHeigth = newHeigth / height;
            Matrix matrix = new Matrix();
            matrix.postScale(scaleWidth, scaleHeigth);

            Bitmap bitmap = Bitmap.createBitmap(myBitmap, 0, 0, width, height, matrix, true);
            return bitmap;
        } catch (IOException e) {
            // Log exception
            return null;
        }
    }

    /**
     * @param color       颜色
     * @param orginBitmap 图片
     * @return 修改过后的图片
     * @effect 给图片加底色
     */
    public static Bitmap drawBg4Bitmap(int color, Bitmap orginBitmap) {
        Paint paint = new Paint();
        paint.setColor(color);
        Bitmap bitmap = Bitmap.createBitmap(orginBitmap.getWidth(),
                orginBitmap.getHeight(), orginBitmap.getConfig());
        Canvas canvas = new Canvas(bitmap);
        canvas.drawRect(0, 0, orginBitmap.getWidth(), orginBitmap.getHeight(), paint);
        canvas.drawBitmap(orginBitmap, 0, 0, paint);
        return bitmap;
    }
}

© 著作权归作者所有

共有 人打赏支持
金丨豆
粉丝 8
博文 41
码字总数 26382
作品 0
深圳
程序员
私信 提问

暂无文章

李鸿章六百多字参倒豪门重臣,晚清第一奏折,藏尽顶级权谋话术!

道光二十七年(1847年),二十四岁的李鸿章高中进士,列二甲第十三名。 在此期间,有桩轶事挺有意思。 会试时,李鸿章的房师为当时的名士孙锵鸣。发榜后,孙锵鸣见自己这一房只考中了李鸿章、...

乔老哥
10分钟前
0
0
PTA-基础编程题目集-7-14 求整数段和

给定两个整数A和B,输出从A到B的所有整数以及这些数的和。 输入格式: 输入在一行中给出2个整数A和B,其中−100≤A≤B≤100,其间以空格分隔。 输出格式: 首先顺序输出从A到B的所有整数,每...

niithub
10分钟前
0
0
Spring Qualifier的使用

摘要 spring 的 qualifier 平常使用一般直接是使用id 来限定,不过spring给我们提供了更强大的功能。 使用方法 直接使用 直接在@Qualifier中限定bean的id 在bean上使用@Qualifier来指定后续使...

52iSilence7
13分钟前
0
0
【dup】和【pop】

dup: 复制栈顶元素并压入栈 pop: 出栈操作 代码 public class JvmTest1{    public static void testMethod(){ new JvmTest1();  }} 编译字节码文件 javap -c JvmTest1.cl...

时刻在奔跑
15分钟前
2
0
day179-2018-12-16-英语流利阅读-待学习

《海王》:上映 7 天,票房突破 9 亿,DC 要翻身? Daniel 2018-12-16 1.今日导读 这部电影堪称“有《阿凡达》般的视觉奇观,《指环王》般的史诗质感,《夺宝奇兵》般的寻宝历险,《狮子王》...

飞鱼说编程
23分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部