【问题标题】:Fetch images and metadata from PHP server to android从 PHP 服务器获取图像和元数据到 android
【发布时间】:2011-10-27 14:35:56
【问题描述】:

我的 android 应用程序需要从托管 MySQL 数据库的 php 服务器获取一些信息。到目前为止它工作正常。服务器将信息编码成JSON并发送,然后我就可以很好地解析了。

但现在我还需要获取一张图片以及从数据库中获取的每一行信息。我得到的信息有一个字段,它指定对应图像在文件系统中的路径。

那么,一旦我获得了图像的路径,我如何读取它们以便我可以将它们与获得的信息行一起发送?我可以将图像与信息一起 JSON 编码吗?或者,一旦我在 android 应用程序中获得了信息,我应该用 readfile 一个一个地阅读它们吗?如果可以用 JSON 来做,那之后怎么解析图片的数据呢?可以举个例子吗?

【问题讨论】:

    标签: php android image http


    【解决方案1】:

    用于从路径下载图片

            public void DownloadImageFromPath(String path){
                InputStream in =null;
                Bitmap bmp=null;
                 ImageView iv = (ImageView)findViewById(R.id.img1);
                 int responseCode = -1;
                try{
    
                     URL url = new URL(path);//"http://192.xx.xx.xx/mypath/img1.jpg
                     HttpURLConnection con = (HttpURLConnection)url.openConnection();
                     con.setDoInput(true);
                     con.connect();
                     responseCode = con.getResponseCode();
                     if(responseCode == HttpURLConnection.HTTP_OK)
                     {
                         //download 
                         in = con.getInputStream();
                         bmp = BitmapFactory.decodeStream(in);
                         in.close();
                         iv.setImageBitmap(bmp);
                     }
    
                }
                catch(Exception ex){
                    Log.e("Exception",ex.toString());
                }
            }
    

    【讨论】:

      【解决方案2】:

      这就是我为获取图像和数据所做的工作。我发布它,以便如果它可以帮助某人。

      这是在服务器端发送数据的 PHP 脚本部分:

          $i=0;
          //$sql contains the result from the query of the data
          while($row=mysql_fetch_array($sql)){
              $output[]=$row;
      
              //Here we fetch the image from the files table
              $query = "SELECT path, type FROM FILES WHERE poi_id = '" . mysql_real_escape_string(trim($output[$i][0])) . "'";
              $r = mysql_query($query);
              $img = mysql_fetch_array($r);
              $bin = base64_encode_image($img[0]);
      
              //Let's append the image and the type to the data output.
              $output[$i]['img'] = $bin;
              $output[$i]['type'] = $img[1];
              $i++;
          }
          //This method sends the response to the Android app
          //You can just use echo(json_encode($output)); 
          RestUtils::sendResponse(200, json_encode($output), 'application/json');
      

      然后在Android应用中,解析JSON后,可以像这样将base64字符串作为图片保存到文件系统中:

      public void createImage(String image, String name){
          try{
              byte[] imageAsBytes = Base64.decode(image.getBytes(), Base64.DEFAULT);
              Bitmap img_bitmap = BitmapFactory.decodeByteArray(imageAsBytes, 0, imageAsBytes.length);
      
              FileOutputStream fos = openFileOutput(name, Context.MODE_WORLD_READABLE);
      
              img_bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos);
              fos.flush();
              fos.close();
      
          }
          catch(Exception e){
              e.printStackTrace();
          }
      }
      

      【讨论】:

        【解决方案3】:

        以文本形式获取图像的一种方法是使用base64。我已经将它与几个 web 服务一起使用,实际上那里有适用于 Android 的解码器。自 API 级别 8 以来,源代码中有一个。http://developer.android.com/reference/android/util/Base64.html 但由于我想针对其他级别,我自己包含它。 一种简单的方法是将图像保存在数据库中,而不是作为文件。

        【讨论】:

        • 我阅读了有关 base64 的信息,并且看到了执行此操作的 php 函数。但是如何将图像作为 php 变量获取呢?带文件功能?还是比这更复杂?我宁愿不在数据库中使用 BLOB 并将图像存储在文件系统中。
        • 我没用过,把文件存到文件系统里。我只在 web 服务给我 base64 中的信息时才使用它。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-06-03
        • 2018-07-04
        • 1970-01-01
        • 2012-07-19
        • 2015-07-13
        • 2019-07-21
        • 1970-01-01
        相关资源
        最近更新 更多