/* * Copyright 2014 http://Bither.net * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package net.bither.util; import android.content.ContentResolver; import android.content.ContentValues; import android.graphics.Bitmap; import android.media.ExifInterface; import android.os.Environment; import android.provider.MediaStore; import net.bither.BitherApplication; import net.bither.bitherj.utils.Utils; import java.io.File; import java.io.IOException; public class ImageFileUtil { private static final String FILE_TYPE_KEY = ".jpg"; private static final String DCIM_FILE_NAME = "IMG_%s"; private static final String AVATAR_FILE_NAME = "a%d.jpg"; public static File getImageForGallery(long timeMillis) { String pictureName = getImageNameForGallery(timeMillis); File dcimFile = new File(Environment.getExternalStorageDirectory() + File.separator + Environment.DIRECTORY_DCIM, "Camera"); if (!dcimFile.exists()) { dcimFile.mkdirs(); } File file = new File(dcimFile, formatFileName(pictureName)); return file; } public static String getImageNameForGallery( long timeMillis) { return String.format(DCIM_FILE_NAME, DateTimeUtil.getNameForDcim(timeMillis)); } public static final String saveImageToDcim(Bitmap bit, int orientation, long timeMillis) { String pictureName = getImageNameForGallery( timeMillis); File file = getImageForGallery(timeMillis); try { NativeUtil.compressBitmap(bit, 100, file.getAbsolutePath(), true); saveExifInterface(file, orientation); addPicutureToResolver(file, pictureName, orientation, timeMillis); } catch (IOException e) { e.printStackTrace(); return null; } return file.getAbsolutePath(); } private static void addPicutureToResolver(File file, String pictureName, int orientation, long timeInMillis) { ContentValues v = new ContentValues(); v.put(MediaStore.MediaColumns.TITLE, pictureName); v.put(MediaStore.MediaColumns.DISPLAY_NAME, pictureName); v.put(MediaStore.Images.ImageColumns.DESCRIPTION, "Taken with Picamera."); v.put(MediaStore.MediaColumns.DATE_ADDED, timeInMillis); v.put(MediaStore.Images.ImageColumns.DATE_TAKEN, timeInMillis); v.put(MediaStore.MediaColumns.DATE_MODIFIED, timeInMillis); v.put(MediaStore.MediaColumns.MIME_TYPE, "image/jpeg"); v.put(MediaStore.Images.ImageColumns.ORIENTATION, orientation); v.put(MediaStore.MediaColumns.DATA, file.getAbsolutePath()); File parent = file.getParentFile(); String path = parent.toString().toLowerCase(); String name = parent.getName().toLowerCase(); v.put(MediaStore.Images.ImageColumns.BUCKET_ID, path.hashCode()); v.put(MediaStore.Images.ImageColumns.BUCKET_DISPLAY_NAME, name); v.put(MediaStore.MediaColumns.SIZE, file.length()); ContentResolver c = BitherApplication.mContext.getContentResolver(); if (c != null) { c.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, v); } } public static String formatFileName(String name) { return name + FILE_TYPE_KEY; } private static void saveExifInterface(File file, int orientation) throws IOException { ExifInterface exif = new ExifInterface(file.getAbsolutePath()); switch (orientation) { case 90: exif.setAttribute(ExifInterface.TAG_ORIENTATION, Integer.toString(ExifInterface.ORIENTATION_ROTATE_90)); break; case 180: exif.setAttribute(ExifInterface.TAG_ORIENTATION, Integer.toString(ExifInterface.ORIENTATION_ROTATE_180)); break; case 270: exif.setAttribute(ExifInterface.TAG_ORIENTATION, Integer.toString(ExifInterface.ORIENTATION_ROTATE_270)); break; default: exif.setAttribute(ExifInterface.TAG_ORIENTATION, Integer.toString(ExifInterface.ORIENTATION_NORMAL)); break; } exif.saveAttributes(); } public static File getUploadAvatarFile(String fileName) { File file = FileUtil.getUploadImageDir(); return new File(file, fileName); } public static File getAvatarFile(String fileName) { File file = FileUtil.getAvatarDir(); return new File(file, fileName); } public static File getSmallAvatarFile(String fileName) { File file = FileUtil.getSmallAvatarDir(); return new File(file, fileName); } public static String getAvatarFileName(long time) { return Utils.format(AVATAR_FILE_NAME, time); } public static File getAdImageFile(String fileName) { File file = getAdImageFolder(fileName); clearUselessImageFile(file); file = new File(file, fileName); return file; } private static void clearUselessImageFile(File file) { File files[] = file.listFiles(); int length = files.length; if (length > 1) { File imageFile = files[length-1]; imageFile.delete(); } } public static File getAdImageFolder(String fileName) { File file = null; if (fileName.contains("en")) { file = FileUtil.getAdImageEnDir(); } else if (fileName.contains("CN")) { file = FileUtil.getAdImagZhCnDir(); } else { file = FileUtil.getAdImagZhTwDir(); } return file; } }