Resize Photo
/*
* Copyright (C) 2011 The Pluroium Development Team.
*
* 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 org.pluroid.pluroium;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import android.content.Context;
import android.content.SharedPreferences;
import android.graphics.Bitmap;
import android.graphics.Bitmap.CompressFormat;
import android.graphics.BitmapFactory;
import android.os.Environment;
import android.preference.PreferenceManager;
class Utils {
private static final String TAG = "Utils";
private static final float MEDIUM_SIZE = 640.0f;
private static final float SMALL_SIZE = 240.0f;
private static final int IO_BUFFER_SIZE = 4 * 1024;
private static File getCacheDirectory(Context context, String dirname) {
SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(context);
boolean useExternal = false;
File directory;
if (useExternal && Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())) {
directory = Environment.getExternalStorageDirectory();
} else {
directory = context.getCacheDir();
}
File subdir = new File(directory, "pluroid");
if (!subdir.exists()) {
subdir.mkdirs();
}
return new File(subdir, dirname);
}
public static File ensureCache(Context context, String dirname) throws IOException {
File cacheDirectory = getCacheDirectory(context, dirname);
if (!cacheDirectory.exists()) {
cacheDirectory.mkdirs();
new File(cacheDirectory, ".nomedia").createNewFile();
}
return cacheDirectory;
}
private static void copy(InputStream in, OutputStream out) throws IOException {
byte[] b = new byte[IO_BUFFER_SIZE];
int read;
while ((read = in.read(b)) != -1) {
out.write(b, 0, read);
}
}
public static File resizePhoto(Context context, String filePath, String resize) throws IOException {
BitmapFactory.Options option;
Bitmap originalBitmap, resizedBitmap;
File cacheDirectory = getCacheDirectory(context, "images");
if (!cacheDirectory.exists()) {
cacheDirectory.mkdirs();
new File(cacheDirectory, ".nomedia").createNewFile();
}
File newFilePath = new File(cacheDirectory, System.currentTimeMillis() + ".jpg");
option = new BitmapFactory.Options();
option.inJustDecodeBounds = true;
originalBitmap = BitmapFactory.decodeFile(filePath, option);
int w = option.outWidth, h = option.outHeight;
int rw, rh;
float newSize = "no".equals(resize) ? 0.0f : "medium".equals(resize) ? MEDIUM_SIZE : SMALL_SIZE;
if (newSize == 0.0f) {
FileInputStream fis = new FileInputStream(filePath);
FileOutputStream fos = new FileOutputStream(newFilePath);
copy(fis, fos);
fis.close();
fos.close();
return newFilePath;
} else {
if (w > h && w >= newSize) {
rw = (int) newSize;
rh = (int) (h * newSize / w);
} else if (h > w && h >= newSize) {
rh = (int) newSize;
rw = (int) (w * newSize / h);
} else {
rh = h;
rw = w;
}
int scale = 1;
while (true) {
if (w / 2 < newSize || h / 2 < newSize) {
break;
}
w /= 2;
h /= 2;
scale++;
}
option = new BitmapFactory.Options();
option.inSampleSize = scale - 1;
originalBitmap = BitmapFactory.decodeFile(filePath, option);
resizedBitmap = Bitmap.createScaledBitmap(originalBitmap, rw, rh, true);
FileOutputStream fos = new FileOutputStream(newFilePath);
resizedBitmap.compress(CompressFormat.JPEG, 100, fos);
fos.close();
return newFilePath;
}
}
}
Related examples in the same category