Android | HEIF图片格式显示问题

问题描述

用户反馈IOS手机在动态社区列表中有的图片显示不出来
在这里插入图片描述

问题排查

简单了解了下,之前项目商定的图片格式,对于HEIF的图片统一处理成jpeg的格式上传,ios端已经处理,Android端对于heif的图片还是直接上传的,所以对未适配heif格式的手机会显示不出来的情况。

关于HEIF:
没有了解过,自己的小米10s测试机在拍照是可以设置打开HEIF格式的开关
在这里插入图片描述
打开开关后拍出的照片就是heic格式的了。
小米还提供了一个设置是发送第三方自动转发jpeg格式,比较人性化。

但对于这种格式的图片直接上传到图床,对于部分手机就会有不显示的情况了。

解决

问题的场景是Android端的用户上传了本地heif格式的图片到图床,其他用户会有显示问题,稳妥的做法是对于heif的格式要先本地转换成jpeg的图片再做上传操作。

阿里云上传图片的代码如下:

Single.defer {
           ///.......
            val request = PutObjectRequest(bucket, remotePath, tempLocalPath)
            val metadata = ObjectMetadata()
            if (!TextUtils.isEmpty(mimeType)) {
                metadata.contentType = mimeType
            }
            request.metadata = metadata
            getAliClient(endPoint).putObject(request)
            //......
            

将图片转换的工作放到这一步做,判断是否是heif的格式图片,如果是就转化图片为Jpeg到新的缓存路径下,将原来的上传地址替换为转换后的地址即可:

 var tempLocalPath = localPath
            if (FileUtils.isHeifImage(localPath)) {
                tempLocalPath = FileUtils.convertHeif2Jpgeg(localPath)
 }

//.......

转换的代码:

 public static String  convertHeif2Jpgeg(String heifPath) {
        String savePath = Utils.getApp().getApplicationContext().getExternalCacheDir().getAbsolutePath() + File.separator + "convertImage";
        Bitmap bitmap = BitmapFactory.decodeFile(heifPath);
        File file = null;
        if (bitmap != null) {
            file = new File(savePath,Md5Utils.md5(heifPath) + TEMP_HEIC_CONVERT_IMG_NAME);
            if (!file.exists()) {
                file.mkdirs();
                ImageUtils.save(bitmap, file, Bitmap.CompressFormat.JPEG, true);
            }
            }
        return  file !=null ? file.getAbsolutePath() : "";
    }

这里选择将图片缓存到应用的外部私有缓存目录下,这里选择对path路径hash一下,为了避免重复的转换工作,转换之后将保存的图片路径返回上传的图床即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值