如何用Java(Android)在图像上写文本

时间:2012-07-03 19:54:48

标签: java android image text png

我可以在iPhone上的Objective-C中执行此操作,但现在我正在寻找等效的Android Java代码。我也可以用普通的Java来做,但我不知道Android特定的类是什么。我想在运行中生成一个PNG图像,该图像在图像中居中。

public void createImage(String word,String outputFilePath){/ *我该怎么办? * /}

相关主题:

How to write text on image in Objective-C (iOS)?

How can I load an image and write text to it using Java?

4 个答案:

答案 0 :(得分:18)

如下:

Bitmap bitmap = ... // Load your bitmap here
Canvas canvas = new Canvas(bitmap);
Paint paint = new Paint(); 
paint.setColor(Color.BLACK); 
paint.setTextSize(10); 
canvas.drawText("Some Text here", x, y, paint);

答案 1 :(得分:7)

您不需要使用图形。

更简单的方法是创建一个FrameLayout,其中包含两个元素 - 图像的ImageView,以及另一个视图,用于绘制顶部的任何内容。

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/ic_launcher" />

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Large Text"
        android:textAppearance="?android:attr/textAppearanceLarge" />

</FrameLayout>

当然,图像顶部的东西不需要是简单的TextView,它可以是另一个图像,或者包含您喜欢的任意元素的其他布局。

答案 2 :(得分:0)

我认为这也是一个很好的解决方案,可以解决您的问题。或者下载source code demo

public Bitmap drawText(String text, int textWidth, int color) {

        // Get text dimensions
        TextPaint textPaint = new TextPaint(Paint.ANTI_ALIAS_FLAG | Paint.LINEAR_TEXT_FLAG);
        textPaint.setStyle(Paint.Style.FILL);
        textPaint.setColor(Color.parseColor("#ff00ff"));
        textPaint.setTextSize(30);

        StaticLayout mTextLayout = new StaticLayout(text, textPaint, textWidth, Layout.Alignment.ALIGN_CENTER, 1.0f, 0.0f, false);

        // Create bitmap and canvas to draw to
        Bitmap b = Bitmap.createBitmap(textWidth, mTextLayout.getHeight(), Bitmap.Config.ARGB_4444);
        Canvas c = new Canvas(b);

        // Draw background
        Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.LINEAR_TEXT_FLAG);
        paint.setStyle(Paint.Style.FILL);
        paint.setColor(color);
        c.drawPaint(paint);

        // Draw text
        c.save();
        c.translate(0, 0);
        mTextLayout.draw(c);
        c.restore();

        return b;
    }

上述函数从文本中绘制位图图像或下载source code demo并查看其工作原理

答案 3 :(得分:0)

GETah的答案对我不起作用,所以我花了一点时间,这是一个Kotlin版本,可以使用TextPaint使用:

val canvas = Canvas(bm)
val textPaint = TextPaint(Paint.ANTI_ALIAS_FLAG or Paint.LINEAR_TEXT_FLAG)
textPaint.style = Paint.Style.FILL
textPaint.color = Color.BLACK
textPaint.textSize = 30f
canvas.drawText("Hello", 50f, 50f, textPaint)