Encode image from URL in Base64 in Java
27,680
Solution 1
You should not use FileInputStream.
Use something like:
URL url = new URL(imageUrl);
BufferedInputStream bis = new BufferedInputStream(url.openConnection().getInputStream());
Also you need to read data in loop until you read all bytes of image.
Solution 2
Try this function by passing image url in parameter.
private String getByteArrayFromImageURL(String url) {
try {
URL imageUrl = new URL(url);
URLConnection ucon = imageUrl.openConnection();
InputStream is = ucon.getInputStream();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int read = 0;
while ((read = is.read(buffer, 0, buffer.length)) != -1) {
baos.write(buffer, 0, read);
}
baos.flush();
return Base64.encodeToString(baos.toByteArray(), Base64.DEFAULT);
} catch (Exception e) {
Log.d("Error", e.toString());
}
return null;
}
Solution 3
Following code converts image into the base64 string:
public String getBase64EncodedImage(String imageURL) throws IOException {
java.net.URL url = new java.net.URL(imageURL);
InputStream is = url.openStream();
byte[] bytes = org.apache.commons.io.IOUtils.toByteArray(is);
return Base64.encodeBase64String(bytes);
}
P.S. Above code uses commons-io
as a dependency.
Solution 4
/**
*
* @param url - web url
* @return - Base64 String
* Method used to Convert URL to Base64 String
*/
public String convertUrlToBase64(String url) {
URL newurl;
Bitmap bitmap;
String base64 = "";
try {
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
newurl = new URL(url);
bitmap = BitmapFactory.decodeStream(newurl.openConnection().getInputStream());
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, outputStream);
base64 = Base64.encodeToString(outputStream.toByteArray(), Base64.DEFAULT);
} catch (Exception e) {
e.printStackTrace();
}
return base64;
}
Author by
skunk a
Updated on May 25, 2020Comments
-
skunk a almost 4 years
I want to encode and save from an URL images in Base64. I found several example doing the encoding from a local file but not from an URL. Is there a possibility to do that?
I tried something like that, but unsuccessfully. Any clue,help? Thanks for your answer.
public static void main(String[] args) { String imageUrl = "http://www.avajava.com/images/avajavalogo.jpg"; String destinationFile = "image.jpg"; try { // Reading a Image file from file system URL url = new URL(imageUrl); InputStream is = url.openStream(); FileInputStream imageInFile = new FileInputStream(is.toString()); byte imageData[] = new byte[2048]; imageInFile.read(imageData); // Converting Image byte array into Base64 String String imageDataString = encodeImage(imageData); System.out.println("imageDataString : " + imageDataString); System.out.println("Image Successfully Manipulated!"); } catch (FileNotFoundException e) { System.out.println("Image not found" + e); } catch (IOException ioe) { System.out.println("Exception while reading the Image " + ioe); } } /** * Encodes the byte array into base64 string * * @param imageByteArray - byte array * @return String a {@link java.lang.String} */ public static String encodeImage(byte[] imageByteArray) { return Base64.encodeBase64URLSafeString(imageByteArray); }