相关文章推荐
淡定的柠檬  ·  向 Power BI ...·  3 月前    · 
稳重的猴子  ·  erlang ...·  2 年前    · 
BitmapFactory.Options options = new BitmapFactory.Options(); options.inJustDecodeBounds = true;//只读取图片,不加载到内存中 BitmapFactory.decodeFile(filePath, options); options.inSampleSize = Math.max(1, (int) Math.ceil(Math.max( (double) options.outWidth / 1024f, (double) options.outHeight / 1024f))); options.inJustDecodeBounds = false;//加载到内存中 bitmap = BitmapFactory.decodeFile(filePath, options); return bitmap; @TargetApi(Build.VERSION_CODES.KITKAT) public static String getPath(final Context context, final Uri uri) { final boolean isKitKat = Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT; // 文件提供 if (isKitKat && DocumentsContract.isDocumentUri(context, uri)) { // 外部存储设备提供 if (isExternalStorageDocument(uri)) { final String docId = DocumentsContract.getDocumentId(uri); final String[] split = docId.split(":"); final String type = split[0]; if ("primary".equalsIgnoreCase(type)) { return Environment.getExternalStorageDirectory() + "/" + split[1]; // TODO handle non-primary volumes // 下载文件提供 else if (isDownloadsDocument(uri)) { final String id = DocumentsContract.getDocumentId(uri); final Uri contentUri = ContentUris.withAppendedId( Uri.parse("content://downloads/public_downloads"), Long.valueOf(id)); return getDataColumn(context, contentUri, null, null); // 媒体提供 else if (isMediaDocument(uri)) { final String docId = DocumentsContract.getDocumentId(uri); final String[] split = docId.split(":"); final String type = split[0]; Uri contentUri = null; if ("image".equals(type)) { contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI; } else if ("video".equals(type)) { contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI; } else if ("audio".equals(type)) { contentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; final String selection = MediaStore.MediaColumns._ID + "=?"; final String[] selectionArgs = new String[]{split[1]}; return getDataColumn(context, contentUri, selection, selectionArgs); // MediaStore (and general) else if ("content".equalsIgnoreCase(uri.getScheme())) { // Return the remote address if (isGooglePhotosUri(uri)) return uri.getLastPathSegment(); return getDataColumn(context, uri, null, null); // File else if ("file".equalsIgnoreCase(uri.getScheme())) { return uri.getPath(); return null; * Get the value of the data column for this Uri . This is useful for * MediaStore Uris , and other file - based ContentProviders. * @param context The context. * @param uri The Uri to query. * @param selection (Optional) Filter used in the query. * @param selectionArgs (Optional) Selection arguments used in the query. * @return The value of the _data column, which is typically a file path. public static String getDataColumn(Context context, Uri uri, String selection, String[] selectionArgs) { Cursor cursor = null; final String column = MediaStore.MediaColumns.DATA; final String[] projection = {column}; try { cursor = context.getContentResolver().query(uri, projection, selection, selectionArgs, null); if (cursor != null && cursor.moveToFirst()) { final int index = cursor.getColumnIndexOrThrow(column); return cursor.getString(index); } finally { if (cursor != null) cursor.close(); return null; * @param uri The Uri to check. * @return Whether the Uri authority is ExternalStorageProvider. public static boolean isExternalStorageDocument(Uri uri) { return "com.android.externalstorage.documents".equals(uri .getAuthority()); * @param uri The Uri to check. * @return Whether the Uri authority is DownloadsProvider. public static boolean isDownloadsDocument(Uri uri) { return "com.android.providers.downloads.documents".equals(uri .getAuthority()); * @param uri The Uri to check. * @return Whether the Uri authority is MediaProvider. public static boolean isMediaDocument(Uri uri) { return "com.android.providers.media.documents".equals(uri .getAuthority()); * @param uri The Uri to check. * @return Whether the Uri authority is Google Photos. public static boolean isGooglePhotosUri(Uri uri) { return "com.google.android.apps.photos.content".equals(uri .getAuthority()); public static byte[] getBitmapByte(Bitmap bitmap) { ByteArrayOutputStream out = new ByteArrayOutputStream(); bitmap.compress(Bitmap.CompressFormat.JPEG, 100, out); try { out.flush(); out.close(); } catch (IOException e) { e.printStackTrace(); return out.toByteArray();

