- Uri a Path
- da Path a Bitmap
- da Bitmap a byte array (salvabile come blob)
- da Bitmap a byte array e quindi a stringa (salvabile come stringa e con possibilità di interazione con il database online.
Da Uri a Path:
public class MainActivity extends AppCompatActivity { Button button; ImageView imageView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); imageView=(ImageView)findViewById(R.id.imageView); button=(Button)findViewById(R.id.button); button.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View v) { Intent intent=new Intent(); intent.setData(Uri.parse("content://media/external/images/media")); intent.setAction(Intent.ACTION_PICK); startActivityForResult(intent,0); } }); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data){ if(resultCode==RESULT_OK){ System.out.println(UriToPath(data.getData())); } } private String UriToPath(Uri uri){ Cursor crs=getContentResolver().query(uri,null,null,null,null); crs.moveToFirst(); int indice=crs.getColumnIndex(MediaStore.Images.ImageColumns.DATA); String s =crs.getString(indice); return s; }
02-18 23:15:29.203 4670-4670/? I/System.out: /storage/sdcard/DCIM/facciadaculo.jpeg
Da Path a Bitmap:
public class MainActivity extends AppCompatActivity { Button button; ImageView imageView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); imageView=(ImageView)findViewById(R.id.imageView); button=(Button)findViewById(R.id.button); button.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View v) { Intent intent=new Intent(); intent.setData(Uri.parse("content://media/external/images/media")); intent.setAction(Intent.ACTION_PICK); startActivityForResult(intent,0); } }); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data){ if(resultCode==RESULT_OK){ String s=UriToPath(data.getData()); Bitmap b=PathToBitmap(s,300); imageView.setImageBitmap(b); } } private String UriToPath(Uri uri){ Cursor crs=getContentResolver().query(uri,null,null,null,null); crs.moveToFirst(); int indice=crs.getColumnIndex(MediaStore.Images.ImageColumns.DATA); String s =crs.getString(indice); return s; } private Bitmap PathToBitmap(String path, int dimensioni){ BitmapFactory.Options opzioni=new BitmapFactory.Options(); opzioni.inJustDecodeBounds=true; BitmapFactory.decodeFile(path); int fattore=1; while(opzioni.outWidth/fattore>dimensioni && opzioni.outHeight/fattore>dimensioni){ fattore*=2; } opzioni.inSampleSize=fattore; opzioni.inJustDecodeBounds=false; Bitmap bmp=BitmapFactory.decodeFile(path,opzioni); return bmp; } }E funziona anche questa.
Da Bitmap a byte array:
public class MainActivity extends AppCompatActivity { Button button; ImageView imageView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); imageView=(ImageView)findViewById(R.id.imageView); button=(Button)findViewById(R.id.button); button.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View v) { Intent intent=new Intent(); intent.setData(Uri.parse("content://media/external/images/media")); intent.setAction(Intent.ACTION_PICK); startActivityForResult(intent,0); } }); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data){ if(resultCode==RESULT_OK){ String s=UriToPath(data.getData()); Bitmap b=PathToBitmap(s,300); byte[] bt=BitmapToByteArray(b); System.out.println(bt); } } private String UriToPath(Uri uri){ Cursor crs=getContentResolver().query(uri,null,null,null,null); crs.moveToFirst(); int indice=crs.getColumnIndex(MediaStore.Images.ImageColumns.DATA); String s =crs.getString(indice); return s; } private Bitmap PathToBitmap(String path, int dimensioni){ BitmapFactory.Options opzioni=new BitmapFactory.Options(); opzioni.inJustDecodeBounds=true; BitmapFactory.decodeFile(path); int fattore=1; while(opzioni.outWidth/fattore>dimensioni && opzioni.outHeight/fattore>dimensioni){ fattore*=2; } opzioni.inSampleSize=fattore; opzioni.inJustDecodeBounds=false; Bitmap bmp=BitmapFactory.decodeFile(path,opzioni); return bmp; } private byte[] BitmapToByteArray(Bitmap bmp){ ByteArrayOutputStream stream=new ByteArrayOutputStream(); bmp.compress(Bitmap.CompressFormat.JPEG,80,stream); byte[] b=stream.toByteArray(); return b; } }
02-18 23:25:30.707 4855-4855/? I/System.out: [B@1a6afe00(questa non la capisco... forse si tratta perlopiù di numeri non traducibili in caratteri)
Da bitmap a stringa:
public class MainActivity extends AppCompatActivity { Button button; ImageView imageView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); imageView=(ImageView)findViewById(R.id.imageView); button=(Button)findViewById(R.id.button); button.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View v) { Intent intent=new Intent(); intent.setData(Uri.parse("content://media/external/images/media")); intent.setAction(Intent.ACTION_PICK); startActivityForResult(intent,0); } }); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data){ if(resultCode==RESULT_OK){ String s=UriToPath(data.getData()); Bitmap b=PathToBitmap(s,300); String stringa=BitmapToString(b); System.out.println(stringa); } } private String UriToPath(Uri uri){ Cursor crs=getContentResolver().query(uri,null,null,null,null); crs.moveToFirst(); int indice=crs.getColumnIndex(MediaStore.Images.ImageColumns.DATA); String s =crs.getString(indice); return s; } private Bitmap PathToBitmap(String path, int dimensioni){ BitmapFactory.Options opzioni=new BitmapFactory.Options(); opzioni.inJustDecodeBounds=true; BitmapFactory.decodeFile(path); int fattore=1; while(opzioni.outWidth/fattore>dimensioni && opzioni.outHeight/fattore>dimensioni){ fattore*=2; } opzioni.inSampleSize=fattore; opzioni.inJustDecodeBounds=false; Bitmap bmp=BitmapFactory.decodeFile(path,opzioni); return bmp; } private byte[] BitmapToByteArray(Bitmap bmp){ ByteArrayOutputStream stream=new ByteArrayOutputStream(); bmp.compress(Bitmap.CompressFormat.JPEG,80,stream); byte[] b=stream.toByteArray(); return b; } private String BitmapToString(Bitmap bmp){ ByteArrayOutputStream stream=new ByteArrayOutputStream(); bmp.compress(Bitmap.CompressFormat.JPEG,80,stream); byte[] b=stream.toByteArray(); String s= Base64.encodeToString(b,Base64.DEFAULT); return s; } }
02-18 23:30:24.629 4970-4970/? I/System.out: /9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQYGBcU 02-18 23:30:24.629 4970-4970/? I/System.out: FhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYaKCgoKCgo 02-18 23:30:24.629 4970-4970/? I/System.out: KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAARCAFAAUADASIA 02-18 23:30:24.629 4970-4970/? I/System.out: AhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQA 02-18 23:30:24.629 4970-4970/? I/System.out: AAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3 ........che sarebbe una minima parte della stringa che rappresenterebbe la mia faccia.