在Android上向JPG图像绘制文本

3

我有一张作为字节数组的jpg图片。如何将这个字节数组转换成jpg格式,然后在它的画布上绘制并将其保存到SD卡中?

任何想法都受欢迎。谢谢。


请检查我的答案,链接在这里:https://dev59.com/1G025IYBdhLWcg3wNC11 - MKJParekh
2个回答

4
使用 BitmapFactory.decodeByteArray() 方法获取一个 Bitmap,然后使用该位图创建一个 Canvas 并在那里绘制文本。最后使用 Bitmap.compress() 方法保存它:
Bitmap bmp = BitmapFactory.decodeByteArray(myArray, 0, myArray.length).copy(Bitmap.Config.RGBA_8888, true); //myArray is the byteArray containing the image. Use copy() to create a mutable bitmap. Feel free to change the config-type. Consider doing this in two steps so you can recycle() the immutable bitmap.
Canvas canvas = new Canvas(bmp);
canvas.drawText("Hello Image", xposition, yposition, textpaint); //x/yposition is where the text will be drawn. textpaint is the Paint object to draw with.

OutputStream os = new FileOutputStream(dstfile); //dstfile is a File-object that you want to save to. You probably need to add some exception-handling here.
bmp.compress(CompressFormat.JPG, 100, os); //Output as JPG with maximum quality.
os.flush();
os.close();//Don't forget to close the stream.

将不可变位图传递给Canvas构造函数,我得到了这个异常。有什么想法我做错了吗? - opc0de
@opc0de 啊,忘记了,decodeByteArray() 返回的是一个不可变(不可修改)的位图,所以你不能直接在上面绘制。 我在示例中添加了 .copy() 命令。这将创建一个相同的位图,但它是可变的。 - Jave

2

2
我喜欢看人们如何对这个答案进行-1。我猜这是同一类型的...嗯...开发者...更喜欢Ctrl-C Ctrl-V的答案 :) - EvilDuck

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