2011-08-15 2 views
4

내 안드로이드 애플 리케이션은 MySQL 데이터베이스를 호스팅하는 PHP 서버에서 정보를 가져와야합니다. 그것은 지금까지 잘 작동합니다. 서버는 정보를 JSON으로 인코딩하고 전송 한 다음 잘 구문 분석 할 수 있습니다.PHP 서버에서 이미지 및 메타 데이터 가져 오기

그러나 이제 DB에서 얻은 정보의 각 행과 함께 이미지를 가져와야합니다. 내가 얻는 정보는 파일 시스템에서 상대 이미지가 위치하는 경로를 지정하는 필드가 있습니다.

일단 이미지의 경로를 얻으면 정보 행을 함께 전송할 수 있도록 이미지를 읽는 방법은 무엇입니까? JSON이 정보와 함께 이미지를 인코딩 할 수 있습니까? 또는 일단 안드로이드 앱에 정보가 있으면 readfile로 하나씩 읽어야합니까? JSON으로 처리 할 수 ​​있다면 나중에 이미지의 데이터를 어떻게 파싱합니까? 예제를 제공해 줄 수 있습니까?

답변

0

이것은 데이터와 함께 이미지를 가져온 것입니다. 나는 그것이 누군가를 도울 수있는 경우에 그것을 배치한다.

$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'); 

그리고 안드로이드 응용 프로그램에서 JSON을 파싱 한 후, 당신은에 대한 이미지로 base64로 문자열을 저장할 수 있습니다

는 서버 측에서 데이터를 전송하는 PHP 스크립트의 일부입니다 이 같은 파일 시스템 :

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(); 
    } 
} 
2

텍스트 양식으로 이미지를 가져 오는 한 가지 방법은 base64입니다. 나는 여러 웹 서비스와 함께 그것을 사용했고 실제로 안드로이드에 대한 디코더가있다. API 레벨 8부터 소스 코드에 하나가 있습니다. http://developer.android.com/reference/android/util/Base64.html하지만 다른 레벨을 목표로하고 싶기 때문에 직접 포함 시키십시오. 하나의 쉬운 방법은 이미지를 파일로 저장하는 것입니다.

+0

나는베이스 64에 대해 읽고 난 산도를 보았다 그것을하는 p 함수. 하지만 어떻게 이미지를 PHP 변수로 가져 옵니까? 파일 기능? 아니면 그보다 더 복잡합니까? DB에서 BLOB를 사용하지 않고 파일 시스템에 이미지를 저장하는 것을 선호합니다. – ferguior

+0

파일 시스템에 파일을 저장하여 사용하지 않았습니다. 나는 웹 서비스가 나에게 base64로 정보를 주었을 때만 사용했다. –

0

경로에서 이미지를 다운로드는

 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()); 
      } 
     } 
관련 문제