美文网首页
Glide获取图片缓存文件名Key

Glide获取图片缓存文件名Key

作者: 磐龍 | 来源:发表于2020-03-16 14:28 被阅读0次

    最近项目由于需要支持gif动图,所以把图片加载框架由ImageLoader切换到glide,因为需要支持长按保存图片,所以就需要找到glide加载后缓存的图片路径。
    根据网上资料,最终找到Glide最终生成path的路径为:/data/data/your_packagexxxxxxx/cache/image_manager_disk_cache
    对应的生成规则:com.bumptech.glide.load.engine.EngineKey#updateDiskCacheKey
    问题转换为:获取url到缓存文件path的生成规则算法上
    直接把获取函数贴出来:

    Glide 3.+版本

        /**
         * Glide缓存存储路径:/data/data/your_packagexxxxxxx/cache/image_manager_disk_cache
         * Glide文件名生成规则函数 : 3.0+ 版本
         *
         * @param url    传入您的图片地址url
         * @param width  设备屏幕分辨率的宽度 eg : 1080
         * @param height 设备屏幕分辨率的高度 eg : 1920
         * @return
         * @autor 胖虎 https://blog.csdn.net/ljphhj
         */
        private String getGlide3_SafeKey(String url, int width, int height) {
            byte[] dimensions = ByteBuffer.allocate(8)
                    .putInt(width)
                    .putInt(height)
                    .array();
            try {
                MessageDigest messageDigest = MessageDigest.getInstance("SHA-256");
                EmptySignature signature = EmptySignature.obtain();
                signature.updateDiskCacheKey(messageDigest);
                messageDigest.update(url.getBytes(STRING_CHARSET_NAME));
                messageDigest.update(dimensions);
                messageDigest.update("".getBytes(STRING_CHARSET_NAME));
                messageDigest.update("ImageVideoBitmapDecoder.com.bumptech.glide.load.resource.bitmap".getBytes(STRING_CHARSET_NAME));
                messageDigest.update("FitCenter.com.bumptech.glide.load.resource.bitmap".getBytes(STRING_CHARSET_NAME));
                messageDigest.update("BitmapEncoder.com.bumptech.glide.load.resource.bitmap".getBytes(STRING_CHARSET_NAME));
                messageDigest.update("".getBytes(STRING_CHARSET_NAME));
                String safeKey = Util.sha256BytesToHex(messageDigest.digest());
                return safeKey + ".0";
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            } catch (NoSuchAlgorithmException e) {
                e.printStackTrace();
            }
            return null;
        }
    

    Glide 4.+版本

       /**
         * Glide缓存存储路径:/data/data/your_packagexxxxxxx/cache/image_manager_disk_cache
         * Glide文件名生成规则函数 : 4.0+ 版本
         *
         * @param url 图片地址url
         * @return 返回图片在磁盘缓存的key值
         */
        private static String getGlide4_SafeKey(String url) {
            try {
                MessageDigest messageDigest = MessageDigest.getInstance("SHA-256");
                EmptySignature signature = EmptySignature.obtain();
                signature.updateDiskCacheKey(messageDigest);
                new GlideUrl(url).updateDiskCacheKey(messageDigest);
                String safeKey = Util.sha256BytesToHex(messageDigest.digest());
                return safeKey + ".0";
            } catch (Exception e) {
            }
            return null;
        }
    

    相关文章

      网友评论

          本文标题:Glide获取图片缓存文件名Key

          本文链接:https://www.haomeiwen.com/subject/ftugehtx.html