1. 程式人生 > >Android:拍照功能及將圖片壓縮存入指定路徑的方法

Android:拍照功能及將圖片壓縮存入指定路徑的方法

package com.example.administrator.testapplication;

import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Environment;
import android.provider.MediaStore;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.view.Window;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.ImageView;

import java.io.File;
import java.io.IOException;
import java.math.BigDecimal;

public class MainActivity extends Activity {

    private ImageView img;
    private static final String TEMP_PATH = Environment.getExternalStorageDirectory().getAbsolutePath() + "/tmp/temp_" + System.currentTimeMillis() + ".jpg";
    private static final int REQ_CARMER = 0x002;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_main);

        isFolderExists(Environment.getExternalStorageDirectory().getAbsolutePath() + "/tmp/");//判斷目錄是否存在
        checkFile(TEMP_PATH);//檢查檔案是否存在
        img = (ImageView) findViewById(R.id.img);
        findViewById(R.id.btn).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                takePhoto();
            }
        });
    }
    //檢查檔案是否存在
    private void checkFile(String path)
    {
        File file = new File(path);
        if (!file.exists())
        {
            try
            {
                file.createNewFile();
            } catch (IOException e)
            {
                e.printStackTrace();
            }
        }
    }
    //判斷目錄是否存在
    boolean isFolderExists(String strFolder)
    {
        File file = new File(strFolder);
        if (!file.exists())
        {
            if (file.mkdirs())
            {
                return true;
            } else
            {
                return false;

            }
        }
        return true;

    }
    private void takePhoto()
    {
        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        //path為儲存圖片的路徑,執行完拍照以後能儲存到指定的路徑下
        File file = new File(TEMP_PATH);
        intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(file));
        intent.putExtra(MediaStore.Images.Media.ORIENTATION, 0);
        startActivityForResult(intent, REQ_CARMER);
    }
    //圖片壓縮
    public Bitmap setImage(String path, Intent intent)
    {
        BitmapFactory.Options options = new BitmapFactory.Options();
        options.inJustDecodeBounds = true;
        BitmapFactory.decodeFile(path, options);

//        double value = new BigDecimal(options.outWidth).divide(new BigDecimal(options.outHeight), 4, BigDecimal.ROUND_HALF_UP).doubleValue();

//        intent.putExtra(Constants.ISNULL, false);
//        intent.putExtra(Constants.IMGPATH, path);
//        intent.putExtra(Constants.ASPECT_RATIO, value == 0d ? "1.0000" : format.format(value));

        options.inJustDecodeBounds = false;

        int be = Math.max(options.outWidth, options.outHeight) / 20;
        if (be % 10 != 0)
            be += 10;
        be = be / 10;
        if (be <= 0)
            be = 1;
        options.inSampleSize = be;
        return BitmapFactory.decodeFile(path, options);
    }
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data)
    {
        if (resultCode == RESULT_OK)
        {
            switch (requestCode)
            {

                case REQ_CARMER:

                    img.setImageBitmap(setImage(TEMP_PATH, new Intent()));


                    break;

            }
        }
        super.onActivityResult(requestCode, resultCode, data);
    }

}

不要忘了新增許可權:

<uses-permission android:name="android.permission.CAMERA"></uses-permission>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"></uses-permission>


相關推薦

Android:拍照功能圖片壓縮存入指定路徑方法

package com.example.administrator.testapplication; import android.app.Activity; import android.content.Intent; import android.graphics.B

Java圖片壓縮指定大小

        公司有業務,需要將部分圖片壓縮到指定大小以內才能上傳到某平臺。所以就學習了網上 各位大佬的圖片壓縮程式碼。寫了一個工具類,本著共同學習的態度,把程式碼貼一下,大家一起學習,一起進步。 工具類: package com.yulong.app.util; im

Android拍照,選擇本地圖片

Android 6.0之後對許可權做出了改變,所以很多時候發現無法正常呼叫系統的功能,所以需要進行許可權的動態獲取。這裡我寫拍照和獲取本地圖片,就獲取拍照的許可權。 /** * 檢查許可權 */ private void checkPermiss

android基於libjpeg-turbo的圖片壓縮框架

Light a lightweight image compress framework for Android based on libJpeg. 一個基於libJpeg的壓縮圖片框架, 支援配合rxjava使用。 可以一行程式碼解決圖片下載->壓縮->顯

Android性能優化之圖片壓縮優化

bit nat nsa lose 3.2 透明度 之間 修復 基準 1 分類Android圖片壓縮結合多種壓縮方式,常用的有尺寸壓縮、質量壓縮、采樣率壓縮以及通過JNI調用libjpeg庫來進行壓縮。 參考此方法:Android-BitherCompress 備註:對於資源

利用localResizeIMG圖片壓縮轉為base64上傳

在進行圖片上傳的時候,因為有些圖片太大,為了減輕伺服器的壓力,我們需要將圖片進行壓縮上傳。今天總結一下利用localResizeIMG如何將圖片壓縮轉為base64上傳,其中localResizeIMG外掛已上傳csdn。 程式碼如下: <!doctype html> <

