Android 人臉標(biāo)定(人工標(biāo)定來(lái)做基礎(chǔ)數(shù)據(jù)庫(kù)類(lèi)似畫(huà)板一)

涉及到的內(nèi)容 :

1塌西、圖片剪切,2筝尾、圖片保存到SD卡 3捡需、文件讀取和保存 4、自定義View 繪制平滑曲線(xiàn)
5筹淫、RecycleView 顯示 6站辉、Glide框架顯示圖片 7、大圖片顯示 8、從相冊(cè)選擇圖片

所用設(shè)備:

三星 華為 平板

目錄結(jié)構(gòu)

目錄結(jié)構(gòu)

Utils封裝

1.權(quán)限檢查

 

import android.Manifest;
import android.app.Activity;
import android.content.Context;
import android.content.pm.PackageManager;
import android.os.Build;
import android.support.v4.app.ActivityCompat;
import android.util.Log;

public class CheckPermissionsUtil {
    private static final String TAG = " fuck";
    Context mContext;

    public CheckPermissionsUtil(Context mContext) {
        this.mContext = mContext;
    }
    private String[] needPermissions = {
            Manifest.permission.READ_EXTERNAL_STORAGE,
            Manifest.permission.MOUNT_UNMOUNT_FILESYSTEMS,
            Manifest.permission.WRITE_EXTERNAL_STORAGE

    };

    private boolean checkPermission(String... needPermissions) {
        for (String permission : needPermissions) {
            if (ActivityCompat.checkSelfPermission(mContext, permission) != PackageManager.PERMISSION_GRANTED) {
                return false;
            }
        }
        return true;
    }

    private void requestPermission(Activity activity, int code, String... needPermissions) {
        ActivityCompat.requestPermissions(activity, needPermissions, code);
        Log.i(TAG, "request Permission...");
    }
    public void requestAllPermission(Activity activity) {
        if (Build.VERSION.SDK_INT >= 23) {
            Log.i(TAG, "request All Permission...");
            for (String permission : needPermissions) {
                if (!checkPermission(permission)) {
                    requestPermission(activity, 0, permission);
                }
            }
        }
    }
}

調(diào)用流程

     CheckPermissionsUtil checkPermissionsUtil = new CheckPermissionsUtil(this);
     checkPermissionsUtil.requestAllPermission(this);

2.調(diào)用系統(tǒng)圖片剪切

import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.net.Uri;

/**
 * Created by Administrator on 2017/5/5 0005.
 * 圖片裁剪
 */

public class CutUitl {


    public static Uri Ucrop(Uri uri, Activity activity) {
        // 裁剪圖片
        Intent intent = new Intent("com.android.camera.action.CROP");
        intent.setDataAndType(uri, "image/*");
        intent.putExtra("crop", "true");
        intent.putExtra("aspectX", 800);
        intent.putExtra("aspectY", 1000);

        intent.putExtra("scale", true);
        intent.putExtra("return-data", true);
        intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
        intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());
        intent.putExtra("FaceDetection", true); //  face detection
        activity.startActivityForResult(intent, 200);

        return uri;
    }


    public static void UcropNoUri(Uri uri, Activity activity) {
        // 裁剪圖片
        if(null == uri){
            return;
        }

        Intent intent = new Intent();
        intent.setAction("com.android.camera.action.CROP");
        intent.setDataAndType(uri, "image/*");// mUri是已經(jīng)選擇的圖片Uri
        intent.putExtra("crop", "true");
        intent.putExtra("aspectX", 800);
        intent.putExtra("aspectY", 1000);
        intent.putExtra("scale", true);
        intent.putExtra("return-data", true);
        activity.startActivityForResult(intent, 200);


    }

}

3.文件讀取和存儲(chǔ)


import android.content.Context;
import android.graphics.Bitmap;
import android.os.Environment;
import android.text.TextUtils;
import android.util.Log;
import android.widget.Toast;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.RandomAccessFile;

import cn.forward.androids.utils.ImageUtils;

/**
 * 文件讀取和保存
 */

public class FileUtil {

    /*存儲(chǔ)過(guò)的文件名路徑*/
    private static String SAVEPATH = "/sdcard/DCIM/savealva/";
    private static final String SAVEFILENAME = "save.txt";
    /*存儲(chǔ)對(duì)應(yīng)坐標(biāo)和文件*/
    private static String PATH = "/sdcard/DCIM/alva/";

    private static final String TAG = "zhangxin";
    private static String strContent;

    private static File files = null;
    private static File file = null;
    private static String strFilePath;



    public static void writeTxtToFile(String strcontent,String name,String path) {


            //生成文件夾之后饰剥,再生成文件殊霞,不然會(huì)出錯(cuò)
            makeFilePath(path, name);
            strFilePath = path + name;
        // 每次寫(xiě)入時(shí),都換行寫(xiě)
        strContent = strcontent + "\r\n";
        try {
            File file = new File(strFilePath);
            if (!file.exists()) {
                Log.e(TAG, "輸出信息-->: " + strFilePath);
                file.getParentFile().mkdirs();
                file.createNewFile();
            }
            RandomAccessFile raf = new RandomAccessFile(file, "rwd");
            raf.seek(file.length());
            raf.write(strContent.getBytes());

            raf.close();

        } catch (Exception e) {
            Log.e(TAG, "輸出信息-->: " + e.getMessage());
        }
    }

