2016-10-01 557 views
3

我已经编写代码将图像从文件位置转换为base64。我可以很容易地从绝对文件位置转换为base64像:C:/用户/ Java工程师/桌面/测试/画廊/ magar/Kanuglam.jpg,但我不能转换位置像
enter image description here 。我想要从web服务转换为Android使用的图像。 下面是代码示例:如何将Uri图像转换为Base64?

/** 
* TEST JSON 
*/ 
String convertToJsonArrayWithImageForMovieDetailTest(ResultSet rs) { 

    System.out.println("I am insied json converter"); 
    JSONArray list = new JSONArray(); 
    JSONObject obj ; 

    //File file; 
    File locatedFile; 
    FileInputStream fileInputStream; 
    try { 

     while (rs.next()) { 
      obj = new JSONObject(); 
      System.out.println("inside RS"); 
      System.out.println("date is there ha ha "); 

      obj.put("movie_name", rs.getString("name")); 
      obj.put("movie_gener", rs.getString("type")); 
      String is_free_stuff = rs.getString("is_free_stuff"); 
      if (is_free_stuff == "no") { 
       is_free_stuff = "PAID"; 
      } else { 
       is_free_stuff = "FREE"; 
      } 
      obj.put("movie_type", is_free_stuff); 

      //String movie_image = rs.getString("preview_image"); 

      //this does not work 
      String movie_image = "http://www.hamropan.com/stores/slider/2016-09-10-852311027.jpg"; 

      //this works for me 
     // file = new File("C:/Users/Java Engineer/Desktop/Nike Zoom Basketball.jpg"); 
      locatedFile = new File(movie_image); 
      // Reading a Image file from file system 
      fileInputStream = new FileInputStream(locatedFile); 
      if (locatedFile == null) { 
       obj.put("movie_image", "NULL"); 
      } else { 
       byte[] iarray = new byte[(int) locatedFile.length()]; 
       fileInputStream.read(iarray); 
       byte[] img64 = com.sun.jersey.core.util.Base64 
         .encode(iarray); 
       String imageString = new String(img64); 
       obj.put("movie_image", imageString); 
      } 
      list.add(obj); 
     } 


    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    return list.toString(); 
} 

的代码块对我的作品,但它似乎慢

public String imageConvertMethod(String url) throws Exception{ 
    ByteArrayOutputStream output = new ByteArrayOutputStream(); 

    try (InputStream input = new URL(url).openStream()) { 
     byte[] buffer = new byte[512]; 
     for (int length = 0; (length = input.read(buffer)) > 0;) { 
      output.write(buffer, 0, length); 
     } 
    } 

    byte [] byte_array = output.toByteArray(); 

    byte[] img64 = com.sun.jersey.core.util.Base64 
      .encode(byte_array); 
    String imageString = new String(img64); 

    return imageString; 
} 
+0

你必须先下载文件。 – greenapps

+0

废话。你的帖子告诉别的。 – greenapps

+0

我的帖子里说了什么? @greenapps – javalok

回答

1

好吧,从URL试试这个

bitmap = getBitmapFromUrl(image_url); 
ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream); 

byte[] array = stream.getByteArray(); 
encoded_string = Base64.encodeToString(array, 0); 

方法を载图片

public static Bitmap getBitmapFromURL(String src) { 
    try { 
     URL url = new URL(src); 
     HttpURLConnection connection = (HttpURLConnection) url.openConnection(); 
     connection.setDoInput(true); 
     connection.connect(); 
     InputStream input = connection.getInputStream(); 
     Bitmap myBitmap = BitmapFactory.decodeStream(input); 
     return myBitmap; 
    } catch (IOException e) { 
    e.printStackTrace(); 
    return null; 
    } 
} 
+0

在后台线程上运行 –

+0

我需要获取图像相对路径,如:/abc/cba/a.jpg并将其转换为字符串并将其发送给android应用程序。当我使用c:/abc/cba/a.jpg它可以工作,但/abc/cba/a.jpg不工作。我使用位于D:dir中的web服务(jersey api),但图像是在C:所以,我想从我的网络服务应用程序目录中的图像到另一个相对目录。我尝试使用Url但它太慢,所以需要另一种选择。谢谢 – javalok

+0

感谢所有试图帮助我的朋友,但我强制使用另一种想法,在那里,我将数据库中的图像保存为blob并将其保存到Android应用程序中。 – javalok

相关问题