保存前或上传到服务器之前调整照片大小

时间:2013-07-25 13:46:39

标签: android image camera

我有这段代码:

    @Override
public void onPictureTaken(byte[] data, Camera camera) {
    File pictureFileDir = getDir();
    if (!pictureFileDir.exists() && !pictureFileDir.mkdirs()) {
        Toast.makeText(context, "Dir not created. (ERR#GRA1)", Toast.LENGTH_LONG).show();
        return;
    }
    SimpleDateFormat dateFormat = new SimpleDateFormat("dd_MM_yyyy_HH_mm_ss", Locale.US);
    String date = dateFormat.format(new Date());
    photoFile = acao + android_id + "_" + date + "_" + coordenadas + ".jpg";
    String filename = pictureFileDir.getPath() + File.separator + photoFile;
    File pictureFile = new File(filename);
    try {
        FileOutputStream fos = new FileOutputStream(pictureFile);
        fos.write(data);
        fos.close();
        Toast.makeText(context, "Saved.", Toast.LENGTH_SHORT).show();
        Login.totalTiradas++;
    } catch (Exception error) {
        Toast.makeText(context, "Not saved. (ERR#GRA2)", Toast.LENGTH_LONG).show();            
    }

    camera2.startPreview();
    aviso.setVisibility(View.INVISIBLE);

    String stringUrl = "111.222.333.444";

    NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();
    if (networkInfo != null && networkInfo.isConnected()) { 
        new conectaFTP().execute(stringUrl);
    } else {
        Toast.makeText(context, "Fail. Image not sent. (ERR#CON1)", Toast.LENGTH_LONG).show();
    }        
}

将照片保存到SD卡,调用AsyncTask并上传图片。一切正常。

我需要调整图片大小。在保存之前或上传之前,任何人都对我有好处。

我无法使inSampleSizeCamera.setParameters正常工作(我的不好,当然),或者如果这是更好的方法。

2 个答案:

答案 0 :(得分:0)

首先从Bitmap

创建byte[]
Bitmap bmp = BitmapFactory.decodeByteArray(data, 0, data.length);

然后使用Bitmap.createScaledBitmap()

进行缩放

bmp=Bitmap.createScaledBitmap(bmp, width, height, true); //如果启用了双线性过滤器,则为true

答案 1 :(得分:0)

使用setParameters

解决
Camera.Parameters parametro = camera.getParameters();
parametro.setFlashMode("on");
List<Size> sizes = parametro.getSupportedPictureSizes();
for (int i = 0; i < sizes.size(); i++) {
    largura = sizes.get(i).width;
    altura = sizes.get(i).height;
    if (largura >= maxLargura) { break; }
}
parametro.setPictureSize(largura, altura);
camera.setParameters(parametro);
相关问题