Skip to content

Commit

Permalink
图片大小设置
Browse files Browse the repository at this point in the history
  • Loading branch information
Sean-Snow committed Jul 6, 2016
1 parent 68e3876 commit bf2057b
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 8 deletions.
31 changes: 26 additions & 5 deletions android/src/main/java/software/sitb/react/io/FileUtils.java
Original file line number Diff line number Diff line change
Expand Up @@ -137,10 +137,10 @@ public static void compressImage(ContentResolver contentResolver, Uri uri, int q
}
}

public static void autofixOrientation(ContentResolver contentResolver, String path) {
public static void fixOrientationAndScale(ContentResolver contentResolver, String path, int width, int height) {
int degree = readPictureDegree(path);
Bitmap bitmap = BitmapFactory.decodeFile(path);
Bitmap newBitmap = rotaingImageView(degree, bitmap);
Bitmap newBitmap = rotateAndScale(degree, width, height, bitmap);
OutputStream imageOut = null;
try {
imageOut = contentResolver.openOutputStream(Uri.fromFile(new File(path)));
Expand Down Expand Up @@ -207,17 +207,38 @@ public static int readPictureDegree(String path) {
}

/**
* 旋转图片
* 旋转图片和缩放照片
*
* @param angle 度数
* @param bitmap 图片
* @return Bitmap
*/
public static Bitmap rotaingImageView(int angle, Bitmap bitmap) {
public static Bitmap rotateAndScale(int angle, int newWidth, int newHeight, Bitmap bitmap) {
//旋转图片 动作
Matrix matrix = new Matrix();
int width = bitmap.getWidth();
int height = bitmap.getHeight();
if (newWidth != 0 && newHeight != 0) {
int tempMin = Math.min(newWidth, newHeight);
int tempMax = Math.max(newWidth, newHeight);

if (width < height) {
newWidth = tempMin;
newHeight = tempMax;
} else {
newWidth = tempMax;
newHeight = tempMin;
}
//计算缩放率,新尺寸除原始尺寸
float widthScale = ((float) newWidth) / width;
float heightScale = ((float) newHeight) / height;

// 缩放图片动作
matrix.postScale(widthScale, heightScale);
}
matrix.postRotate(angle);
// 创建新的图片
return Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true);
return Bitmap.createBitmap(bitmap, 0, 0, width, height, matrix, true);
}

}
16 changes: 13 additions & 3 deletions android/src/main/java/software/sitb/react/media/MediaManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -177,13 +177,21 @@ public void onActivityResult(int requestCode, int resultCode, Intent data) {
Log.d(TAG, "拍照成功");
Uri imageUri = uri[0];

int width = 0;
int height = 0;
if (options.hasKey("size")) {
ReadableMap size = options.getMap("size");
width = size.getInt("width");
height = size.getInt("height");
}

String path = FileUtils.getFilePathFromContentUri(
reactContext.getContentResolver(),
imageUri.toString(),
new String[]{MediaStore.Images.Media.DATA}
);

FileUtils.autofixOrientation(reactContext.getContentResolver(), path);
FileUtils.fixOrientationAndScale(reactContext.getContentResolver(), path, width, height);
if (options.hasKey("quality")) {
// 压缩图片
Quality quality = Quality.values()[options.getInt("quality")];
Expand All @@ -199,6 +207,7 @@ public void onActivityResult(int requestCode, int resultCode, Intent data) {
}
}
FileUtils.setImageGps(path, finalLatitude, finalLongitude);

WritableMap response = new WritableNativeMap();
WritableMap original = new WritableNativeMap();
original.putString("path", imageUri.toString());
Expand Down Expand Up @@ -249,11 +258,13 @@ public void onActivityResult(int requestCode, int resultCode, Intent data) {
values.put(MediaStore.Images.Media.DATE_TAKEN, timestamp);
values.put(MediaStore.Images.Media.DISPLAY_NAME, "IMG_" + timestamp + ".jpg");
values.put(MediaStore.Images.Media.DATE_TAKEN, timestamp);

uri[0] = reactContext.getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);

// 需要对图片设置压缩,所以不适用自带GPS设置
// intent.putExtra(MediaStore.Images.Media.LATITUDE, latitude);
// intent.putExtra(MediaStore.Images.Media.LONGITUDE, longitude);

intent.putExtra(MediaStore.EXTRA_OUTPUT, uri[0]);
}

Expand Down Expand Up @@ -293,7 +304,7 @@ public void onActivityResult(int requestCode, int resultCode, Intent data) {
reactContext.startActivityForResult(intent, OPEN_EDIT_REQUEST_CODE, null);
}

public Uri setEditingParams(Intent intent) {
private Uri setEditingParams(Intent intent) {
intent.putExtra("crop", "true");
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
Expand All @@ -307,5 +318,4 @@ public Uri setEditingParams(Intent intent) {
return uri;
}


}

0 comments on commit bf2057b

Please sign in to comment.