Android中使用图片水印,并且能够在线下载字体并应用于水印
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() {@Overridepublic 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和文件名。