我在服务器端将图像作为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但我不知道如何使用。
答案 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
参数。