Android調用手機相機拍照尝江,保存圖片會出現(xiàn)2張解決辦法涉波。

最近項目中使用系統(tǒng)相機拍照,保存圖片炭序,發(fā)現(xiàn)一些問題啤覆。

(1)小米手機拍照圖片會旋轉

??讀取圖片旋轉角度,然后再旋轉回去惭聂。

/**
 * 讀取照片旋轉角度
 *
 * @param path 照片路徑
 * @return 角度
 */
public static int readPictureDegree(String path) {
    int degree = 0;
    try {
        ExifInterface exifInterface = new ExifInterface(path);
        int orientation = exifInterface.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL);
        switch (orientation) {
            case ExifInterface.ORIENTATION_ROTATE_90:
                degree = 90;
                break;
            case ExifInterface.ORIENTATION_ROTATE_180:
                degree = 180;
                break;
            case ExifInterface.ORIENTATION_ROTATE_270:
                degree = 270;
                break;
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
    return degree;
}
/**
 * 旋轉圖片
 *
 * @param angle  被旋轉角度
 * @param bitmap 圖片對象
 * @return 旋轉后的圖片
 */
public static Bitmap rotatingImageView(int angle, Bitmap bitmap) {
    Bitmap returnBm = null;
    // 根據(jù)旋轉角度窗声,生成旋轉矩陣
    Matrix matrix = new Matrix();
    matrix.postScale(-1,1);
    matrix.postRotate(angle);
    try {
        // 將原始圖片按照旋轉矩陣進行旋轉,并得到新的圖片
        returnBm = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true);
    } catch (OutOfMemoryError e) {
        LogUtil.e(e.getMessage());
    } catch (Exception e) {
        LogUtil.e(e.getMessage());
    }
    if (returnBm == null) {
        returnBm = bitmap;
    }
    if (bitmap != returnBm) {
        bitmap.recycle();
    }
    return returnBm;
}

(2)讀取圖片是否為 .gif 圖片

?? 使用BitmapFactory.Options辜纲,能更準確的獲取圖片格式笨觅,
???判斷地址末尾 .gif 有時候會不準確(不推薦)

//區(qū)分是不是.gif
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeFile(path, options);
if ("image/gif".equals(options.outMimeType)) {
    imgPath = EditPhotSDCardUtil.getPictureDir() + pathName + "~";
} else {
    imgPath = EditPhotSDCardUtil.getPictureDir() + pathName + "-";
}

(3)上傳圖片到服務器,防止圖片會被刪除地址無效

??上傳服務器耕腾,一般使用地址见剩,但是用戶手動刪除圖片后,地址是無效的扫俺。為了防止地址無效苍苞,可以對需要上傳圖片地址做保存,但又希望系統(tǒng)讀取不到牵舵,可以對保存地址進行修改柒啤。

String SDCardRoot = Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator;
String imageCacheUrl = SDCardRoot + "APP_NAME" + File.separator;
File file = new File(imageCacheUrl);
if (!file.exists()) {
    file.mkdirs();  //如果不存在則創(chuàng)建
}
//區(qū)分 .gif,為了展示不同UI
if ("image/gif".equals(options.outMimeType)) {
    imgPath = imageCacheUrl + "文件名"+ "~";
} else {
    imgPath = imageCacheUrl + "文件名" + "-";
}

(4)調用系統(tǒng)相機畸颅,拍照后保存圖片担巩,會出現(xiàn)2張,而且只能讀取到一張没炒。

??讀取圖片地址api

final String[] IMAGE_PROJECTION = {
                MediaStore.Images.Media.DATA,
                MediaStore.Images.Media.DISPLAY_NAME,
                MediaStore.Images.Media.DATE_ADDED,
                MediaStore.Images.Media._ID,
                MediaStore.Images.Media.MINI_THUMB_MAGIC,
                MediaStore.Images.Media.BUCKET_DISPLAY_NAME};
//讀取相冊圖片地址
Cursor mCursor = mContentResolver.query(
                        MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
                        IMAGE_PROJECTION,
                        null,
                        null,
                        IMAGE_PROJECTION[2] + " DESC");

第一個問題涛癌,為什么會出現(xiàn)2張。

??我們可以去系統(tǒng)相冊查看兩張圖片,會發(fā)現(xiàn)兩張圖片的地址是不一樣的拳话,而且兩張圖片的大小也不同先匪。
出現(xiàn)2張的原因是:
?(1)調用系統(tǒng)相機,拍照完成我們會生成一個保存地址弃衍,而這個地址是: /storage/android/data/包名/Picture/ 呀非,這張是我們保存的拍照圖片。
?(2)相同的一張圖片在哪镜盯?這個地址是:/storage/Pictures/ 岸裙,這張圖片是系統(tǒng)復制的App目錄下Pictures中的圖片。

??所以就會出現(xiàn)在系統(tǒng)相冊兩張圖片速缆,但兩張圖片大小不一致降允,地址不同。

