將影像從 android 上傳到 mysql 的最佳/最快方法是什么?
我上傳以base46編碼的影像需要將近10秒的問題,并且在使用位圖上傳3或4次后,應用程式有時會崩潰,因為位圖其他原因是舊Android手機上的編碼影像..現在我使用ION但我猜ion 現在不是最好的,因為 10 秒我發現它很多,在更多問題上我應該將它們作為串列、JSON 陣列、JSON 陣列然后 JSON 物件或引數發送?
僅在 3 或 4 次成功上傳后發生的位圖錯誤
: Attempt to invoke virtual method 'boolean android.graphics.Bitmap.compress(android.graphics.Bitmap$CompressFormat, int, java.io.OutputStream)' on a null object reference
影像選擇
ActivityResultLauncher<Intent> mgetcontent = registerForActivityResult(
new ActivityResultContracts.StartActivityForResult(),
new ActivityResultCallback<ActivityResult>() {
@Override
public void onActivityResult(ActivityResult result) {
if (result.getResultCode() == Activity.RESULT_OK) {
Intent data = result.getData();
ClipData clipData = data.getClipData();
if (clipData != null) {
for (int i = 0; i < clipData.getItemCount(); i ) {
Uri imageUri2 = clipData.getItemAt(i).getUri();
int j =0;
bitmap = new Bitmap[i];
while (j < i) {
imageUri2 = data.getClipData().getItemAt(j).getUri();
try {
bitmap[j] = MediaStore.Images.Media.getBitmap(getContentResolver(), imageUri2);
} catch (IOException e) {
e.printStackTrace();
}
j ;
}
picsModelClassList.add(new PicsModelClass(
imageUri2.toString()
));
PicsAdapter adapter = new PicsAdapter(picsModelClassList, getApplicationContext());
adapter.notifyDataSetChanged();
pics_recycler.setAdapter(adapter);
}
}else {
Uri uri = data.getData();
picsModelClassList.add(new PicsModelClass(
uri.toString()
));
PicsAdapter adapter = new PicsAdapter(picsModelClassList, getApplicationContext());
adapter.notifyDataSetChanged();
pics_recycler.setAdapter(adapter);
}
}
}});
編碼影像
public String getStringImage(Bitmap bmp){
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.PNG, 100, baos);
byte[] imageBytes = baos.toByteArray();
String encodedImage = Base64.encodeToString(imageBytes, Base64.DEFAULT);
return encodedImage;
}
php
$pics_array = $_POST['pics_array'];
$ImagePath = pics/';
file_put_contents($ImagePath.uniqid().'.jpg',base64_decode($pics_array));
uj5u.com熱心網友回復:
編輯:重新閱讀您的代碼,您正在壓縮為 PNG。所以它只留下一個問題
不要使用base64。它是二進制資料,將其作為二進制資料發送。將其作為 Base64 發送將始終將其增加到 2-3 倍的大小。Base64 應該只在你絕對必須使用的地方使用,它是一種通過 URL 等純文本通道發送二進制資料的技巧。
uj5u.com熱心網友回復:
由于您使用的是 png ,因此您不能使用壓縮器,因為壓縮器引數被忽略(此處為 100)bmp.compress(Bitmap.CompressFormat.PNG, 100, baos);。
您可以使用以下代碼,使用 JPEG 格式并在質量和大小之間取得折衷
newBitmap.compress(Bitmap.CompressFormat.JPEG, 50, outputStream);.
但是,對于有效壓縮,此答案可能會有所幫助。
如果崩潰仍然存在,您可能需要做更多的事情。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/407234.html
標籤:
上一篇:檢查PHP列舉是否包含大小寫,例如基本(非支持)列舉的try()方法
下一篇:即使輸入存在,輸入驗證也會出錯
