2012-02-03 3 views
5

Sto provando a creare un'app per creare schede personalizzate. Mi piacerebbe aggiungere del testo su uno sfondo personalizzato (un'immagine jpg).Genera un'immagine con testo personalizzato in Android

Qual è il modo migliore per farlo? Avrei bisogno di mostrare all'utente un'anteprima della carta prima di inviarla al server.

Grazie

+0

significa che si desidera aggiungere testo sopra un file di immagine? –

+0

Ho un'immagine (.jpg) e voglio aggiungere il testo dell'utente in alto al centro e generare un nuovo jpg con il testo incluso – Addev

+0

controllare la mia risposta. –

risposta

24

Usa sotto codice per ottenere il vostro requisito

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

Devi usare sotto l'autorizzazione nel file manifesto.

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

Per il mio dispositivo il percorso è /sdcard accedere alla scheda SD esterna, può variare per altri dispositivi. Alcuni dispositivi potrebbero avere /mnt/sdcard potrebbe essere per schede SD interne. Basta controllare prima di utilizzare questo codice.

In realtà ho scritto il codice sopra riportato per qualche altra domanda, che richiedeva l'indicazione dell'orario sulla foto dopo essere stata catturata dalla fotocamera. Ti ho dato la stessa soluzione con alcune modifiche per il tuo requisito specifico.

Spero che tu possa capire questo. Se hai dei dubbi riguardo al codice, non esitare a chiedere.

+0

davvero buono ... grazie ... – Aravin

+0

Come posso spostare il testo aggiunto sull'immagine usando il drag and drop. – Mayur

+0

Lo stesso si può ottenere senza salvare l'immagine nella memoria esterna, solo per l'invio al server? – user3677331

4

Non sono sicuro che questa sia la soluzione migliore ma può aiutarti.

Passaggio 1: creare un layout relativo (su qualsiasi altro) e impostare l'immagine come sfondo.

Step2: Ora aggiungi una vista testo con larghezza e altezza come fill_parent o match_parent e anche gravità come top | center_horizontal.

Passo 3: Ora aggiungi un altro pulsante o qualsiasi altro controllo di layout che attiverà la conferma dell'utente. (È necessario posizionare questo controllo all'esterno del layout Relativo).

Fase 4: Se l'utente ha confermato l'immagine allora si può prendere screenshot del layout relativo tramite codice seguente:

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