Android 解决小米手机添加图片水印后显示黑边的问题

背景

  • 由于选择图片后需要需要在图片上添加logo,经纬度坐标,天气、时间等内容(图片水印)

  • 测试反馈在小米手机上选择图片上传后有图片在右边和下边有一条黑边
    具体查看下图

    小米黑边图
  • 调用代码如下使用O、V、H、及荣耀手机验证,并没有这个现象,应该是小米魔改系统锅了

/**
 * 绘制水印图片
 *
 * @param src         原图
 * @param watermark   水印图片
 * @param paddingLeft 水印图片 向左距离
 * @param paddingTop  水印图片 向上距离
 * @return 添加水印后的图片
 */
private static Bitmap createWaterMaskBitmap(Bitmap src,
                                            Bitmap watermark,
                                            int paddingLeft,
                                            int paddingTop) {
    if (src == null) {
        return null;
    }
  	//位图的宽度
    int width = src.getWidth();
  	//位图的高度
    int height = src.getHeight();
    //创建一个新的和SRC长度宽度一样的位图
    Bitmap newBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
    //将该图片作为画布
    Canvas canvas = new Canvas(newBitmap);
    //在画布 0,0坐标上开始绘制原始图片
    canvas.drawBitmap(src, 0, 0, null);
    //在画布上绘制水印图片
    canvas.drawBitmap(watermark, paddingLeft, paddingTop, null);
    // 保存
    canvas.save();
    // 存储
    canvas.restore();
    return newBitmap;
}
  • 虽然是小米的锅,但是问题还是要解决的,不然就是多个少块钱了😭,这个黑边的宽度看着有点像StatusBarHeight,

  • 那就把图片中的黑边给减掉,然后用Bitmap的宽度减去statusBar高度,上传保存之后和原图做比较,发现宽高都被多裁切了尺寸

    LogUtils.iTag("状态栏和,导航栏高度->",BarUtils.getStatusBarHeight(),","+BarUtils.getNavBarHeight());
    if (RomUtils.isXiaomi()) {
        //LogUtils.iTag("状态栏和,导航栏高度->",BarUtils.getStatusBarHeight(),","+BarUtils.getNavBarHeight());
        width = width - BarUtils.getStatusBarHeight();
        height = height - BarUtils.getStatusBarHeight();
    }
    

不尽如意解决方案 ,总归是解决了,不是遗留bug😁

遗憾的是没有找到获取这个黑边宽度和高度的方法

    /**
     * 绘制水印图片
     *
     * @param src         原图
     * @param watermark   水印图片
     * @param paddingLeft 水印图片 向左距离
     * @param paddingTop  水印图片 向上距离
     * @return 添加水印后的图片
     */
    private static Bitmap createWaterMaskBitmap(Bitmap src,
                                                Bitmap watermark,
                                                int paddingLeft,
                                                int paddingTop) {
        if (src == null) {
            return null;
        }
        int width = src.getWidth();
        int height = src.getHeight();

        //解决小米手机绘制有黑边的问题
        if (RomUtils.isXiaomi()) {
            //LogUtils.iTag("状态栏和,导航栏高度->",BarUtils.getStatusBarHeight(),","+BarUtils.getNavBarHeight());
            width = width - 25;
            height = height - 30;
        }

        //创建一个新的和SRC长度宽度一样的位图
        Bitmap newBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
        //将该图片作为画布
        Canvas canvas = new Canvas(newBitmap);
        //在画布 0,0坐标上开始绘制原始图片
        canvas.drawBitmap(src, 0, 0, null);
        //在画布上绘制水印图片
        canvas.drawBitmap(watermark, paddingLeft, paddingTop, null);
        // 保存
        canvas.save();
        // 存储
        canvas.restore();
        return newBitmap;
    }

修复后的图片

已修复图片
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值