В моем приложении я собираю изображение, а затем накладываю кадрирование во втором действии, а затем изменяю его размер и отправляю на сервер. Сохраненное изображение выглядит размытым. сохранить изображение с хорошим качеством после resizing.Here мой код:Изображение выглядит размытым после изменения размера до 413 * 531 пикселей в android
PassImageBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Bitmap photo = getIntent().getExtras().getParcelable("image");
resultIv.setImageBitmap(photo);
// CALL THIS METHOD TO GET THE URI FROM THE BITMAP
Uri tempUri = getImageUri(getApplicationContext(), photo);
// CALL THIS METHOD TO GET THE ACTUAL PATH
File finalFile = new File(getRealPathFromURI(tempUri));
int x = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_PX, 413, getResources().getDisplayMetrics());
int y = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_PX, 531, getResources().getDisplayMetrics());
cropView.of(Uri.fromFile(finalFile)).withAspect(x, y).initialize(Image.this);
}
});
@Override
protected Map<String, String> getParams() throws AuthFailureError {
//Converting Bitmap to String
String image = getStringImage(croppedBitmap);
Map<String, String> params = new Hashtable<String, String>();
//Adding parameters
params.put(KEY_IMAGE, image);
return params;
}
//resize image
public String getStringImage(Bitmap bmp) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
int width = 413;
int height = 531;
Bitmap bm = Bitmap.createScaledBitmap(bmp, width, height, false);
bm.compress(Bitmap.CompressFormat.PNG, 100, baos);
byte[] imageBytes = baos.toByteArray();
String encodedImage = Base64.encodeToString(imageBytes, Base64.DEFAULT);
return encodedImage;
}
Попробуйте использовать внешние библиотеки, такие как Picasso или glide для получения сжатого растрового изображения. И послал, что растровое изображение на сервер может решить вашу проблему. – Nivedh
В первую очередь попробуйте «Bitmap.createScaledBitmap (bmp, width, height, true);' (фильтрация ON). BTW, я слишком ленив, чтобы попробовать, что является результатом '(int) TypedValue.applyDimension (TypedValue.COMPLEX_UNIT_PX, 413, getResources(). GetDisplayMetrics());'? И поскольку вы вводите их только как аспектный рацион, вы можете просто сделать 'withAspect (413, 531)' вместо этого. Я бы понял сложное преобразование в случае, если размер физического пикселя (его соотношение сторон) будет скорректирован, но это не так, как x, так и y обрабатываются одинаково. И если вы отрегулируете его на измерение, он позже обманет жесткий шкалу. – Ped7g
В любом случае, чтобы отладить проблему, продолжайте хранить данные sdcard Image (в форме PNG, так что это точная копия без потерь) на каждом этапе обработки (после захвата, после урожая, после масштабирования), чтобы узнать, как изменяется качество пиксельных данных после каждого шага. – Ped7g