将带有文本(已连接)的图像上传到 Firebase 存储

Posted

技术标签:

【中文标题】将带有文本(已连接)的图像上传到 Firebase 存储【英文标题】:Upload Image with a Text (connected) to Firebase Storage 【发布时间】:2017-03-04 18:14:33 【问题描述】:

我使用 android 将图像上传到 Firebase 存储。我有一个应用程序可以在拍摄照片后立即发送图像。

但我想创建一个应用程序,在发送前在 ImageView 中显示照片。我想在照片下写一些文字,然后将它们都上传。

我应该使用哪些工具来做到这一点? 我有毕加索从存储下载。但我无法在拍摄照片后管理如何显示 ImageView,接下来写一些文本(如名称或描述)并将其发送到 Firebase。 第二个挑战是如何用这张图片显示特定的文字?

图像 文本。

在 Firebase 存储中,我没有看到一些用于存储带有文本的图像的字段。

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 存储,但文本(描述)正在发送到带有名称字段(来自 Firebase 存储)的数据库,这样我可以识别哪个文本属于特定图像?

有人可以帮我解决这个挑战吗?

问候

【问题讨论】:

【参考方案1】:

我只能笼统地回答,因为没有为您做具体回答的代码太多了。一般来说,有几种方法可以做到这一点:

向图像文件本身添加文本,上传更改后的新图像 将文本存储为图像属性,上传文件并将属性保存到其他位置 您可以将数据存储在实时数据库中,或者 您可以将数据存储在存储文件元数据中(假设成对)

【讨论】:

如何将文本添加到图像文件本身?在 Firebase 文档中,我找不到对您想法的正确解释。你认为我可以下载图片网址,并将其与文本一起传递到数据库吗?这就是如何正确识别哪些文本属于 url 的方式? 不幸的是,我们的文档无法捕获特定用例的解释——我们有太多的可能性无法详细捕获它们。如果您的目标是第一个,我建议您找到一个进行图像修改的库,这篇 SO 帖子似乎有一些很好的信息:***.com/questions/5459701/…。如果您的目标是第二个,这可能更容易,您需要存储文本的位置以及文本的其他属性(颜色、大小等),以便将其放在图像上。

以上是关于将带有文本(已连接)的图像上传到 Firebase 存储的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Firebase 存储访问图像?

将图像从 imageview 上传到 Firebase Android

如何使用带有 antd 上传功能的 CustomRequest 将图片上传到 Firebase?

Firebase 存储 - 将图像上传到 Firebase 存储并在实时数据库中创建指向该图像的链接

当我尝试将图像上传到 Firebase 存储时,putFile 在 kotlin 中不起作用

如何正确设置 CORS 以将带有 presignedUrl 的文件上传到 Firebase 存储?