Skip to content

Instantly share code, notes, and snippets.

@wayanjimmy
Created November 13, 2016 14:58
Show Gist options
  • Save wayanjimmy/7b6a25d032a5f07c6752cbce2df2bde1 to your computer and use it in GitHub Desktop.
Save wayanjimmy/7b6a25d032a5f07c6752cbce2df2bde1 to your computer and use it in GitHub Desktop.
Base 64 Encoder
public class Base64Encoder {
/**
* Encode some data and return a String.
*/
public final static String encode(byte[] d) {
if (d == null) return null;
byte data[] = new byte[d.length + 2];
System.arraycopy(d, 0, data, 0, d.length);
byte dest[] = new byte[(data.length / 3) * 4];
// 3-byte to 4-byte conversion
for (int sidx = 0, didx = 0; sidx < d.length; sidx += 3, didx += 4) {
dest[didx] = (byte) ((data[sidx] >>> 2) & 077);
dest[didx + 1] = (byte) ((data[sidx + 1] >>> 4) & 017 |
(data[sidx] << 4) & 077);
dest[didx + 2] = (byte) ((data[sidx + 2] >>> 6) & 003 |
(data[sidx + 1] << 2) & 077);
dest[didx + 3] = (byte) (data[sidx + 2] & 077);
}
// 0-63 to ascii printable conversion
for (int idx = 0; idx < dest.length; idx++) {
if (dest[idx] < 26) dest[idx] = (byte) (dest[idx] + 'A');
else if (dest[idx] < 52) dest[idx] = (byte) (dest[idx] + 'a' - 26);
else if (dest[idx] < 62) dest[idx] = (byte) (dest[idx] + '0' - 52);
else if (dest[idx] < 63) dest[idx] = (byte) '+';
else dest[idx] = (byte) '/';
}
// add padding
for (int idx = dest.length - 1; idx > (d.length * 4) / 3; idx--) {
dest[idx] = (byte) '=';
}
return new String(dest);
}
/**
* Encode a String using Base64 using the default platform encoding
**/
public final static String encode(String s) {
return encode(s.getBytes());
}
/**
* Decode data and return bytes.
*/
public final static byte[] decode(String str) {
if (str == null) return null;
byte data[] = str.getBytes();
return decode(data);
}
/**
* Decode data and return bytes. Assumes that the data passed
* in is ASCII text.
*/
public final static byte[] decode(byte[] data) {
int tail = data.length;
while (data[tail - 1] == '=') tail--;
byte dest[] = new byte[tail - data.length / 4];
// ascii printable to 0-63 conversion
for (int idx = 0; idx < data.length; idx++) {
if (data[idx] == '=') data[idx] = 0;
else if (data[idx] == '/') data[idx] = 63;
else if (data[idx] == '+') data[idx] = 62;
else if (data[idx] >= '0' && data[idx] <= '9')
data[idx] = (byte) (data[idx] - ('0' - 52));
else if (data[idx] >= 'a' && data[idx] <= 'z')
data[idx] = (byte) (data[idx] - ('a' - 26));
else if (data[idx] >= 'A' && data[idx] <= 'Z')
data[idx] = (byte) (data[idx] - 'A');
}
// 4-byte to 3-byte conversion
int sidx, didx;
for (sidx = 0, didx = 0; didx < dest.length - 2; sidx += 4, didx += 3) {
dest[didx] = (byte) (((data[sidx] << 2) & 255) |
((data[sidx + 1] >>> 4) & 3));
dest[didx + 1] = (byte) (((data[sidx + 1] << 4) & 255) |
((data[sidx + 2] >>> 2) & 017));
dest[didx + 2] = (byte) (((data[sidx + 2] << 6) & 255) |
(data[sidx + 3] & 077));
}
if (didx < dest.length) {
dest[didx] = (byte) (((data[sidx] << 2) & 255) |
((data[sidx + 1] >>> 4) & 3));
}
if (++didx < dest.length) {
dest[didx] = (byte) (((data[sidx + 1] << 4) & 255) |
((data[sidx + 2] >>> 2) & 017));
}
return dest;
}
}
@wayanjimmy
Copy link
Author

contoh pemakaian

Uri imageUri = getIntent().getData();
try {
Bitmap bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(imageUri));
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
                bitmap.compress(Bitmap.CompressFormat.JPEG, 50, byteArrayOutputStream);
                byte[] byteArray = byteArrayOutputStream.toByteArray();
                EventBus.getDefault().post(new ProfilePictureSavedEvent(imageUri.toString(), Base64Encoder.encode(byteArray), mCaller));
                finish();
            }catch (FileNotFoundException e) {
                e.printStackTrace();
            }

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment