用相机拍照并发送到服务器端时,丢失图像质量

时间:2012-02-29 00:08:03

标签: android android-camera

我这几天一直在努力解决这个问题,我真的不知道是什么问题。 我的CameraView类具有以下代码:

Camera.PictureCallback photoCallback = new Camera.PictureCallback() {
    public void onPictureTaken(byte[] imageData, Camera camera) {
        Intent mIntent = new Intent();  
        mIntent.putExtra(GeneralCodes.CREATE_NEW_ACCOUNT_PROFILE_PICTURE, imageData);
        setResult(Activity.RESULT_OK, mIntent);
        finish();
    }
};

然后,我的活动收到了这个结果:

ImageView i = (ImageView) findViewById(R.id.createAccounProfileImage);
Bitmap yourSelectedImage = FileUtilities.createBitmapBasedOnByteImage(data.getByteArrayExtra(GeneralCodes.CREATE_NEW_ACCOUNT_PROFILE_PICTURE), getResources().getDisplayMetrics().density);

finalImage=yourSelectedImage;
            i.setImageBitmap(BitmapUtils.getRoundedCornerBitmap(finalImage, Math.min(finalImage.getWidth(), finalImage.getHeight()), true));        

FileUtilities.createBitmapBasedOnByteImage方法实际上唯一的做法就是BitmapFactory.decodeByteArray()调用。

然后,我的下一步是将此Bitmap发送到我的服务器:

ByteArrayOutputStream baos = new ByteArrayOutputStream();
    if(finalImage!=null)finalImage.compress(Bitmap.CompressFormat.JPEG, 0, baos);
    byte[] data = baos.toByteArray();

    pairs.add(new BasicNameValuePair("PROFILE_PIC_DATA", Base64.encodeToString(data, Base64.DEFAULT)));     

信息将发送到我的服务器,图像将保留在CLOB中。 当我的下一个活动检索到这些数据时:

bitmap = BitmapFactory.decodeStream(createInputStream(Base64.decode(obj.getString("photo_image"), Base64.DEFAULT)));

质量完全搞砸了。就像它是由0.3mpx相机拍摄的。 我使用的是三星Galaxy Nexus,所以我相信我的屏幕会让它变得更糟。 CLOB中的图像大小约为2.7kb ......所以我猜测数据在发送到我的服务器时丢失了...我不太确定。

有人见过这个吗?

谢谢, 菲利普

1 个答案:

答案 0 :(得分:2)

压缩时,您将图像质量设置为0。而是将其设置为更大的东西。请参阅docs。类似的东西:

if(finalImage!=null)finalImage.compress(Bitmap.CompressFormat.JPEG, 80, baos);