2016-05-26 5 views
1

Meine Anwendung erfasst das Bild mithilfe der Kameraabsicht. Das Bild wird in einer Datei als "abc.jpg" gespeichert. Jetzt versuche ich mit Picasso Library das Bild zu komprimieren, indem ich die Größe verändere. Ich bekomme keine Ausgabe. Mein Code erreicht niemals die onBitmapLoaded-Option des Ziels und auch keine onBitmapFailed. Hier ist mein Code.Wie komprimiere ich Bilder mit Picasso Library für Android?

public static final String DATA_PATH = Environment 
.getExternalStorageDirectory() + "/SnapReminder/"; 
File file1 = new File(DATA_PATH); 
file1.mkdirs(); 
String _path = DATA_PATH + "abc.jpg"; 
File file = new File(_path); 
Uri imageUri = Uri.fromFile(file); 
final Intent intent = new 
Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri); 
intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 0); 
startActivityForResult(intent, 0); 



protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
super.onActivityResult(requestCode, resultCode, data); 
if (requestCode == 0) { 
    if (resultCode == RESULT_OK) { 
    Picasso.with(context) 
    .load(_path) 
    .resize(size, size) 
    .centerCrop() 
    .into(new Target() { 
     @Override 
     public void onBitmapLoaded(final Bitmap bitmap, Picasso.LoadedFrom 
     from) {    
         File file = new File(_path); 
         try { 
          file.createNewFile(); 
          FileOutputStream ostream = new FileOutputStream(file); 
          bitmap.compress(Bitmap.CompressFormat.JPEG, 100, ostream); 
          ostream.close(); 
         } catch (Exception e) { 
          e.printStackTrace(); 
         } 
        } 

        @Override 
        public void onBitmapFailed(Drawable errorDrawable) { 
        } 

        @Override 
        public void onPrepareLoad(Drawable placeHolderDrawable) { 
        } 
       }); 

} 
} 
} 
+0

kann diesen Link sehen: https: //futurestud.io/blog/picasso-image-resizing-scaling-and-fit – rafsanahmad007

Antwort

1

Sie sollten Target nicht als anonyme Klasse verwenden. Definieren Sie ein Objekt dafür und übergeben Sie diese Referenz an die Funktion into(). Zum Beispiel:

Target myTarget = new Target(){...} 

und dann

Picasso.with(context) .load(_path).resize(size, size).centerCrop().into(myTarget); 

Der Grund dafür ist, dass eine Klasse anonym eine wirklich schwache Referenz gibt, was bedeutet, dass das Ziel Müll gesammelt wird.

Sag mir, wenn es geklappt hat.

Verwandte Themen