2016-10-22 159 views
3

我使用Android將圖像上傳到Firebase存儲。我有一個應用程序在拍攝照片後立即發送圖像。上傳帶有文字(連接)到Firebase存儲的圖像

但我想創建一個應用程序,它在發送之前在ImageView中顯示一張照片。我想在照片下面寫下一些文字,然後上傳兩個文字。

我應該使用哪些工具來做到這一點? 我已經從畢加索下載存儲。但是我無法管理如何在捕獲照片後顯示ImageView,然後編寫一些文本(如名稱或描述)並將其發送到Firebase。 第二個挑戰是如何使用此圖像顯示特定文本?

IMAGE < - > TEXT。

在Firebase存儲中我沒有看到某個字段用於存儲帶有文本的圖像。

enter image description here

MainActivity.java:

private ProgressDialog mProgress; 
    private Bitmap bitmap; 
    private Button mUploadBtn; 
    private Button mSendBtn; 
    private EditText mEditText; 
    private ImageView mImageView; 
    Uri picUri; 

    private StorageReference mStorage; 



    private static final int CAMERA_REQUEST_CODE = 1; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 


     mStorage = FirebaseStorage.getInstance().getReference(); 

     mEditText = (EditText) findViewById(R.id.editText); 

     mSendBtn = (Button) findViewById(R.id.sendBtn); 
     mUploadBtn = (Button) findViewById(R.id.uploadBtn); 
     mImageView = (ImageView) findViewById(R.id.imageView); 

     mProgress = new ProgressDialog(this); 

     mUploadBtn.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 

       Intent i = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 

       File file=getOutputMediaFile(1); 
       picUri = Uri.fromFile(file); // create 
       i.putExtra(MediaStore.EXTRA_OUTPUT,picUri); // set the image file 

       startActivityForResult(i, CAMERA_REQUEST_CODE); 
      } 
     }); 
    } 

    public void UploadWithText(){ 

     String name = mEditText.getText().toString().trim(); 

    } 


    /** Create a File for saving an image */ 
    private File getOutputMediaFile(int type){ 
     File mediaStorageDir = new File(Environment.getExternalStoragePublicDirectory(
       Environment.DIRECTORY_PICTURES), "MyApplication"); 

     /**Create the storage directory if it does not exist*/ 
     if (! mediaStorageDir.exists()){ 
      if (! mediaStorageDir.mkdirs()){ 
       return null; 
      } 
     } 

     /**Create a media file name*/ 
     String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date()); 
     File mediaFile; 
     if (type == 1){ 
      mediaFile = new File(mediaStorageDir.getPath() + File.separator + 
        "IMG_"+ timeStamp + ".png"); 
     } else { 
      return null; 
     } 

     return mediaFile; 
    } 


    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 


     if(requestCode == CAMERA_REQUEST_CODE && resultCode == RESULT_OK) { 

      mProgress.setMessage("Uploading Image..."); 
      mProgress.show(); 


      Uri uri = picUri; 


      StorageReference filepath = mStorage.child("Photos").child(uri.getLastPathSegment()); 


      filepath.putFile(uri).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() { 
       @Override 
       public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) { 

        mProgress.dismiss(); 

        Uri downloadUri = taskSnapshot.getDownloadUrl(); 

        Picasso.with(MainActivity.this).load(downloadUri).fit().centerCrop().into(mImageView); 

        Toast.makeText(MainActivity.this, "Uploaded Successfully.", Toast.LENGTH_LONG).show(); 
       } 
      }); 
     } 
    } 

也許有,我可以將圖像發送到火力地堡存儲,但文本(介紹)的方式被髮送到數據庫與名稱字段(從Firebase存儲),並與此我可以識別哪些文本屬於一個特定的圖像?

有人能幫我解決這個難題嗎?

問候

回答

0

我只能回答廣泛,因爲有點太多的代碼,而無需做專門爲你解答。在一般情況下,有辦法很少做到這一點:

  • 將文本添加到圖像文件本身,上傳新的圖片用做
  • 存儲文本作爲圖像屬性的變化,上傳文件並保存到其他地方的屬性
    • 您可以將數據存儲在實時數據庫,或
    • 可以存儲在存儲文件元數據的數據(假設對)
+0

如何將文本添加到圖像文件本身?在Firebase文檔中,我找不到您的想法的正確解釋。你認爲我可以下載圖片網址,並將其傳遞給數據庫?這是如何識別哪些文本屬於正確的網址? – gryzek

+0

不幸的是,我們的文檔無法捕獲用例特定的解釋 - 我們有太多的可能性來詳細捕獲它們。如果你的目標是第一個,我建議找一個圖片修改,這個SO帖子似乎有一些很好的信息:http://stackoverflow.com/questions/5459701/how-can-i-watermark-的圖像 - 中的Java。如果你想瞄準第二個,這可能更容易,你需要存儲文本的位置以及文本的其他屬性(顏色,大小等),以便將它放在圖像上。 –