2012-02-03 17 views
5

Estoy tratando de crear una aplicación para crear tarjetas personalizadas. Me gustaría agregar algo de texto sobre un fondo personalizado (una imagen jpg).Generar una imagen con texto personalizado en Android

¿Cuál es la mejor manera de hacerlo? Tendría que mostrarle al usuario una vista previa de la tarjeta antes de enviarla al servidor.

Gracias

+0

significa que desea añadir texto en un archivo de imagen? –

+0

Tengo una imagen (.jpg) y quiero agregar el texto del usuario en la parte superior central y generar un nuevo jpg con el texto incluido – Addev

+0

verifique mi respuesta. –

Respuesta

24

uso por debajo de código para lograr su requerimiento

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(); 
    } 

Tienes que utilizar a continuación el permiso en el archivo de manifiesto.

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

para mi dispositivo es el camino /sdcard acceder a la tarjeta SD externa, puede variar para otros dispositivos. Algunos dispositivos pueden tener /mnt/sdcard, ya sea para tarjetas sd internas. Simplemente verifíquelo antes de usar este código.

Realmente escribí el código anterior para alguna otra pregunta, que requería marca de tiempo en la foto después de capturado desde la cámara. Te di la misma solución con algunas modificaciones para tus requisitos específicos.

Espero que puedan entender esto. Si tiene alguna duda sobre el código, no dude en preguntar.

+0

realmente bueno ... gracias ... – Aravin

+0

¿Cómo puedo mover el texto agregado en la imagen usando la función de arrastrar y soltar? – Mayur

+0

¿Se puede lograr lo mismo sin guardar la imagen en el almacenamiento externo, solo para enviarla al servidor? – user3677331

4

No estoy seguro de que esta sea la mejor solución, pero puede ayudarte.

Paso 1: Cree un diseño relativo (en cualquier otro) y configure su imagen como fondo.

Paso 2: Ahora agregue una vista de texto con ancho y alto como fill_parent o match_parent y también la gravedad como top | center_horizontal.

Paso 3: Ahora agregue otro botón o cualquier otro control de diseño que activará la confirmación del usuario. (Debe colocar este control fuera del diseño relativo).

Paso 4: Si el usuario ha confirmado la imagen, entonces puede tomar captura de pantalla de su disposición relativa a través de código siguiente:

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(); 
      } 
Cuestiones relacionadas