2014-04-21 2 views
0

메신저로 보내고 카메라에서 이미지를 캡처하고 파일 생성을위한 PHP 컨트롤러를 보내고 javascript 파일을 보내서 mysql에 정보를 삽입하십시오.android image to base64 string, android 이미지를 base64 문자열로 보내고 안드로이드 앱에서이 코드를 사용하여

프로세스가 잘 작동하지만 결과 이미지가 작은 정말 품질이 좋지

if(ACTION_TAKE_PICTURE == requestCode) 
    { 

     Bundle extras = intent.getExtras(); 
     Bitmap bitmap; 

     if(null == extras || null == (bitmap=(Bitmap)extras.get("data"))) return; 
     ByteArrayOutputStream out = new ByteArrayOutputStream(); 
     bitmap.compress(Bitmap.CompressFormat.JPEG, 100, out); 

     byte [] ba = out.toByteArray(); 

     String b64img = Base64.encodeToString(out.toByteArray(), Base64.NO_WRAP); 

     try { out.close(); } catch(Exception e) {} 

     wv.loadUrl(String.format("%s%s('%s')", getString(R.string.js_call_prefix), getString(R.string.js_callback_camera), b64img )); 
    } 

PHP 코드가하는 것입니다

public function executeImagen(sfWebRequest $request) { 

    $id = $request->getParameter('id'); 
    $img = $request->getParameter('img'); 
    $category = $request->getParameter('category'); 
    $user = $this->getUser()->getAttribute('id_users'); 


    try { 
     $basepdir = $path = sfConfig::get("sf_upload_dir") . '/photos/'; 
     $basename = date('Ymd_His'); 
     $buffer = base64_decode(str_replace(' ', '+', $img)); 
     $pname = sprintf("%s%s.JPG", $basepdir, $basename); 
     $photo = sprintf("%s.JPG", $basename); 
     $fd = fopen($pname, "wb"); 

     if ($fd) { 
      fwrite($fd, $buffer); 
      fflush($fd); 
      fclose($fd); 
     } 
    } catch (Exception $exc) { 
     echo $exc->getTraceAsString(); 
    } 

    try { 

     $tabla = Doctrine::getTable('StorePhotos'); 
     $tabla = new StorePhotos(); 

     $tabla->id_store = $id; 
     $tabla->id_category = $category; 
     $tabla->id_users = $user; 
     $tabla->imagen = $photo; 
     $tabla->photo_date = date('Y-m-d H:i:s'); 

     $tabla->save(); 
    } catch (Exception $e) { 
     trigger_error("ERROR: ", $e->getMessage()); 
    } 

    return sfView::NONE; 
} 

감사합니다.

답변

0

축소판 그림을 보내고 있습니다. 대신 디스크에서 전체 크기 이미지를 검색해야합니다. Google이 this guide을 읽습니다.

+0

안녕하세요, 웹에서와 동일한 작업을하려고하지만 ..... 알아낼 수 없습니다. ( –

+0

기본적으로 의도를 보내고 의도 파일의 URI를 전달해야합니다. 카메라 응용 프로그램은 요청한 위치에 사진 파일을 놓습니다. 그런 다음 파일을 다시 읽고 base64로 인코딩하면됩니다. 이미지 파일의 크기가 몇 메가 바이트가 될 수 있으므로 스트리밍으로 파일을 인코딩하고 업로드하십시오. base64OutputStream] (http://developer.android.com/reference/android/util/Base64OutputStream.html) – BladeCoder

+0

고마워, 내가 이런 식으로 : \t \t 'ByteArrayOutputStream out = new ByteArrayOutputStream(); \t \t \t \t Base64OutputStream b64img = 새로운 Base64OutputStream (\t out, Base64.NO_WRAP | Base64.NO_CLOSE);',하지만 오류가 발생합니다. 이미지가 발견되지 않습니다. /storage/sdcard0/DCIM/Camera/20140422_114840.jpg 'Java.net.MalFormedURLException : 프로토콜을 찾을 수 없습니다. –

관련 문제