    /**
     * @param fileName
     * @return
     * @throws IOException
     * @desc 讀取sd卡文件內(nèi)容
     */
    public static String readSDCard(String fileName) throws IOException {
        // File file = new File(Environment.getExternalStorageDirectory(),fileName);
        File file = new File(fileName);
        FileInputStream fis = new FileInputStream(file);
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        byte[] buffer = new byte[1024];
        int len = 0;
        while ((len = fis.read(buffer)) != -1) {
            bos.write(buffer, 0, len);
        }
        byte[] data = bos.toByteArray();
        fis.close();
        bos.close();

        return new String(data);
    }

    // 生成文件
    public static File makeFilePath(String filePath, String fileName) {
        File file = null;
        makeRootDirectory(filePath);
        try {
            file = new File(filePath + fileName);
            if (!file.exists()) {
                file.createNewFile();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return file;
    }

    // 生成文件夾
    public static void makeRootDirectory(String filePath) {
        File file = null;
        try {
            file = new File(filePath);
            if (!file.exists()) {
                file.mkdir();
            }
        } catch (Exception e) {
            Log.i("error:", e + "");
        }
    }

    //吐司
    public static void Toast(Context context, String str) {
        Toast.makeText(context, str, Toast.LENGTH_SHORT).show();
    }


    //保存圖片
    public static void SaveImage(String savePath, boolean isDir, String name, Bitmap bitmap, Context context) {


        File files = null;
        File file = null;

        if (TextUtils.isEmpty(savePath)) {
            File dcimFile = new File(Environment.getExternalStorageDirectory(), "Alva");
            files = new File(dcimFile, "zx");
            // 保存的路徑
            //   file = new File(files, System.currentTimeMillis() + ".jpg");
            file = new File(files, name);
        } else {
            if (isDir) {
                files = new File(savePath);
                // 保存的路徑
                //file = new File(files, System.currentTimeMillis() + ".jpg");
                file = new File(files, name);
            } else {
                file = new File(savePath);
                files = file.getParentFile();
            }
        }
        files.mkdirs();

        FileOutputStream outputStream = null;
        try {
            outputStream = new FileOutputStream(file);
            bitmap.compress(Bitmap.CompressFormat.JPEG, 100, outputStream);
            ImageUtils.addImage(context.getContentResolver(), file.getAbsolutePath());

        } catch (Exception e) {
            e.printStackTrace();

        } finally {
            if (outputStream != null) {
                try {
                    outputStream.close();

                } catch (IOException e) {
                }
            }
        }

    }


}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末汰蓉,一起剝皮案震驚了整個(gè)濱河市绷蹲,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌古沥,老刑警劉巖瘸右,帶你破解...
    沈念sama閱讀 219,539評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異岩齿,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)苞俘,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評(píng)論 3 396
  • 文/潘曉璐 我一進(jìn)店門(mén)盹沈,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人吃谣,你說(shuō)我怎么就攤上這事乞封。” “怎么了岗憋?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,871評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵肃晚,是天一觀(guān)的道長(zhǎng)。 經(jīng)常有香客問(wèn)我仔戈,道長(zhǎng)关串,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,963評(píng)論 1 295
  • 正文 為了忘掉前任监徘,我火速辦了婚禮晋修,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘凰盔。我一直安慰自己墓卦,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,984評(píng)論 6 393
  • 文/花漫 我一把揭開(kāi)白布户敬。 她就那樣靜靜地躺著落剪,像睡著了一般。 火紅的嫁衣襯著肌膚如雪尿庐。 梳的紋絲不亂的頭發(fā)上忠怖,一...
    開(kāi)封第一講書(shū)人閱讀 51,763評(píng)論 1 307
  • 那天,我揣著相機(jī)與錄音屁倔,去河邊找鬼脑又。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的问麸。 我是一名探鬼主播往衷,決...
    沈念sama閱讀 40,468評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼严卖!你這毒婦竟也來(lái)了席舍?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,357評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤哮笆,失蹤者是張志新(化名)和其女友劉穎来颤,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體稠肘,經(jīng)...
    沈念sama閱讀 45,850評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡福铅,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,002評(píng)論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了项阴。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片滑黔。...
    茶點(diǎn)故事閱讀 40,144評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖环揽,靈堂內(nèi)的尸體忽然破棺而出略荡,到底是詐尸還是另有隱情,我是刑警寧澤歉胶,帶...
    沈念sama閱讀 35,823評(píng)論 5 346
  • 正文 年R本政府宣布汛兜,位于F島的核電站,受9級(jí)特大地震影響通今,放射性物質(zhì)發(fā)生泄漏粥谬。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,483評(píng)論 3 331
  • 文/蒙蒙 一衡创、第九天 我趴在偏房一處隱蔽的房頂上張望帝嗡。 院中可真熱鬧,春花似錦璃氢、人聲如沸哟玷。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,026評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)巢寡。三九已至,卻和暖如春椰苟,著一層夾襖步出監(jiān)牢的瞬間抑月,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,150評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工舆蝴, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留谦絮,地道東北人题诵。 一個(gè)月前我還...
    沈念sama閱讀 48,415評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像层皱,于是被迫代替她去往敵國(guó)和親性锭。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,092評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容