我的服務器限制圖片大小上傳圖片(2MB)。 我想從android設備上傳圖片到服務器。我想調整圖像大小。什麼是我可以調整圖像大小的最佳方式?[Android] - 將圖片上傳到服務器
3
A
回答
8
使用下面的代碼。使用「MAX_IMAGE_SIZE」,以千字節爲單位指定最大文件大小。在這個代碼中;首先我調整圖像大小,然後壓縮它。在代碼中查看註釋以更好地理解邏輯。
public static String resizeAndCompressImageBeforeSend(Context context,String filePath,String fileName){
final int MAX_IMAGE_SIZE = 700 * 1024; // max final file size in kilobytes
// First decode with inJustDecodeBounds=true to check dimensions of image
final BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeFile(filePath,options);
// Calculate inSampleSize(First we are going to resize the image to 800x800 image, in order to not have a big but very low quality image.
//resizing the image will already reduce the file size, but after resizing we will check the file size and start to compress image
options.inSampleSize = calculateInSampleSize(options, 800, 800);
// Decode bitmap with inSampleSize set
options.inJustDecodeBounds = false;
options.inPreferredConfig= Bitmap.Config.ARGB_8888;
Bitmap bmpPic = BitmapFactory.decodeFile(filePath,options);
int compressQuality = 100; // quality decreasing by 5 every loop.
int streamLength;
do{
ByteArrayOutputStream bmpStream = new ByteArrayOutputStream();
Log.d("compressBitmap", "Quality: " + compressQuality);
bmpPic.compress(Bitmap.CompressFormat.JPEG, compressQuality, bmpStream);
byte[] bmpPicByteArray = bmpStream.toByteArray();
streamLength = bmpPicByteArray.length;
compressQuality -= 5;
Log.d("compressBitmap", "Size: " + streamLength/1024+" kb");
}while (streamLength >= MAX_IMAGE_SIZE);
try {
//save the resized and compressed file to disk cache
Log.d("compressBitmap","cacheDir: "+context.getCacheDir());
FileOutputStream bmpFile = new FileOutputStream(context.getCacheDir()+fileName);
bmpPic.compress(Bitmap.CompressFormat.JPEG, compressQuality, bmpFile);
bmpFile.flush();
bmpFile.close();
} catch (Exception e) {
Log.e("compressBitmap", "Error on saving file");
}
//return the path of resized and compressed file
return context.getCacheDir()+fileName;
}
public static int calculateInSampleSize(BitmapFactory.Options options, int reqWidth, int reqHeight) {
String debugTag = "MemoryInformation";
// Image nin islenmeden onceki genislik ve yuksekligi
final int height = options.outHeight;
final int width = options.outWidth;
Log.d(debugTag,"image height: "+height+ "---image width: "+ width);
int inSampleSize = 1;
if (height > reqHeight || width > reqWidth) {
final int halfHeight = height/2;
final int halfWidth = width/2;
// Calculate the largest inSampleSize value that is a power of 2 and keeps both
// height and width larger than the requested height and width.
while ((halfHeight/inSampleSize) > reqHeight && (halfWidth/inSampleSize) > reqWidth) {
inSampleSize *= 2;
}
}
Log.d(debugTag,"inSampleSize: "+inSampleSize);
return inSampleSize;
}
+0
爲什麼這比其他答案更好?是因爲這壓縮文件的大小和質量?即使它更復雜。 –
+0
偉大的解決方案。幫助我出去了一堆! – Nikaoto
0
Bitmap scaledBitmap = scaleDown(realImage, MAX_IMAGE_SIZE, true);
比例縮小方法:
public static Bitmap scaleDown(Bitmap realImage, float maxImageSize,
boolean filter) {
float ratio = Math.min(
(float) maxImageSize/realImage.getWidth(),
(float) maxImageSize/realImage.getHeight());
int width = Math.round((float) ratio * realImage.getWidth());
int height = Math.round((float) ratio * realImage.getHeight());
Bitmap newBitmap = Bitmap.createScaledBitmap(realImage, width,
height, filter);
return newBitmap;
}
相關問題
- 1. Android-將照片上傳到服務器
- 2. 圖片上傳到服務器在android
- 3. 上傳圖片到服務器的android
- 4. Android服務:將圖片上傳到http服務器
- 5. Xamarin:將圖片上傳到服務器
- 6. 將圖片上傳到服務器上Android
- 7. android將圖像上傳到服務器
- 8. Android的圖片上傳AWS服務器
- 9. 如何將Android圖庫中的照片上傳到服務器?
- 10. 將圖片從android上傳到php服務器
- 11. 將圖片壓縮成Android上傳到服務器的過程
- 12. 將圖片上傳到服務器時重命名圖片
- 13. 上傳圖片到服務器
- 14. 圖片上傳到laravel服務器iOS
- 15. 上傳圖片到服務器
- 16. 圖片上傳iphone到php服務器
- 17. asp.net圖片上傳到服務器
- 18. 上傳圖片到服務器從JavaScript
- 19. 上傳圖片到服務器
- 20. 上傳圖片到網絡服務器
- 21. 在Android上通過php將照片上傳到Ubuntu服務器
- 22. 從圖庫中上傳圖片到服務器在android
- 23. Android從圖庫到服務器上傳圖片
- 24. 將圖像上傳到服務器ImageSwitcher
- 25. 將圖片從圖庫上傳到服務器時出錯
- 26. 將圖像上傳到服務器
- 27. ServerResponse 404將圖片上傳到服務器
- 28. 無法將圖片上傳到網絡服務器
- 29. 上傳圖片在服務器上iPhone
- 30. 將Android圖片上傳到C#.NET REST服務
cropping image? –
@vrundpurohit是的,我有圖像5MB,我想調整到2MB –
您可以使用_GZip_或者您可以發送圖像作爲字節數組! – Piyush