aboutsummaryrefslogtreecommitdiffstats
path: root/main/src/cgeo/geocaching/utils
diff options
context:
space:
mode:
authorSamuel Tardieu <sam@rfc1149.net>2014-04-10 07:58:32 +0200
committerSamuel Tardieu <sam@rfc1149.net>2014-04-10 09:00:35 +0200
commit2a97bbd1ea9db1975364b6ee96e527b2c9c8bae7 (patch)
tree1fd6ca8799721c220c1efa7aa2ce00aaefd2b3c5 /main/src/cgeo/geocaching/utils
parent95a5e7e4884b93703ddd42cd02a23a626b482449 (diff)
downloadcgeo-2a97bbd1ea9db1975364b6ee96e527b2c9c8bae7.zip
cgeo-2a97bbd1ea9db1975364b6ee96e527b2c9c8bae7.tar.gz
cgeo-2a97bbd1ea9db1975364b6ee96e527b2c9c8bae7.tar.bz2
Use the Android-provided API to stream-decode base64-encoded data
Diffstat (limited to 'main/src/cgeo/geocaching/utils')
-rw-r--r--main/src/cgeo/geocaching/utils/ImageUtils.java39
1 files changed, 39 insertions, 0 deletions
diff --git a/main/src/cgeo/geocaching/utils/ImageUtils.java b/main/src/cgeo/geocaching/utils/ImageUtils.java
index aae0f14..6d7a437 100644
--- a/main/src/cgeo/geocaching/utils/ImageUtils.java
+++ b/main/src/cgeo/geocaching/utils/ImageUtils.java
@@ -3,6 +3,7 @@ package cgeo.geocaching.utils;
import cgeo.geocaching.CgeoApplication;
import cgeo.geocaching.compatibility.Compatibility;
+import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.jdt.annotation.Nullable;
@@ -16,11 +17,15 @@ import android.graphics.drawable.BitmapDrawable;
import android.media.ExifInterface;
import android.net.Uri;
import android.os.Environment;
+import android.util.Base64;
+import android.util.Base64InputStream;
import java.io.BufferedOutputStream;
+import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
+import java.io.OutputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
@@ -245,4 +250,38 @@ public final class ImageUtils {
}
return false;
}
+
+ /**
+ * Decode a base64-encoded string and save the result into a file.
+ *
+ * @param inString the encoded string
+ * @param outFile the file to save the decoded result into
+ */
+ public static void decodeBase64ToFile(final String inString, final File outFile) {
+ FileOutputStream out = null;
+ try {
+ out = new FileOutputStream(outFile);
+ decodeBase64ToStream(inString, out);
+ } catch (final IOException e) {
+ Log.e("HtmlImage.decodeBase64ToFile: cannot write file for decoded inline image", e);
+ } finally {
+ IOUtils.closeQuietly(out);
+ }
+ }
+
+ /**
+ * Decode a base64-encoded string and save the result into a stream.
+ *
+ * @param inString the encoded string
+ * @param outFile the file to save the decoded result into
+ */
+ public static void decodeBase64ToStream(final String inString, final OutputStream out) throws IOException {
+ Base64InputStream in = null;
+ try {
+ in = new Base64InputStream(new ByteArrayInputStream(inString.getBytes()), Base64.DEFAULT);
+ IOUtils.copy(in, out);
+ } finally {
+ IOUtils.closeQuietly(in);
+ }
+ }
}