Android拍照和相簿選擇圖片上傳所遇到的一些坑

微信公眾號:IT小頑童 前段時間做拍照和相簿選擇圖片上傳,遇到一些坑,最近閒來沒事,就整理一篇部落格,並寫了個demo,專案中使用純java,這次採用java + kotlin混合,GitHub的地址戳此 1、首先遇到的的是Android7.0的坑 說是坑,有點欲加

android 拍照本本地選擇圖片上傳

好久沒有坐下來安安靜靜的寫部落格了 ,上一篇寫的是自定義相機 ,以前專案中用過一些第三方的庫 ,萬物歸終今天找個時間總結一下 ,做開發幾年了 。隨著android studio的運用,開源資源越來越多,越來越好用 ,但是使用第三方的開原始碼,越來越不爽 ,很多庫漸漸的丟下了

如何圖片壓縮到50k以下

很多的人都不瞭解圖片怎麼進行壓縮,而且壓縮到50k一下這麼小也不知道怎麼操作,選擇使用的軟體也是不符合自己的心意,其實將圖片壓縮到50K一下還是比較簡單的,下面就為大家操作一下圖片壓縮到50K以下的具體操作步驟吧。 1:將自己需要進行壓縮的圖片準備好,放在可以隨時找到的位置

Android中利用Picasso實現圖片壓縮指定任意尺寸

之前做專案時,有個需求是指定照片壓縮到任意寬高尺寸上傳給伺服器。當時我自己寫了個圖片壓縮方法,但是不夠完美,小問題不斷(比如OOM之類的)。後來看到了神器Picasso不光能載入網路圖片,還能以任意尺寸載入本地圖片。於是我想,既然Picasso能任意尺寸載入本地圖片,那它肯

Android拍照和獲取相簿圖片

之前遇到各種拍照啊,獲取相簿圖片之類,都是直接去度娘,要麼之前的程式碼複製下,沒好好總結過。 再也不要問度娘了,再也不用一堆部落格裡找啊找了。。。 ----------------------------------------------我是正文的分割線---------

Android拍照、相簿 獲取圖片後,裁剪圖片

最近在做的B2B的專案,圖片大部分來源於使用者自己上傳; 由於android尺寸的不一,使用者相機,相簿的圖片也是奇形怪狀; 所以在上傳之前對圖片做一次裁剪是很有必要的! 下面是按比例裁剪圖片的demo 資原始檔activity_main.xml

怎麼圖片壓縮到最小,用什麼方法

圖片怎麼才能壓縮到最小呢?在我們的工作中,圖片檔案是不可缺少的,怎麼樣將圖片壓縮到最小呢?下面為大家介紹一下圖片壓縮到最小的操作方法。 1:首先需要將自己的圖片檔案準備好,放置在可以隨時進行新增的位置。 2:在瀏覽器找到一款壓縮軟體,將壓縮軟體安裝到自己的電腦中。開啟

Android有效避免程式OOM-圖片壓縮和三級快取

前言 我們都知道現在的手機應用APP真的是給我們的生活帶來了巨大的便利,應用中的圖片也是精美絕倫特別好看,並且隨著科技的進步,相機的解析度也越來越高了,手機拍出來的照片可能達到十幾兆很正常,圖片這麼大,在實際的開發過程中,還經常會遇到圖片的載入等

Android拍照後獲得的圖片旋轉90度問題

最近一直在做一個掃描的專案,用zxing實現二維碼的掃描,需求要實現拍照並且掃描名片,發現拍照出來的照片是旋轉的。一直找原因找不到,在國外一個論壇看到說是camera獲取data資料是橫向的,沒有經過處理所以顯示就是旋轉的。想了好久還是不會實現data的旋轉,索性就將bit

js實現圖片的上傳圖片轉為base64格式

首先用的是react + axios + antd檔案上傳介面:fileUpload(api, file, isHost = true) { const url = (isHost ? host : '') + api; const formData = new

Android第三方開源庫:圖片壓縮

CompressHelper 原圖: 許可權: <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> <uses-permissi

Android7.0呼叫系統拍照、系統相簿(圖片壓縮、檢視原圖、許可權處理)

效果以及需求 檢視原圖可點選放大,可兩指放大等 1.PopupWindow的簡單使用 PopupWindow最基本的三個條件是一定要設定的:View contentView

Android拍照和相簿選取圖片並裁剪得到路徑

-----------------轉載請註明出處:http://blog.csdn.net/android_cll 一:先來兩張效果圖: 1.這是我們專案用到這個功能的截圖、 2.demo的截圖,功能和上面截圖功能一樣,懶得截圖、 二:實現步驟: 1.xml的實現

H5前端呼叫Android拍照功能

JS呼叫Android攝像頭拍照 產品經理要求H5要實現直接呼叫原生攝像頭完成拍照功能: 一開始也是糊塗,我們前端的哥們總說用JS可以直接呼叫,不用Android的Java程式碼,所以我一開始也信了,想了想不是那麼回事,可以呼叫也是通過原生封裝好的。