代码之家  ›  专栏  ›  技术社区  ›  Mouaad Abdelghafour AITALI

使用Glide库保存后图像质量较差

  •  0
  • Mouaad Abdelghafour AITALI  · 技术社区  · 7 年前

    您好,我正在尝试将下载的图片保存在设备存储器中我有此方法将图片保存在存储器中,但保存后我发现图片质量不好,请帮助我,我想以相同的原始质量保存图片

    Glide.with(mContext)
         .load("YOUR_URL")
         .asBitmap()
         .into(new SimpleTarget<Bitmap>(100,100) {
         @Override
         public void onResourceReady(Bitmap resource, GlideAnimation glideAnimation) {
                   saveImage(resource);
              }});
    
    
     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);
    }
    
    2 回复  |  直到 7 年前
        1
  •  0
  •   Moonbloom    7 年前

    该行:

    .into(new SimpleTarget<Bitmap>(100,100)
    

    字面上的意思是你想要一个宽100px,高100px的图像,这真的很小,我99.99%肯定这就是你所说的“质量差”。

    如果你想要100%的原始图像,你应该使用:

    .into(new SimpleTarget<Bitmap>(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL)
    

        2
  •  0
  •   Rodrigo Gontijo    7 年前

    您的位图。压缩已达到最高质量,您可以将格式更改为PNG,但您将无法对图像进行压缩,因为PNG是一种无损格式。

    SimpleTarget<Bitmap>(100,100) 到原始版本。