2014-12-25 1 views
3

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

public static void mark(String watermark,String filePath) { 
     try{ 
       Bitmap bmp = BitmapFactory.decodeFile(filePath); 
       int w = bmp.getWidth(); 
       int h = bmp.getHeight(); 
       Bitmap result = Bitmap.createBitmap(100, 100, bmp.getConfig()); 
       Canvas canvas = new Canvas(result); 
       canvas.drawBitmap(bmp, 0, 0, null); 
       Paint paint = new Paint(); 
       paint.setColor(Color.WHITE); 
       paint.setAlpha(40); 
       paint.setTextSize(20); 
       paint.setAntiAlias(true); 
       canvas.drawText(watermark,w/2, h/2+20, paint); 
       File nFile = new File(getDevicePath(mContext)+"output1.jpg"); 
       nFile.createNewFile(); 
       FileOutputStream fOut = new FileOutputStream(nFile); 
       bmp.compress(Bitmap.CompressFormat.JPEG, 100, fOut); 
       fOut.flush(); 
       fOut.close(); 
      } 
      catch(Exception e){ 
       e.printStackTrace(); 
      } 
     } 

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

Заранее спасибо.

+0

Есть вопросы? –

+0

Каким образом это «не работает»? –

+0

http://shaikhhamadali.blogspot.in/2013/08/water-mark-image-in-imageview-android.html Я думаю, что у него есть какое-то решение – ckpatel

ответ

0

это мой fault.i нашел решение своих собственных problem.thanks для вашего answers.i я использую неправильный растровое.
в строке -

bmp.compress(Bitmap.CompressFormat.JPEG, 100, fOut); 

я использовал неправильные растровый, поэтому он не был working.instead из я должен использовать

result.compress(Bitmap.CompressFormat.JPEG, 100, fOut); 

и после изменения выше линий это работа в качестве амулета.

Надеюсь, это поможет другим.

1

Вопрос 1: Вы не хотите, чтобы изображение с водяными знаками было того же размера, что и исходное изображение? Таким образом, вместо того, чтобы жестко запрограммированные значения:

  Bitmap result = Bitmap.createBitmap(w, h, bmp.getConfig()); 

Выпуск 2: Является ли это не result растровыми вы хотите записать? Таким образом, вместо того, чтобы:

  result.compress(Bitmap.CompressFormat.JPEG, 100, fOut); 

Выпуск 3: Является ли файл, даже если изображение не так как вы хотели бы, даже получать написано, где вы хотите? Вам может понадобиться добавить «/» разделитель с помощью:

  File nFile = new File(getDevicePath(mContext)+ File.separator + "output1.jpg"); 
+0

Спасибо за ваш ответ. + 1 за ваш ответ. – Ravi

1

Уточнитните этот код в ваш метод и создать динамический TextView для реализации этого. Это отлично работает для меня, и imgPreviewRotate - мое изображение, поэтому, пожалуйста, измените изображение и проверьте его.

TextView txtWatermark = new TextView(MainActivity.this); 
txtWatermark.setGravity(Gravity.RIGHT | Gravity.BOTTOM); 
txtWatermark.setText(getResources().getString("Dummy text")); 
txtWatermark.setTextSize(5.0f); 
txtWatermark.setPadding(10, 0, 30, 0); 
txtWatermark.setTypeface(FontStyle.OswaldRegular(PreviewActivity.this)); 
txtWatermark.setTextColor(Color.parseColor("#FF0000")); 
rlPreview.addView(imgPreviewRotate); 
rlPreview.addView(txtWatermark); 
txtWatermark.setVisibility(View.INVISIBLE); 

 Смежные вопросы

  • Нет связанных вопросов^_^