使用方法:

 private void openGallery(int num) {
            RxGalleryFinal.with(ApplicationLike.appContext)
                    .image()
                    .gif(true)
                    .multiple()
                    .maxSize(num)
                    .imageLoader(ImageLoaderType.GLIDE)
                    .subscribe(new RxBusResultDisposable<ImageMultipleResultEvent>() {
                        @RequiresApi(api = Build.VERSION_CODES.O)
                        @Override
                        protected void onEvent(ImageMultipleResultEvent event) throws Exception {
                            if (null != event && null != event.getResult() && event.getResult().size() > 0) {
                                if (cordovaCallbackContext != null) {
                                    ArrayList<MediaBean> result = (ArrayList<MediaBean>) event.getResult();
                                    JSONArray jsonArray = new JSONArray();
                                    for (int i = 0; i < result.size(); i++) {
                                        Uri originalUri = Uri.parse("file://" + result.get(i).getOriginalPath());
                                        Uri thumbnailBigUri = Uri.parse("file://" + result.get(i).getThumbnailSmallPath());
                                        String path = BitmapUtil.getPath(ApplicationLike.appContext, originalUri);
                                        Bitmap bitmap = BitmapUtil.getBitmap(path);
                                        jsonArray.put("data:image/png;base64," + Base64.encodeToString(BitmapUtil.getBitmapByte(bitmap), Base64.URL_SAFE));
                                    cordovaCallbackContext.success(jsonArray);
                        @Override
                        public void onComplete() {
                            super.onComplete();
                    }).openGallery();
            //得到图片多选的事件
            RxGalleryListener.getInstance().setMultiImageCheckedListener(new IMultiImageCheckedListener() {
                @Override
                public void selectedImg(Object t, boolean isChecked) {
                    //这个主要点击或者按到就会触发,所以不建议在这里进行Toast
                @Override
                public void selectedImgMax(Object t, boolean isChecked, int maxSize) {
                    ToastUtil.showToast("您最多只能选择" + maxSize + "张图片");

其中RxGalleryFinal为从相册中获取图片的开源框架,地址为:GitHub - FinalTeam/RxGalleryFinal

重点代码:
"data:image/png;base64," + Base64.encodeToString(BitmapUtil.getBitmapByte(bitmap), Base64.URL_SAFE));

1. Base64.encodeToString(BitmapUtil.getBitmapByte(bitmap), Base64.URL_SAFE)将bitmap转换为Base64处理后的字符串。

2.  "data:image/png;base64," 是网页加载图片需要的 ,必须拼接到前面。想要了解跟多请借鉴:      https://blog.csdn.net/lidongliangzhicai/article/details/95030067

下面是处理图片的工具类:public class BitmapUtil { /** * 获取小尺寸的照片 * * @param filePath 压缩照片的路径 * @return 返回压缩处理后的照片 */ public static Bitmap getBitmap(String filePath) { Bitmap bitmap = null; BitmapFactory.Options op </head> <input accept=image/* name=upimage id=upload_file type=file onchange=gen_base64()> <textarea id=base64_output name=Word style= width:820px></textarea> "action": "action_name", "callback": "function_name", // optional "data": {...} // optional id:这次操作的id,回调时会再传回来。因为交互有可能是异步的,对同一个接口调用多次时,回调时以id来区分是哪一次。id由js自己定义保证唯一即可,简单的做法是使用M
AndroidJSBase64 格式的图片时 报错 Refusing to load URL as it exceeds 2097152 characters 2097152 字节 / 1024 / 1024 = 2 兆,这说明调用 loadUrl,最多只能传 2M 的内容 Base64是将原文按照每 3 个字节一组分开,这个 3 字节组的每一组将被按照位分解成 4 个部分,每个...
package cn.pucheng.parking.activity; import android.Manifest; import android.app.AlertDialog; import android.content.ActivityNotFoundException; import android.content.Context; import android.content.D...
Android加载网页无非就这么几句话 webView1.getSettings().setJavaScriptEnabled(true);//设置JavaScript接口 webView1.loadUrl("你所要加载网页的地址");/*