У меня есть изображение с кадрами, и мне нужно добавить эффект водяного знака. Как я могу это сделать?
Как добавить эффект водяного знака к изображению в Android?
Ответ 1
Я нашел отличный учебник по обработке изображений 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;
}
Спасибо Питу Хьюстону, который делится таким полезным уроком по базовой обработке изображений.
Ответ 2
Для других ссылок, если вы хотите добавить логотип своего приложения (которое находится в вашей папке (-ах), то поверх изображения используйте следующий метод:
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;
}
Ответ 3
Если кто-то все еще ищет это, я нашел хорошее решение здесь
Он добавляет водяной знак в нижнюю правую часть и масштабирует его в соответствии с исходным изображением, которое было именно тем, что я искал.
/**
* 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 height to image 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;
}
И это хорошо прокомментировано, что является огромным плюсом!
Ответ 4
Кажется, вы ищете waterrippleeffect
как этот. Оформить полный исходный код. Также проверьте скриншот, как выглядит эффект.
Ответ 5
Вы можете использовать AndroidWM, чтобы добавить водяной знак в ваше изображение, даже с невидимыми водяными знаками:
добавить зависимость:
dependencies {
...
implementation 'com.huangyz0918:androidwm:0.2.3'
...
}
и код Java:
WatermarkText watermarkText = new WatermarkText("Hello World")
.setPositionX(0.5)
.setPositionY(0.5)
.setTextAlpha(100)
.setTextColor(Color.WHITE)
.setTextFont(R.font.champagne)
.setTextShadow(0.1f, 5, 5, Color.BLUE);
WatermarkBuilder.create(this, backgroundBitmap)
.loadWatermarkText(watermarkText)
.getWatermark()
.setToImageView(backgroundView);
Вы можете легко добавить водяной знак типа изображения или текстовый водяной знак, как этот, и размер библиотеки будет меньше 30 КБ.
Ответ 6
используйте framelayout. поместите два изображения в рамку и укажите положение изображения водяного знака.