第二個問題艺糜,為什么只能讀取到一張剧董,是哪一張?

??調用系統(tǒng)api窘俺,只能讀取到一張衅澈,是系統(tǒng)復制的那張跌榔,也就是 /storage/Pictures/ 目錄下的這張迹冤,但是/storage/android/data/包名/Picture/ 目錄下的沒有讀取到六荒。

解決辦法

??知道了問題舔箭,就有解決辦法啊央,可分為三種方法:
?(1)第一種方法:
?????保存圖片的時候缔赠,修改下地址(可參照標題 3 晤碘,這樣讓系統(tǒng)無法識別出這張圖片)褂微,結果就是,我讀取不到园爷,系統(tǒng)也別想讀取不到宠蚂,在系統(tǒng)相冊里也就看不到這張圖片。

?(2)第二種方法:
?????因為api無法讀取到童社,那我們就直接再讀取/storage/android/data/包名/Picture/ 下的文件求厕,把圖片一塊加入到同一個集合中用于展示,這樣所有的圖片都有了扰楼,但是系統(tǒng)相冊中還是有兩張圖片呀癣,為解決這個問題。

?(3)第三種方法:(\color{red}{推薦}
?????在我們保存圖片的時候弦赖,直接保存到 /storage/Pictures/ 這個目錄下项栏,也不用系統(tǒng)幫我們復制了,這樣就只會出現(xiàn)一張蹬竖,而且我們也能調用api直接讀取到沼沈,兩個問題全都解決了流酬,完美!

//不要這樣保存 
//File storageDir = mContext.getExternalFilesDir(Environment.DIRECTORY_PICTURES);~~
//保存圖片的時候列另,直接保存到/storage/Pictures/  
File storageDir = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + "Pictures");

?
?
(如果以上有錯誤或者有更優(yōu)美的方式芽腾,感謝指出并改之,與君共勉)
這是我項目中出現(xiàn)的問題页衙,希望能夠幫助到你摊滔,Thanks,Bye!

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末拷姿,一起剝皮案震驚了整個濱河市惭载,隨后出現(xiàn)的幾起案子旱函,更是在濱河造成了極大的恐慌响巢,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,265評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件棒妨,死亡現(xiàn)場離奇詭異踪古,居然都是意外死亡,警方通過查閱死者的電腦和手機券腔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評論 2 385
  • 文/潘曉璐 我一進店門伏穆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人纷纫,你說我怎么就攤上這事枕扫。” “怎么了辱魁?”我有些...
    開封第一講書人閱讀 156,852評論 0 347
  • 文/不壞的土叔 我叫張陵烟瞧,是天一觀的道長。 經(jīng)常有香客問我染簇,道長参滴,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,408評論 1 283
  • 正文 為了忘掉前任锻弓,我火速辦了婚禮砾赔,結果婚禮上,老公的妹妹穿的比我還像新娘青灼。我一直安慰自己暴心,他們只是感情好,可當我...
    茶點故事閱讀 65,445評論 5 384
  • 文/花漫 我一把揭開白布杂拨。 她就那樣靜靜地躺著专普,像睡著了一般。 火紅的嫁衣襯著肌膚如雪扳躬。 梳的紋絲不亂的頭發(fā)上脆诉,一...
    開封第一講書人閱讀 49,772評論 1 290
  • 那天甚亭,我揣著相機與錄音,去河邊找鬼击胜。 笑死亏狰,一個胖子當著我的面吹牛,可吹牛的內容都是我干的偶摔。 我是一名探鬼主播暇唾,決...
    沈念sama閱讀 38,921評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼辰斋!你這毒婦竟也來了策州?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,688評論 0 266
  • 序言:老撾萬榮一對情侶失蹤宫仗,失蹤者是張志新(化名)和其女友劉穎够挂,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體藕夫,經(jīng)...
    沈念sama閱讀 44,130評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡孽糖,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,467評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了毅贮。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片办悟。...
    茶點故事閱讀 38,617評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖滩褥,靈堂內的尸體忽然破棺而出病蛉,到底是詐尸還是另有隱情,我是刑警寧澤瑰煎,帶...
    沈念sama閱讀 34,276評論 4 329
  • 正文 年R本政府宣布铺然,位于F島的核電站,受9級特大地震影響丢间,放射性物質發(fā)生泄漏探熔。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,882評論 3 312
  • 文/蒙蒙 一烘挫、第九天 我趴在偏房一處隱蔽的房頂上張望诀艰。 院中可真熱鬧,春花似錦饮六、人聲如沸其垄。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽绿满。三九已至,卻和暖如春窟扑,著一層夾襖步出監(jiān)牢的瞬間喇颁,已是汗流浹背漏健。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留橘霎,地道東北人蔫浆。 一個月前我還...
    沈念sama閱讀 46,315評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像姐叁,于是被迫代替她去往敵國和親瓦盛。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,486評論 2 348

推薦閱讀更多精彩內容