我想在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 :(得分: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");
答案 1 :(得分:1)
请将此代码定义到您的方法中,并创建动态文本视图以实现此目的。这对我来说很好,imgPreviewRotate是我的imageview所以请更改imageview并查看它。
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);
答案 2 :(得分:0)
这是我的错。我找到了解决我自己问题的方法。谢谢你的回答。我使用了错误的位图。
在线 -
bmp.compress(Bitmap.CompressFormat.JPEG, 100, fOut);
我使用了错误的位图,这就是为什么它不起作用。而不是我必须使用
result.compress(Bitmap.CompressFormat.JPEG, 100, fOut);
并且在更改上面的线后,它可以作为魅力。
希望它会帮助其他人。