从base64字符串中获取高质量的图片

时间:2015-07-26 19:51:21

标签: php android image bitmap

我在服务器端将图像作为base64 string返回。在客户端应用接收此base64字符串并将其转换为byte[]然后转换为Bitmap,并在最后一步将此位图设置为ImageView。我的问题是返回的图像质量。它看起来很差;我可以看到这张图片的像素......

上传部分

客户端(上传):

BitmapFactory.Options options = null;
options = new BitmapFactory.Options();
options.inSampleSize = 3;
bitmap = BitmapFactory.decodeFile(imgPath, options);
ByteArrayOutputStream stream = new ByteArrayOutputStream();
// Must compress the Image to reduce image size to make upload easy
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream);
byte[] byte_arr = stream.toByteArray();
// Encode Image to String
encodedString = Base64.encodeToString(byte_arr, 0);

服务器端(接受上传的图片):

$_image = $_REQUEST['image'];
$binary = base64_decode($_image);
// for inserting it to db...
$sql = "INSERT INTO users (`_profile_pic`) VALUES ('$_image')";
$connect->query($sql);

接受部分

服务器端(从db获取base64字符串)

$user_data = "SELECT _name, _profile_pic FROM users WHERE _id = {$_id}";
$data = $connect->query($user_data);
while ($row = $data->fetch(\PDO::FETCH_ASSOC))
    $collectedResult[] = $row;
echo json_encode($collectedResult, JSON_UNESCAPED_UNICODE);

客户端(将图像设置为ImageView(有问题的部分))

_picture = (ImageView) findViewById(R.id.profile_imageView);
byte[] decodedString = Base64.decode(profile_pic_value, Base64.DEFAULT);
Bitmap bmp = BitmapFactory.decodeByteArray(decodedString, 0, decodedString.length);
_picture.setImageBitmap(bmp);

目前我不知道如何恢复或提高质量。

任何有用的评论,回答赞赏。

此致 Mirjalal。

P.S这个问题可能与另一个问题重复,但我找不到重复的问题。 :d 我发现this但我不知道如何使用。

1 个答案:

答案 0 :(得分:0)

在解码到RAM期间,可能会丢失颜色深度。 Android默认使用哪种颜色格式来解码位图。请参阅以下保存RAM但仍保持可接受图像质量的示例。

public static Bitmap decodeBase64(String input) {
    byte[] decodedByte = Base64.decode(input, Base64.DEFAULT);
    final BitmapFactory.Options options = new BitmapFactory.Options();
    options.inJustDecodeBounds = false;
    options.inPreferredConfig = Bitmap.Config.RGB_565;
    return BitmapFactory.decodeByteArray(decodedByte, 0, decodedByte.length, options);
}

仔细查看Bitmap.Config.RGB_565参数。