添加水印到图像就像Android中的flipboard一样

时间:2013-07-04 17:56:27

标签: android image canvas watermark

我想像flipboard一样为图像添加水印。

如您所见,文本添加在图像底部,带有黑色透明背景。我想做同样的事情。直到现在我已经设法在图像上写文字,但我无法使它的背景黑色透明,就像上面的图片一样。

到目前为止,这是我在here找到的代码。

public Bitmap mark(Bitmap src, String watermark) {
    int w = src.getWidth();
    int h = src.getHeight();

    Shader shader = new LinearGradient(0, 0, 100, 0, Color.TRANSPARENT, Color.BLACK, TileMode.CLAMP);

    Bitmap result = Bitmap.createBitmap(w, h, src.getConfig());
    Canvas canvas = new Canvas(result);
    canvas.drawBitmap(src, 0, 0, null);
    Paint paint = new Paint();
    paint.setColor(Color.WHITE);
    paint.setTextSize(50);
    paint.setAntiAlias(true);
    paint.setShader(shader);
    paint.setUnderlineText(false);
    canvas.drawText(watermark, 10 , h-15, paint);

    return result;
}

1 个答案:

答案 0 :(得分:1)

我认为它不需要渐变,你可以使用简单的颜色和使用drawRect()方法绘制它。

示例代码如下,我将黑色背景尺寸视为整个图像的25%。

public Bitmap mark(Bitmap src, String watermark) {
    int w = src.getWidth();
    int h = src.getHeight();

    Paint bgPaint=new Paint();
    bgPaint.setColor(Color.parse("AA000000"));  //transparent black,change opacity by changing hex value "AA" between "00" and "FF"

    Bitmap result = Bitmap.createBitmap(w, h, src.getConfig());
    Canvas canvas = new Canvas(result);
    canvas.drawBitmap(src, 0, 0, null);
    Paint paint = new Paint();
    paint.setColor(Color.WHITE);
    paint.setTextSize(50);
    paint.setAntiAlias(true);
    paint.setUnderlineText(false);

    //should draw background first,order is important
    int left=0;
    int right=w;
    int bottom=h;
    int top=bottom-(h*.25);
    canvas.drawRect(left,top,right,bottom,bgPaint);

    canvas.drawText(watermark, 10 , h-15, paint);

return result;
}