我有在移动拍摄照片,然后上传到服务器一个应用程序。 我想先检查照片的大小,然后减少照片大小取决于实际的照片尺寸某些特定的大小。 其实在服务器上它不允许照片具有比一些特定的尺寸更大(比如200 KB)。
或者,我可以限制相机捕捉的照片只在特定大小甚至有的一个改变相机的设置。
很多问题在这里问其检索照片的宽度和高度。 但我想在字节定制尺寸。
要打开我的使用cameraIntent相机
Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(cameraIntent, CAMERA_REQUEST);
这是唯一可能的解决方案据我所知,以减少大小..
public void onActivityResult(int requestcode, int resultcode, Intent data) {
if (resultcode == RESULT_OK) {
if (requestcode == SELECT_PICTURE) {
Uri uri = data.getData();
String imagePath = getPath(uri);
int SCALE = 2;
try{
BitmapFactory.Options o2 = new BitmapFactory.Options();
o2.inSampleSize = SCALE;
Bitmap bitmap= BitmapFactory.decodeFile(imagePath, o2);
OutputStream os = new FileOutputStream(imagePath);
bitmap.compress(Bitmap.CompressFormat.PNG, 85, os);
os.flush();
os.close();
File file = new File(imagePath);
Log.i("Bitmap", "Height Width "+bitmap.getHeight()+" "+bitmap.getWidth());
Log.i("File","Size in bytes "+file.length());
while(file.length()>100*1024)
{
SCALE +=2;
o2.inSampleSize = SCALE;
bitmap= BitmapFactory.decodeFile(imagePath, o2);
os = new FileOutputStream(imagePath);
bitmap.compress(Bitmap.CompressFormat.PNG, 85, os);
os.flush();
os.close();
file = new File(imagePath);
Log.i("Bitmap", "Height Width "+bitmap.getHeight()+" "+bitmap.getWidth());
Log.i("File","Size in bytes "+file.length());
}
bitmap = BitmapFactory.decodeFile(imagePath, o2);
}
catch (Exception e) {
e.printStackTrace();
}
txtimagepath.setText(imagePath);
}
}
}
protected String getPath(Uri uri) {
String[] projection = { MediaStore.Images.Media.DATA };
Cursor cursor = managedQuery(uri, projection, null, null, null);
int columnIndex = cursor
.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
return cursor.getString(columnIndex);
}
你不能动态指定生成的文件的大小,并做了扩展。 你必须重新大小的高度和宽度,这反过来会减少文件的大小。
可能是,重复的方法,以为终于可以让您的限度内的文件大小会有所帮助。 我想不出任何其他的解决方案。 AT-至少,在Android SDK并不提供这样的API。
如果您想保留宽/高,那么你可以尝试压缩技术,这将导致质量损失,并最终文件大小。 但同样,没有直接的API来实现这一目标。
Bitmap bt=Bitmap.createScaledBitmap(YourOrignalBitmap,320, 300, false);
ByteArrayOutputStream bos = new ByteArrayOutputStream();
bt.compress(Bitmap.CompressFormat.PNG,100, bos);
在这里您可以修复的大小和保持图像质量..