How might I add a watermark effect to an image in Android?

后端 未结 6 948
深忆病人
深忆病人 2020-11-30 23:09

I have an image with frames and I need to add a watermark effect. How might I do this?

6条回答
  •  余生分开走
    2020-12-01 00:03

    If someone is still searching for this, I found a good solution here

    It adds a watermark to the bottom right portion and scales it according to the source image which was exactly what I was looking for.

    /**
     * Embeds an image watermark over a source image to produce
     * a watermarked one.
     * @param source The source image where watermark should be placed
     * @param watermark Watermark image to place
     * @param ratio A float value < 1 to give the ratio of watermark's height to image's height,
     *             try changing this from 0.20 to 0.60 to obtain right results
     */
    public static Bitmap addWatermark(Bitmap source, Bitmap watermark, float ratio) {
        Canvas canvas;
        Paint paint;
        Bitmap bmp;
        Matrix matrix;
        RectF r;
    
        int width, height;
        float scale;
    
        width = source.getWidth();
        height = source.getHeight();
    
        // Create the new bitmap
        bmp = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
        paint = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.DITHER_FLAG | Paint.FILTER_BITMAP_FLAG);
    
        // Copy the original bitmap into the new one
        canvas = new Canvas(bmp);
        canvas.drawBitmap(source, 0, 0, paint);
    
        // Scale the watermark to be approximately to the ratio given of the source image height
        scale = (float) (((float) height * ratio) / (float) watermark.getHeight());
    
        // Create the matrix
        matrix = new Matrix();
        matrix.postScale(scale, scale);
    
        // Determine the post-scaled size of the watermark
        r = new RectF(0, 0, watermark.getWidth(), watermark.getHeight());
        matrix.mapRect(r);
    
        // Move the watermark to the bottom right corner
        matrix.postTranslate(width - r.width(), height - r.height());
    
        // Draw the watermark
        canvas.drawBitmap(watermark, matrix, paint);
    
        return bmp;
    }
    

    And it is well commented which is what is a huge plus!

提交回复
热议问题