2012-02-03 32 views
5

Tôi đang cố tạo ứng dụng để tạo thẻ tùy chỉnh. Tôi muốn thêm một số văn bản trên một nền tùy chỉnh (một hình ảnh jpg).Tạo hình ảnh có văn bản tùy chỉnh trong Android

Cách tốt nhất để làm điều đó là gì? Tôi cần hiển thị cho người dùng bản xem trước của thẻ trước khi gửi cho máy chủ.

Cảm ơn

+0

có nghĩa là bạn muốn thêm văn bản trên một file ảnh? –

+0

Tôi có một hình ảnh (.jpg) và muốn thêm văn bản của người dùng ở trung tâm trên cùng và tạo một jpg mới với văn bản bao gồm – Addev

+0

kiểm tra câu trả lời của tôi. –

Trả lời

24

Sử dụng mã dưới đây để đạt được yêu cầu của bạn

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

Bạn phải sử dụng dưới sự cho phép trong file manifest.

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

Đối với thiết bị của tôi, đường dẫn là /sdcard để truy cập thẻ SD bên ngoài, nó có thể khác nhau cho các thiết bị khác. Một số thiết bị có thể có /mnt/sdcard có thể là dành cho thẻ sd nội bộ. Chỉ cần kiểm tra nó trong khi trước khi sử dụng mã này.

Thực ra tôi đã viết mã trên cho một số câu hỏi khác, yêu cầu đóng dấu thời gian trên ảnh sau khi chụp từ máy ảnh. Tôi đã cung cấp cho bạn giải pháp tương tự với một chút sửa đổi cho yêu cầu cụ thể của bạn.

Tôi hy vọng bạn có thể hiểu điều này. Nếu bạn có bất kỳ nghi ngờ về mã cảm thấy tự do để yêu cầu.

+0

thực sự tốt ... cảm ơn ... – Aravin

+0

Làm cách nào để di chuyển văn bản đã thêm vào hình ảnh bằng cách kéo và thả. – Mayur

+0

Có thể đạt được điều tương tự mà không lưu hình ảnh vào bộ nhớ ngoài, chỉ để gửi đến máy chủ? – user3677331

4

Tôi không chắc rằng đây là giải pháp tốt nhất nhưng nó có thể giúp bạn.

Bước 1: Tạo bố cục tương đối (trên bất kỳ hình thức nào khác) và đặt hình ảnh làm hình nền của nó.

Bước 2: Bây giờ, hãy thêm chế độ xem văn bản có chiều rộng và chiều cao làm fill_parent hoặc match_parent và cũng có trọng lực như trên cùng | center_horizontal.

Bước 3: Bây giờ, thêm nút khác hoặc bất kỳ điều khiển bố cục nào khác sẽ kích hoạt xác nhận người dùng. (Bạn nên đặt điều khiển này bên ngoài bố cục Tương đối).

Step4: Nếu người dùng đã xác nhận hình ảnh thì bạn có thể chụp ảnh màn hình của bố trí tương đối của bạn thông qua mã sau:

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(); 
      } 
Các vấn đề liên quan