文档章节

最简单的获取相机拍照的图片

MrLins
 MrLins
发布于 09/20 00:36
字数 1255
阅读 9
收藏 0
 

import android.content.Intent;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;

import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;

import com.ol.xow.R;

public class TakePhotoActivity extends AppCompatActivity {
    public static final int REQUEST_TAKEPHOTOS_CODE = 0003;
    private TextView tvPhotos;
    private ImageView imgView;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_capture);

        imgView = (ImageView) findViewById(R.id.img_view);

        tvPhotos = (TextView) findViewById(R.id.tv_photos);
        tvPhotos.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                startActivityForResult(intent, REQUEST_TAKEPHOTOS_CODE);
            }
        });
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        switch (requestCode) {
            case REQUEST_TAKEPHOTOS_CODE:
                if (resultCode == RESULT_OK) {
                    Bitmap bm = (Bitmap) data.getExtras().get("data");
                    long dataTake = System.currentTimeMillis();
                    String fileName = "pic_" + dataTake + ".jpg";
                    String LOCAL_PATH = Environment.getDataDirectory().getPath();
                    String BASE_STORAGE_PATH = LOCAL_PATH + "/my";
                    String CAPTURE_PICTURE_PATH = BASE_STORAGE_PATH + "/capture";
                    String savePath = FileUtils.createImage(CAPTURE_PICTURE_PATH, fileName, bm);
                    imgView.setImageBitmap(bm);
                    imgView.setTag(savePath);
                }
                break;
        }
    }
}



import android.graphics.Bitmap;
import android.text.TextUtils;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.math.BigInteger;
import java.nio.channels.FileChannel;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

/**
 * 文件操作工具类
 */
public class FileUtils {

    /**
     * 删除文件
     *
     * @param filePath
     * @return
     */
    public static boolean deleteFile(String filePath) {
        File file = new File(filePath);
        if (file.exists())
            return file.delete();
        return true;
    }

    public static String createFilePath(String folder, String fileName) {
        File dir = new File(folder);
        if (!dir.exists()) {
            dir.mkdirs();
        }
        return new File(dir, fileName).getAbsolutePath();
    }

    /**
     * 创建图片文件 默认扩展名 .jpg
     *
     * @param filePath
     * @param bitmap
     * @return
     */
    public static String createImage(String filePath, Bitmap bitmap) {
        String fileName=System.currentTimeMillis()+"";
        return createImage(filePath, fileName, ".jpg", bitmap);
    }
    /**
     * 创建图片文件 默认扩展名 .jpg
     *
     * @param filePath
     * @param fileName
     * @param bitmap
     * @return
     */
    public static String createImage(String filePath, String fileName, Bitmap bitmap) {
        return createImage(filePath, fileName, ".jpg", bitmap);
    }


