package jp.co.cyberagent.stf.util; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.util.Base64; import com.google.protobuf.ByteString; import java.io.ByteArrayOutputStream; public class GraphicUtil { public static String bitmapToDataUri(Bitmap bitmap) { ByteArrayOutputStream out = new ByteArrayOutputStream(); bitmap.compress(Bitmap.CompressFormat.PNG, 100, out); String base64 = Base64.encodeToString(out.toByteArray(), Base64.DEFAULT); return "data:image/png;base64," + base64; } public static ByteString bitmapToPNGByteString(Bitmap bitmap) { ByteArrayOutputStream out = new ByteArrayOutputStream(); bitmap.compress(Bitmap.CompressFormat.PNG, 100, out); return ByteString.copyFrom(out.toByteArray()); } /** * From http://stackoverflow.com/a/10600736/1540573 */ public static Bitmap drawableToBitmap(Drawable drawable) { if (drawable instanceof BitmapDrawable) { return ((BitmapDrawable) drawable).getBitmap(); } Bitmap bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(bitmap); drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight()); drawable.draw(canvas); return bitmap; } public static String drawableToDataUri(Drawable drawable) { return bitmapToDataUri(drawableToBitmap(drawable)); } public static ByteString drawableToPNGByteString(Drawable drawable) { return bitmapToPNGByteString(drawableToBitmap(drawable)); } }