Android中使用图片水印,并且能够在线下载字体并应用于水印
要在Android中使用图片水印,并且能够在线下载字体并应用于水印,可以按照以下步骤进行:
1.使用Picasso
、Glide
或其他图片加载库加载图片:
ImageView imageView = findViewById(R.id.image_view);
String imageUrl = "https://example.com/image.jpg";
Picasso.get().load(imageUrl).into(imageView);
2.创建一个带有水印的Drawable
:
BitmapDrawable watermarkDrawable = createWatermarkDrawable("Watermark Text", "font.ttf", 16);
3.创建水印的方法:
private BitmapDrawable createWatermarkDrawable(String text, String fontPath, int textSize) {
Typeface typeface = Typeface.createFromFile(fontPath);
// 创建一个空白的Bitmap作为画布
Bitmap bitmap = Bitmap.createBitmap(1, 1, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
// 设置画布属性
Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
paint.setColor(Color.WHITE);
paint.setTextSize(textSize);
paint.setTypeface(typeface);
paint.setTextAlign(Paint.Align.LEFT);
// 测量文本的宽度和高度
Rect textBounds = new Rect();
paint.getTextBounds(text, 0, text.length(), textBounds);
// 计算水印的位置
int x = (bitmap.getWidth() - textBounds.width()) / 2;
int y = (bitmap.getHeight() + textBounds.height()) / 2;
// 在画布上绘制文本
canvas.drawText(text, x, y, paint);
return new BitmapDrawable(getResources(), bitmap);
}
4.将水印应用到图片上:
Drawable imageDrawable = imageView.getDrawable();
Drawable[] layers = new Drawable[2];
layers[0] = imageDrawable;
layers[1] = watermarkDrawable;
LayerDrawable layerDrawable = new LayerDrawable(layers);
imageView.setImageDrawable(layerDrawable);
5.在线下载字体文件: 你可以使用DownloadManager
来下载字体文件,并在下载完成后将其应用于水印:
private void downloadFont(String fontUrl, String fontName) {
DownloadManager downloadManager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE);
DownloadManager.Request request = new DownloadManager.Request(Uri.parse(fontUrl));
request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, fontName);
long downloadId = downloadManager.enqueue(request);
// 注册一个广播接收器监听下载完成事件
BroadcastReceiver onCompleteReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
long receivedDownloadId = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, -1);
if (receivedDownloadId == downloadId) {
// 下载完成,应用字体
String fontPath = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).getPath() + "/" + fontName;
BitmapDrawable updatedWatermarkDrawable = createWatermarkDrawable("Watermark Text", fontPath, 16);
Drawable[] updatedLayers = new Drawable[2];
updatedLayers[0] = imageDrawable;
updatedLayers[1] = updatedWatermarkDrawable;
LayerDrawable updatedLayerDrawable = new LayerDrawable(updatedLayers);
imageView.setImageDrawable(updatedLayerDrawable);
// 注销广播接收器
unregisterReceiver(this);
}
}
};
registerReceiver(onCompleteReceiver, new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE));
}
例子中使用了DownloadManager
来下载字体文件,并在下载完成后应用于水印。请注意,在AndroidManifest.xml
中,你需要添加相关权限声明:
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
另外,记得在合适的时机调用
downloadFont
方法,并提供正确的字体文件URL和文件名。