    /**
     * 创建图片
     *
     * @param filePath
     * @param fileName
     * @param suffix
     * @param bitmap
     * @return
     */
    public static String createImage(String filePath, String fileName, String suffix, Bitmap bitmap) {
        FileOutputStream fos = null;
        File file = null;
        fileName = fileName + suffix;
        String savePath = filePath + "/" + fileName;
        try {
            file = new File(filePath);
            if (!file.exists()) {
                file.mkdirs();
                HxLog.d("Create the file:" + file.getPath());
            }
            file = new File(savePath);
            if (!file.exists()) {
                file.createNewFile();
                HxLog.d("Create the file:" + file.getPath());
            }
            fos = new FileOutputStream(savePath);
            bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos);
            fos.close();
        } catch (Exception e) {
            savePath = null;
            HxLog.e("Error on write createImage File:" + e);
        } finally {
            fos = null;
        }
        return savePath;
    }

    /**
     * 写入文件到txt
     *
     * @param strcontent
     * @param filePath
     * @param fileName
     */
    public static void writeTxtToFile(String strcontent, String filePath, String fileName) {
        //生成文件夹之后,再生成文件,不然会出错
        makeFilePath(filePath, fileName);

        String strFilePath = filePath + fileName;
        // 每次写入时,都换行写
        String strContent = strcontent + "\r\n";
        try {
            File file = new File(strFilePath);
            if (!file.exists()) {
                HxLog.d("Create the file:" + 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) {
            HxLog.e("Error on write File:" + e);
        }
    }

    /**
     * 创建文件
     *
     * @param filePath
     * @param fileName
     * @return
     */
    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;
    }

    /**
     * 生成文件夹
     *
     * @param filePath
     */
    public static void makeRootDirectory(String filePath) {
        File file = null;
        try {
            file = new File(filePath);
            if (!file.exists()) {
                file.mkdirs();
            }
        } catch (Exception e) {
            HxLog.i("error:", e + "");
        }
    }


    /**
     * RandomAccessFile 获取文件的MD5值
     *
     * @param file 文件路径
     * @return md5
     */
    public static String getFileMd53(File file) {
        MessageDigest messageDigest;
        RandomAccessFile randomAccessFile = null;
        try {
            messageDigest = MessageDigest.getInstance("MD5");

            if (file == null) {
                return "";
            }
            if (!file.exists()) {
                return "";
            }
            randomAccessFile = new RandomAccessFile(file, "r");
            byte[] bytes = new byte[1024 * 1024 * 2];
            int len = 0;
            while ((len = randomAccessFile.read(bytes)) != -1) {
                messageDigest.update(bytes, 0, len);
            }
            BigInteger bigInt = new BigInteger(1, messageDigest.digest());
            String md5 = bigInt.toString(16);
            while (md5.length() < 32) {
                md5 = "0" + md5;
            }
            return md5;
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (randomAccessFile != null) {
                    randomAccessFile.close();
                    randomAccessFile = null;
                }
            } catch (IOException e) {
                // 
                e.printStackTrace();
            }
        }
        return "";
    }

    public static String getFileMD5(File file) {
        if (!file.isFile()) {
            return null;
        }
        MessageDigest digest = null;
        FileInputStream in = null;
        byte buffer[] = new byte[1024 * 1024 * 2];
        int len;
        try {
            digest = MessageDigest.getInstance("MD5");
            in = new FileInputStream(file);
            while ((len = in.read(buffer, 0, 1024 * 1024 * 2)) != -1) {
                digest.update(buffer, 0, len);
            }
            in.close();
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
        BigInteger bigInt = new BigInteger(1, digest.digest());
        String md5 = bigInt.toString(16);
        while (md5.length() < 32) {
            md5 = "0" + md5;
        }
        return md5;
    }

    /**
     * @param size 文件大小(以Byte为单位)
     * @return String 格式化的常见文件大小(保留一位小数)
     */
    public static String formatFileSize(long size) {
        if (size < 1024 * 1024) {
            int f = (int) Math.ceil(size / 1024f);
            return String.format("%dK", f);
        } else {
            float f = size / (1024 * 1024f);
            return String.format("%.1fM", f);
        }
    }

    public static void copyFile(String pathFrom, String pathTo) {
        try {
            if (pathFrom.equalsIgnoreCase(pathTo)) {
                return;
            }

            FileChannel outputChannel = null;
            FileChannel inputChannel = null;
            try {
                inputChannel = new FileInputStream(new File(pathFrom)).getChannel();
                outputChannel = new FileOutputStream(new File(pathTo)).getChannel();
                inputChannel.transferTo(0, inputChannel.size(), outputChannel);
                inputChannel.close();
            } finally {
                if (inputChannel != null) inputChannel.close();
                if (outputChannel != null) outputChannel.close();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    /**
     * 是否是网络图片
     *
     * @param path
     * @return
     */
    public static boolean isHttp(String path) {
        if (!TextUtils.isEmpty(path)) {
            if (path.startsWith("http")
                    || path.startsWith("https")) {
                return true;
            }
        }
        return false;
    }


    public static boolean isSDCard(String path) {
        if (!TextUtils.isEmpty(path)) {
            File file = new File(path);
            return file.exists();
        }
        return false;
    }

    /**
     * 读取文件的大小
     */
    public static long getFileSize(File f) {
        long l = 0;
        try {
            if (f.exists()) {
                FileInputStream inputStream = new FileInputStream(f);
                l = inputStream.available();
            } 
        } catch (Exception e) {

        }
        return l;
    }

    /**
     * 调用此方法计算指定文件或指定文件夹的大小
     *
     * @param filePath 文件路径
     * @return
     */
    public static long getFileOrFolderSize(String filePath) {
        File file = new File(filePath);
        long blockSize = 0;
        try {
            if (file.isDirectory()) {
                blockSize = getFileSizes(file);
            } else {
                blockSize = getFileSize(file);
            }
        } catch (Exception e) {
            e.printStackTrace();
            HxLog.e("获取文件大小失败!");
        }
        return blockSize;
    }

    /**
     * 获取指定文件夹
     *
     * @param f
     * @return
     * @throws Exception
     */
    private static long getFileSizes(File f) throws Exception {
        long size = 0;
        File flist[] = f.listFiles();
        for (int i = 0; i < flist.length; i++) {
            if (flist[i].isDirectory()) {
                size = size + getFileSizes(flist[i]);
            } else {
                size = size + getFileSize(flist[i]);
            }
        }
        return size;
    }

    /**
     * 删除文件夹或者文件
     *
     * @param filePath
     * @return
     */
    public static void deleteFileOrFolder(String filePath) {
        File file = new File(filePath);
        try {
            if(file.isDirectory()){
                deleteFiles(file);
            }else{
                file.delete();
            }
        } catch (Exception e) {
            e.printStackTrace();
            HxLog.e("删除文件或文件夹失败!");
        }
    }

    /**
     * 删除文件夹下的文件
     *
     * @param f
     * @throws Exception
     */
    private static void deleteFiles(File f) throws Exception {
        File files[] = f.listFiles();
        for (int i = 0; i < files.length; i++) {
            if(!files[i].isDirectory()){
                files[i].delete();
            }
        }
    }

    public static String createImageType(String path) {
        try {
            if (!TextUtils.isEmpty(path)) {
                File file = new File(path);
                String fileName = file.getName();
                int last = fileName.lastIndexOf(".") + 1;
                String temp = fileName.substring(last, fileName.length());
                return "image/" + temp;
            }
        } catch (Exception e) {
            e.printStackTrace();
            return "image/jpeg";
        }
        return "image/jpeg";
    }

    public static String createVideoType(String path) {
        try {
            if (!TextUtils.isEmpty(path)) {
                File file = new File(path);
                String fileName = file.getName();
                int last = fileName.lastIndexOf(".") + 1;
                String temp = fileName.substring(last, fileName.length());
                return "video/" + temp;
            }
        } catch (Exception e) {
            e.printStackTrace();
            return "video/mp4";
        }
        return "video/mp4";
    }

    /**
     * 获取文件后缀
     * @return
     */
    public static String getFileSuffix(String path){
        if (!TextUtils.isEmpty(path)) {
            int last = path.lastIndexOf(".");
            String suffix = path.substring(last, path.length());
            return suffix;
        }
        return "";
    }

    public static String getFileName(String path){
        if (!TextUtils.isEmpty(path)) {
            int last = path.lastIndexOf(File.separator);
            String fileName = path.substring(last + 1, path.length());
            return fileName;
        }
        return "";
    }
}

 

© 著作权归作者所有

MrLins
粉丝 5
博文 62
码字总数 28057
作品 0
松江
程序员
私信 提问
使用 android 的摄像头拍照

android提供了操作摄像头的API,可以通过两种做法来使用: 通过Intent直接调用系统提供的照相机功能,复用它的拍照Activity,这是最简单和最方便的办法,因为你不需要考虑手机的兼容性问题,...

华宰
2011/09/07
5K
0
佳能 EDSDK 教程 C# 版本

介绍 佳能EOS数码SDK是一个 可以用来远程控制其数码单反相机相当强大的SDK。不幸的是,想在互联网上找些很好的例子相当难,而且提供的文档也不是很齐全。因为我已经找到了很多能让其他人更容...

oschina
2013/11/27
9.9K
12
项目需求讨论 - WebView下拍照及图片选择功能

前言: 如果觉得掘金上看图片放大看不清楚,可以跳到另外的同步发布的链接看,放大图片下部有个可以查看原图功能,很清楚:项目需求讨论 - WebView下拍照及图片选择功能 现在很多app里面,都...

青蛙要fly
2018/06/23
0
0
Android Camera2 教程 · 第一章 · 概览

从 Android 5.0 开始,Google 引入了一套全新的相机框架 Camera2(android.hardware.camera2)并且废弃了旧的相机框架 Camera1(android.hardware.Camera)。作为一个专门从事相机应用开发的...

天王盖地虎626
06/18
18
0
一个奇葩的问题,大家来看看,给点建议

我的项目中需要对图片进行对比度处理,然后获取图片有两个路径,一个是相机拍照,一个是图库选择。现在的问题是当我的图片是从图库选择的时候,可以正常处理对比度效果,但是如果是相机拍照的...

南雨
2016/08/05
78
0

没有更多内容

加载失败,请刷新页面

加载更多

Flink Graph生成及Hash生成分析

222

MrPei
8分钟前
1
0
[译]Android Activity 和 Fragment 状态保存与恢复的最佳实践

https://blog.csdn.net/growing_tree/article/details/53759564 https://blog.csdn.net/u013588712/article/details/54691791...

shzwork
9分钟前
1
0
调用第三方快递鸟物流单号查询接口API代码示例

最近进行网站后台开发,需要实现物流的即时查询,发现之前集成的 快递100物流查询 API ——【PHP 快递查询源码资源】 已经不能正常使用了; 为了方便以后的业务需求,经过比较,最后选择使用...

程序的小猿
16分钟前
2
0
java Poi 操作执行excel 文件中函数问题

poi 读取excel 文件,当excel 有函数时,poi直接读取返回的是excel 函数,并不能返回函数计算结果: 解决步骤: sheet.setForceFormulaRecalculation(true); 判断该列格式是否为...

早a
24分钟前
3
0
js模拟实现输入框input事件

直接修改value值是无法触发对应元素的事件的。 通过发送输入框input事件了, 可以触发。 这里简单封装了一个方法. window.inputValue = function (dom, st) { var evt = new InputEvent('i...

開援带碼
25分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部