В моем приложении я пытаюсь создать водяные знаки на изображении, когда пользователь снимает его с камеры или загружает из галереи. но проблема в том, что когда я рисую текст на холсте (это само мое изображение). Каждый раз я получаю разные результаты.
Я хочу показать 3 текста по вертикали в центре, 3 текста по вертикали слева и 1 lo go справа. Я хочу водяные знаки таким образом, что. если пользователь захватывает изображение с камеры или просматривает галерею. Тексты и lo go (водяные знаки) должны быть одинакового размера и четко видны, независимо от размера изображения или плотности пикселей.
Может кто-нибудь показать мне, как этого добиться. Я пробовал Bitmap и Canvas, но получаю разные размеры текста и размытый текст, и все по-разному на разных изображениях.
На следующих изображениях моя проблема.
1.Изображение, по которому щелкнули с камеры, но я использовал его из изображений просмотра
2. Изображение, которое было выбрано из кнопки Capture Image
3. случайное изображение низкого качества из галереи
Вот код
Glide.with(getApplicationContext())
.load(uri)
.asBitmap()
.into(new SimpleTarget<Bitmap>(200, 100) {
@Override
public void onResourceReady(Bitmap resource, GlideAnimation glideAnimation) {
//this is the required bitmap
pikedPhoto = resource.copy(Bitmap.Config.ARGB_8888, true);
Canvas canvas = new Canvas(pikedPhoto);
Paint paintCenter = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.DITHER_FLAG | Paint.FILTER_BITMAP_FLAG);
paintCenter.setStyle(Paint.Style.FILL);
paintCenter.setColor(getResources().getColor(android.R.color.black)); // Text Color
paintCenter.setColor(Color.RED);
//float size = convertDpToPx(context, 25);
//paintCenter.setTextSize(size); //Text Size
paintCenter.setTextAlign(Paint.Align.CENTER);
float textY= pikedPhoto.getHeight();
float textX= pikedPhoto.getWidth()/2;
String text1 = "Centre Text";
canvas.drawText(text1,textX,textY,paintCenter);
canvas.drawText(text1,textX,textY-10,paintCenter);
canvas.drawText(text1,textX,textY-20,paintCenter);
String text2 = "Left Text";
Paint paintLeft = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.DITHER_FLAG | Paint.FILTER_BITMAP_FLAG);
paintLeft.setStyle(Paint.Style.FILL);
paintLeft.setColor(getResources().getColor(android.R.color.black)); // Text Color
paintLeft.setColor(Color.RED);
//float sizeLeft = convertDpToPx(context, 25);
//paintLeft.setTextSize(sizeLeft); //Text Size
paintLeft.setTextAlign(Paint.Align.LEFT);
float textYL= pikedPhoto.getHeight();
canvas.drawText(text2,0,textYL,paintLeft);
canvas.drawText(text2,0,textYL-10,paintLeft);
canvas.drawText(text2,0,textYL-20,paintLeft);
// in this case, center.x and center.y represent the coordinates of the center of the rectangle in which the text is being placed
//canvas.drawBitmap(logo, (pikedPhoto.getWidth()) / 4, 250, new Paint());
img.setImageBitmap(pikedPhoto);
}
});