Как добавить эффект водяного знака к изображению в Android?

У меня есть изображение с рамками, и мне нужно добавить эффект водяного знака. Как мне это сделать?

5 ответов


Я нашел отличный учебник по обработке изображений Android здесь.

public static Bitmap mark(Bitmap src, String watermark, Point location, Color color, int alpha, int size, boolean underline) {
int w = src.getWidth();
int h = src.getHeight();
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);
paint.setAlpha(alpha);
paint.setTextSize(size);
paint.setAntiAlias(true);
paint.setUnderlineText(underline);
canvas.drawText(watermark, location.x, location.y, paint);

return result;
}

спасибо Питу Хьюстону, который делится таким полезным учебником по базовой обработке изображений.


для других ссылок, если вы хотите добавить логотип своего приложения(который находится в вашей папке (папках)) поверх изображения, используйте следующий метод:

private Bitmap addWaterMark(Bitmap src) {
        int w = src.getWidth();
        int h = src.getHeight();
        Bitmap result = Bitmap.createBitmap(w, h, src.getConfig());
        Canvas canvas = new Canvas(result);
        canvas.drawBitmap(src, 0, 0, null);

        Bitmap waterMark = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.logo);
        canvas.drawBitmap(waterMark, 0, 0, null);

        return result;
    }

Кажется, вы ищете waterrippleeffect как этот. Проверка полного исходного кода. Также проверьте скриншот, как выглядит эффект.


Если кто-то все еще ищет это, я нашел ответ здесь

Он добавляет водяной знак к внизу справа части и Весы это согласно исходному изображению, которое было именно тем, что я искал.

/**  
    * Embeds an image watermark over a source image to produce  
    * a watermarked one.  
    * @param watermarkImageFile The image file used as the watermark.  
    * @param sourceImageFile The source image file.  
    * @param destImageFile The output image file.  
    */  
   /**  
    * Adds a watermark on the given image.  
    */  
   public static Bitmap addWatermark(Resources res, Bitmap source) {  
     int w, h;  
     Canvas c;  
     Paint paint;  
     Bitmap bmp, watermark;  
     Matrix matrix;  
     float scale;  
     RectF r;  
     w = source.getWidth();  
     h = source.getHeight();  
     // Create the new bitmap  
     bmp = Bitmap.createBitmap(w, h, 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  
     c = new Canvas(bmp);  
     c.drawBitmap(source, 0, 0, paint);  
     // Load the watermark  
     watermark = BitmapFactory.decodeResource(res, R.drawable.dell_logo);  
     // Scale the watermark to be approximately 40% of the source image height  
     scale = (float) (((float) h * 0.40) / (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(w - r.width(), h - r.height());  
     // Draw the watermark  
     c.drawBitmap(watermark, matrix, paint);  
     // Free up the bitmap memory  
     watermark.recycle();  
     return bmp;  
   } 

и это хорошо прокомментировано, что является огромным плюсом!


используйте framelayout. поместите два imageviews внутри framelayout и укажите положение водяного знака imageview.