什麼我目前正在做的是以下幾點:Base64編碼和觀看圖像
拍照,將其壓縮到PNG,使用Base64的隱蔽,它通過PHP發送到數據庫。這一切都像一個魅力。我也可以解碼Base64字符串並完美地顯示照片。
但是,問題似乎是,當我在瀏覽器上查看圖片時,它的尺寸與它應該是不一樣的(或者至少我認爲)。
這是我花了編碼,並顯示在瀏覽器中的圖像:
無論電話,(還就GALAXY SII測試)的,這個問題仍然存在。你們有什麼想法可能會發生什麼?這裏有一些想法,我有但不知道... 1.壓縮圖像太多 - 或壓縮它時會改變某些東西2.Base64編碼/解碼搞亂了照片,並沒有正確顯示3.當我放置圖像視圖中的圖像會修改大小。
再一次,它看起來像完整的圖像沒有得到發送,因爲沒有辦法一個圖像甚至銀河sII圖像看起來很小。
這裏是我使用的代碼: 安卓
// CONVERT:
ByteArrayOutputStream bao = new ByteArrayOutputStream();
picture.compress(Bitmap.CompressFormat.PNG, 100, bao);
Log.d(TAG, "AFTER. Height: " + picture.getHeight() + " Width: " + picture.getWidth());
final byte[] ba = bao.toByteArray();
//encode to string
String photoTest = Base64.encodeToString(ba, Base64.DEFAULT);
//Camera on activity for result - save it as a bmp and place in imageview
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == CAMERA_PIC_REQUEST) {
// do something
}
if (resultCode == Activity.RESULT_OK) {
Log.d(TAG, "result ok");
Bundle b = data.getExtras();
picture = (Bitmap) b.get("data");
imageView.setImageBitmap(picture);
}
}
IMAGE去Android:
<ImageView
android:id="@+id/imageView1"
android:layout_width="100dp"
android:layout_height="100dp"
android:src="@drawable/icon"/>
PHP:
$image = base64_decode($_POST['image_data']);
謝謝您的幫助!
這是無關Base64以及所有關於如何轉換圖像的信息。如果圖像在解碼時太小,編碼時太小。 Base64以ASCII格式存儲二進制數據 - 解碼時數據完全相同,如果出錯,則啓動時出錯。 – DaveRandom 2011-12-27 17:50:34
感謝您的回覆DaveRandom。如果我理解你寫的是正確的,那麼問題是當傳遞給編碼時圖像大小不是原始大小。所以我想我的下一個問題是否是一種獲得圖像真實大小的方法。 – Splitusa 2011-12-27 17:57:41
我認爲@ Campadrenaline的答案是朝着正確的方向前進 - 我懷疑它是轉換圖像的'picture.compress()'。不要忘記,這不是關於「質量」,因爲這往往是用於壓縮圖像的方式。您遇到的問題是圖像被重新調整大小,或者在您的客戶端代碼的某個位置「重新採樣」。你應該把壓縮代碼拿出來,試着讓它在沒有它的情況下工作,然後開始壓縮。 – DaveRandom 2011-12-27 18:07:18