在设备中保存图片[Glide Library]

时间:2017-06-26 14:11:41

标签: android save android-glide

我尝试将下载功能添加到我的应用程序中,使用 Glide Library url <下载图片/ strong>这是我在设备存储中保存图片但效果不佳的代码 适用于 android 5.0.1 6.0.1 ,但在另一个Android版本中效果不佳

Toast.makeText(Pop.this, "Please wait ...", Toast.LENGTH_LONG).show();
                    new AsyncTask<FutureTarget<Bitmap>, Void, Bitmap>() {
                        @Override protected Bitmap doInBackground(FutureTarget<Bitmap>... params) {
                            try {
                                return params[0].get();
                                // get needs to be called on background thread
                            } catch (Exception ex) {
                                return null;
                            }
                        }
                        @Override protected void onPostExecute(Bitmap bitmap) {
                            if(bitmap == null) return;
                            MediaStore.Images.Media.insertImage(getContentResolver(), bitmap, "Art_"+System.currentTimeMillis(), "Beschrijving");
                        }
                    }.execute(Glide.with(getApplicationContext()).load(url).asBitmap().diskCacheStrategy(DiskCacheStrategy.SOURCE).into(width, height));

请帮帮我

4 个答案:

答案 0 :(得分:29)

1.清单文件中的权限

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

2.Glide将图像下载为位图

Glide.with(mContext)
         .load("YOUR_URL")
         .asBitmap()
         .into(new SimpleTarget<Bitmap>(100,100) {
             @Override
             public void onResourceReady(Bitmap resource, GlideAnimation glideAnimation)  {
                   saveImage(resource);
             }
         });

3。将位图保存到内存中

private String saveImage(Bitmap image) {
    String savedImagePath = null;

    String imageFileName = "JPEG_" + "FILE_NAME" + ".jpg";
    File storageDir = new File(            Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES)
                       + "/YOUR_FOLDER_NAME");
    boolean success = true;
    if (!storageDir.exists()) {
    success = storageDir.mkdirs();
    }
    if (success) {
        File imageFile = new File(storageDir, imageFileName);
        savedImagePath = imageFile.getAbsolutePath();
        try {
            OutputStream fOut = new FileOutputStream(imageFile);
            image.compress(Bitmap.CompressFormat.JPEG, 100, fOut);
            fOut.close();
        } catch (Exception e) {
            e.printStackTrace();
        }

        // Add the image to the system gallery
        galleryAddPic(savedImagePath);
        Toast.makeText(mContext, "IMAGE SAVED", Toast.LENGTH_LONG).show();
    }
    return savedImagePath;
}

private void galleryAddPic(String imagePath) {
    Intent mediaScanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
    File f = new File(imagePath);
    Uri contentUri = Uri.fromFile(f);
    mediaScanIntent.setData(contentUri);
    sendBroadcast(mediaScanIntent);
}

答案 1 :(得分:2)

SimpleTarget<Bitmap>现在已被弃用,使用CustomTarget<Bitmap>,您的Glide请求现在变为

kotlin

Glide.with(context)
    .asBitmap()
    .load(url)
    .into(object: CustomTarget<Bitmap>() {
        override fun onLoadCleared(placeholder: Drawable?) {
            
        }

        override fun onResourceReady(resource: Bitmap, transition: Transition<in Bitmap>?) {

        }
    })

Java

    Glide.with(context)
            .asBitmap()
            .load(url)
            .into(new CustomTarget<Bitmap>() {

                @Override
                public void onResourceReady(@NonNull Bitmap resource, @Nullable Transition<? super Bitmap> transition) {
                    
                }

                @Override
                public void onLoadCleared(@Nullable Drawable placeholder) {

                }
            });

答案 2 :(得分:0)

基于Akshay Nandwana的答案,我使用该代码写入内部存储器:

Glide.with(context)
     .asBitmap()
     .load(url)
     .into(new SimpleTarget<Bitmap>() {
         @Override
         public void onResourceReady(Bitmap resource,Transition<? super Bitmap> transition) {
            write(fileName, resource);
         }
     });

这是write方法:

public void write(String fileName, Bitmap bitmap) {
    FileOutputStream outputStream;
    try {
        outputStream = context.openFileOutput(fileName, Context.MODE_PRIVATE);
        bitmap.compress(Bitmap.CompressFormat.JPEG, 100, outputStream);
        outputStream.close();
    } catch (Exception error) {
        error.printStackTrace();
    }
}

答案 3 :(得分:0)

我使用了以下代码,它对您有所帮助,希望对其他人也有帮助

{{1}}