在安卓系统中生成包含自定义文本的图片
我正在尝试制作一个用于创建自定义卡片的应用程序。我想在自定义背景(jpg图像)上添加一些文本。
最好的方法是什么?在将卡发送到服务器之前,我需要向用户显示卡的预览。
谢谢
我正在尝试制作一个用于创建自定义卡片的应用程序。我想在自定义背景(jpg图像)上添加一些文本。
最好的方法是什么?在将卡发送到服务器之前,我需要向用户显示卡的预览。
谢谢
使用以下代码满足您的要求
Bitmap src = BitmapFactory.decodeResource(getResources(), R.drawable.yourimage); // the original file yourimage.jpg i added in resources
Bitmap dest = Bitmap.createBitmap(src.getWidth(), src.getHeight(), Bitmap.Config.ARGB_8888);
String yourText = "My custom Text adding to Image";
Canvas cs = new Canvas(dest);
Paint tPaint = new Paint();
tPaint.setTextSize(35);
tPaint.setColor(Color.BLUE);
tPaint.setStyle(Style.FILL);
cs.drawBitmap(src, 0f, 0f, null);
float height = tPaint.measureText("yY");
float width = tPaint.measureText(yourText);
float x_coord = (src.getWidth() - width)/2;
cs.drawText(yourText, x_coord, height+15f, tPaint); // 15f is to put space between top edge and the text, if you want to change it, you can
try {
dest.compress(Bitmap.CompressFormat.JPEG, 100, new FileOutputStream(new File("/sdcard/ImageAfterAddingText.jpg")));
// dest is Bitmap, if you want to preview the final image, you can display it on screen also before saving
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
您必须在清单文件中使用以下权限。
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
对于我的设备,路径是访问外部SD卡,对于其他设备可能会有所不同。有些设备可能有可能是用于内部SD卡。只需在使用此代码之前检查一下即可。/sdcard
/mnt/sdcard
实际上,我为其他一些问题编写了上述代码,这些问题要求从相机捕获后在照片上添加时间戳。我为您提供了相同的解决方案,并根据您的特定要求进行了一些修改。
我希望你能理解这一点。如果您对代码有任何疑问,请随时询问。
我不确定这是最好的解决方案,但它可能会帮助你。
Step1:创建相对布局(或任何其他布局)并将图像设置为其背景。
Step2:现在添加一个文本视图,宽度和高度设置为,重力设置为.match_parent
top|center_horizontal
Step3:现在添加另一个按钮或任何其他布局控件,这将触发用户确认。(应将此控件放在“相对”布局之外)。
Step4:如果用户已确认图像,则可以通过以下代码截取相对布局的屏幕截图:
v1.setDrawingCacheEnabled(true); //v1 is the object of your Relative layout
Bitmap bm = v1.getDrawingCache();
if (bm != null) {
//TODO: write the code for saving the image.
Toast toast = Toast.makeText(YourActivity.this, "image saved",
Toast.LENGTH_LONG);
toast.show();
} else {
Toast toast = Toast.makeText(YourActivity.this,
"No image saved.", Toast.LENGTH_LONG);
toast.show();
}