2016-10-10 9 views
0

画像を撮影してローカルにフォルダに保存する必要があります。私はそうしていますが、イメージのサイズが大きすぎます。後で私はサーバー上にそのイメージをアップロードする必要があり、私はそれがサイズを最適化するための最良の方法を知りたいと思います。カメラから画像をサイズ変更してカードに保存する

public void takePicture() { 
    Intent imageIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
    String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date()); 

    File imagesFolder = new File(Environment.getExternalStorageDirectory(), "MyScore"); 

    File image = new File(imagesFolder, "QR_" + timeStamp + ".jpg"); 
    Uri uriSavedImage = Uri.fromFile(image); 
    imageIntent.putExtra(MediaStore.EXTRA_OUTPUT, uriSavedImage); 
    startActivityForResult(imageIntent, CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE); 
} 

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
} 

私はここで何をすべき魔法

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
} 

あなたは画像をcompreesでき

+0

もしそれがある程度まであなたを助けてくれたらアップヴォートを入手して回答として受け入れることができます –

答えて

1

画像圧縮するには:現在の画像サイズは、これは、画像を撮影するための私のコードは3メガバイト

で怒鳴るされていませんこのコードを介して

public String compressImage(String filePath) { 
    Bitmap scaledBitmap = null; 

    BitmapFactory.Options options = new BitmapFactory.Options(); 

    // by setting this field as true, the actual bitmap pixels are not 
    // loaded in the memory. Just the bounds are loaded. If 
    // you try the use the bitmap here, you will get null. 
    options.inJustDecodeBounds = true; 
    Bitmap bmp = BitmapFactory.decodeFile(filePath, options); 

    int actualHeight = options.outHeight; 
    int actualWidth = options.outWidth; 

    // max Height and width values of the compressed image is taken as 
    // 800x1000 

    float maxWidth = 1600.0f; 
    float maxHeight = 2000.0f; 
    float imgRatio = actualWidth/actualHeight; 
    float maxRatio = maxWidth/maxHeight; 

    // width and height values are set maintaining the aspect ratio of the 
    // image 

    if (actualHeight > maxHeight || actualWidth > maxWidth) { 
     if (imgRatio < maxRatio) { 
      imgRatio = maxHeight/actualHeight; 
      actualWidth = (int) (imgRatio * actualWidth); 
      actualHeight = (int) maxHeight; 
     } else if (imgRatio > maxRatio) { 
      imgRatio = maxWidth/actualWidth; 
      actualHeight = (int) (imgRatio * actualHeight); 
      actualWidth = (int) maxWidth; 
     } else { 
      actualHeight = (int) maxHeight; 
      actualWidth = (int) maxWidth; 

     } 
    } 

    // setting inSampleSize value allows to load a scaled down version of 
    // the original image 

    options.inSampleSize = calculateInSampleSize(options, actualWidth, 
      actualHeight); 

    // inJustDecodeBounds set to false to load the actual bitmap 
    options.inJustDecodeBounds = false; 

    // this options allow android to claim the bitmap memory if it runs low 
    // on memory 
    options.inPurgeable = true; 
    options.inInputShareable = true; 
    options.inTempStorage = new byte[16 * 1024]; 

    try { 
     // load the bitmap from its path 
     bmp = BitmapFactory.decodeFile(filePath, options); 
    } catch (OutOfMemoryError exception) { 
     exception.printStackTrace(); 

    } 
    try { 
     scaledBitmap = Bitmap.createBitmap(actualWidth, actualHeight, 
       Bitmap.Config.ARGB_8888); 
    } catch (OutOfMemoryError exception) { 
     exception.printStackTrace(); 
    } 

    float ratioX = actualWidth/(float) options.outWidth; 
    float ratioY = actualHeight/(float) options.outHeight; 
    float middleX = actualWidth/2.0f; 
    float middleY = actualHeight/2.0f; 

    Matrix scaleMatrix = new Matrix(); 
    scaleMatrix.setScale(ratioX, ratioY, middleX, middleY); 

    Canvas canvas = new Canvas(scaledBitmap); 
    canvas.setMatrix(scaleMatrix); 
    canvas.drawBitmap(bmp, middleX - bmp.getWidth()/2, 
      middleY - bmp.getHeight()/2, new Paint(
        Paint.FILTER_BITMAP_FLAG)); 

    // check the rotation of the image and display it properly 
    ExifInterface exif; 
    try { 
     exif = new ExifInterface(filePath); 

     int orientation = exif.getAttributeInt(
       ExifInterface.TAG_ORIENTATION, 0); 
     //Log.d("EXIF", "Exif: " + orientation); 
     Matrix matrix = new Matrix(); 
     if (orientation == 6) { 
      matrix.postRotate(90); 
      //Log.d("EXIF", "Exif: " + orientation); 
     } else if (orientation == 3) { 
      matrix.postRotate(180); 
      //Log.d("EXIF", "Exif: " + orientation); 
     } else if (orientation == 8) { 
      matrix.postRotate(270); 
      //Log.d("EXIF", "Exif: " + orientation); 
     } 
     scaledBitmap = Bitmap.createBitmap(scaledBitmap, 0, 0, 
       scaledBitmap.getWidth(), scaledBitmap.getHeight(), matrix, 
       true); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

    FileOutputStream out = null; 
    String filename = getFilename(); 
    try { 
     out = new FileOutputStream(filename); 

     // write the compressed bitmap at the destination specified by 
     // filename. 
     scaledBitmap.compress(Bitmap.CompressFormat.JPEG, 80, out); 

    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } 

    return filename; 

} 
+0

@Spirit –

関連する問題