如何在图片上添加文字并保存为新图片

3
我正在尝试创建一个Android应用程序,可以在图片上添加随机引语。大致流程如下:
1. 从自定义的给定图像开始启动应用程序。 2. 用户只能在此图像上轻触并生成新的随机“引语”,该引语将重叠在图像上。 3. 用户可以保存所选引语的新创建图像,并将其设置为壁纸。
我已经成功将图片显示在ImageView中。我的引语列表存储在strings.xml文件中。

抱歉内容有点冗长并且不是很清晰,谢谢Thomas。 - Francesco
这是一个单独的图像还是多个图像?我理解了字符串/引号部分。只是想弄清楚图像部分。 - Ghost
谢谢回复。图片始终保持不变,可以更改的是打印在其上的引用,当用户点击图片时应该发生这种情况。 - Francesco
3个回答

6

我在一个应用程序中做了这样的事情。使用画布(Canvas)。

我编辑了我的一段代码,实际上在背景上还添加了几个其他图像等内容。

代码核心:

private static Bitmap getPoster(...) {
    Bitmap background = BitmapFactory.decodeResource(res, background_id)
        .copy(Bitmap.Config.ARGB_8888, true);
    Canvas canvas = new Canvas(background);
    Typeface font = Typeface.createFromAsset(res.getAssets(), FONT_PATH);
    font = Typeface.create(font, Typeface.BOLD);
    Paint paint = new Paint();
    paint.setTypeface(font);
    paint.setAntiAlias(true);
    paint.setColor(Color.WHITE);
    paint.setStyle(Style.FILL);
    paint.setShadowLayer(2.0f, 1.0f, 1.0f, Color.BLACK);
    float fontSize = getFontSize(background.getWidth(), THE_QUOTE, paint); //You'll have to define a way to find a size that fits, or just use a constant size.

    paint.setTextSize(fontSize);
    canvas.drawText(THE_QUOTE, (background.getWidth() - paint.measureText(THE_QUOTE)) / 2,
        background.getHeight() - FILLER_HEIGHT, paint); //You might want to do something different. In my case every image has a filler in the bottom which is 50px. 
    return background;
}

将您自己的版本放入类中,并将其提供给图像 ID 和其他任何内容。它会返回位图,以便您可以对其进行任何操作(在 ImageView 中显示它,让用户保存并设置为壁纸)。


1

我知道几年前我用ImageMagick在PC上做过这件事(保存带有文本的图像)。

看起来ImageMagick已经移植到了Android,所以我会开始深入研究他们的文档。

https://github.com/lilac/Android-ImageMagick


0

好的!我的朋友弗朗切斯科,我有一个想法,虽然没有可用的代码(因为我不是很擅长它)。所以,这是我的想法:

在你的ImageView上实现一个onClickListener(),像下面这样:

ImageView iv = (ImageView)findViewById(R.id.imageview1);
iv.setOnClickListener(new View.OnClickListener() 
    {
        public void onClick(View v) 
        {
            /** When I say do your stuff here, I mean read the user input and set your wallpaper here. I'm sorry that I don't really know how to save/set the wallpaper */
        }
    });

关于读取用户输入/生成随机引语,你可以这样做:

你说你已经将引语保存在strings.xml文件中。使用这些字符串的ID,我认为你可以实现一个switch情景,在其中使用java imports - java.util.Scannerjava.util.Random。最终,在您的ImageViewonClickListener中使用它们可能/应该会产生期望的结果。

我知道我的答案太模糊了,但我有一个微弱的希望,它已经给了你一分钟的领先时间,让你知道你可以实现什么。我真心希望有比这更好的答案。如果没有,那么我希望这对你有所帮助,同时也希望我没有引导你走错方向,因为这只是一种猜测。抱歉,但这是我所有的东西。


你的答案非常好,因为我也考虑了同样的事情。使用生成1到N之间数字的随机变量,并将文本打印与OnClick事件关联 :) - Francesco
但我也将我的项目逻辑移动到了只需安装一个新的活动壁纸,它将代替使用应用程序->生成新报价->保存图像的所有工作...有一个时间只有1个报价的意义在哪里呢 :) - Francesco

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接