Как использовать растровые изображения и холст? создавать свои собственные водяные знаки - PullRequest
0 голосов
/ 14 января 2020

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

Я хочу показать 3 текста по вертикали в центре, 3 текста по вертикали слева и 1 lo go справа. Я хочу водяные знаки таким образом, что. если пользователь захватывает изображение с камеры или просматривает галерею. Тексты и lo go (водяные знаки) должны быть одинакового размера и четко видны, независимо от размера изображения или плотности пикселей.

Может кто-нибудь показать мне, как этого добиться. Я пробовал Bitmap и Canvas, но получаю разные размеры текста и размытый текст, и все по-разному на разных изображениях.

На следующих изображениях моя проблема.

1.Изображение, по которому щелкнули с камеры, но я использовал его из изображений просмотра

Image which was clicked from camera but I used it from browse images

2. Изображение, которое было выбрано из кнопки Capture Image

Image which was selected form Capture Image button

3. случайное изображение низкого качества из галереи

enter image description here

Вот код

 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);
                        }
                    });
...