In Gambas3 write text inside a Image JPG o BMP

240 Views Asked by At

I use Gambas3 in Ubuntu 20.04. I need write some text in a image and create a new image. JPG o BMP

2

There are 2 best solutions below

0
Alejandro Bergesio On

I resolve my problem with this code; load a image into drawing area, then draw a text with shadow for best visibility, then save in format JPG, and then load the new image into other drawing area. Not sure if this is the best option, but it works.

  • Gambas 3.17.3
  • Ubuntu 20.04
  • libs gb.gtk and gb.image
  • Image size 800x533 pixels

My code:

' Gambas class file
 
 Public Sub Form_Open()
  DrawingArea1.Background = Color.white
 End
 
Public Sub DrawingArea1_Draw()
  dibu()
 
End
 
Private Sub dibu()
 
  Dim X, Y, W, H As Float
  Dim hBrush As PaintBrush
  Dim hImage As Image
 
  hImage = Image.Load("bird212.jpg")
 
  X = 0
  Y = 0
  W = 800
  H = 533
 
  hBrush = Paint.Image(hImage)
  hBrush.Translate(X, Y)
  Paint.Brush = hBrush
  Paint.Rectangle(X, Y, W, H)
  Paint.Fill
  Paint.Stroke
 
 
  Paint.Font.Name = "Mono"
  Paint.Font.Size = 12
  Paint.Font.Bold = True
  Paint.Brush = Paint.Color(Color.White)      
  Paint.DrawRichTextShadow("Hello WORLD 12.345", 10, 500, 300, 50,,, 1)
  Paint.Fill
  Paint.Stroke

  Paint.Brush = Paint.Color(Color.Black) 
  Paint.DrawRichText("Hello WORLD 12.345", 10, 500, 300, 50)
  Paint.Fill
  Paint.Stroke
   
End
 
Public Sub ButtonSaveImage_Click()
 
  Dim filex As Picture
  
  filex = New Picture(drawingArea1.w, drawingArea1.h, Color.Transparent) 'probar...
  Paint.begin(filex)
  dibu()
  paint.end
 
  filex.save(user.home & "/" & "prub.jpg")
  Label1.text = "Image saved in: " & user.home & "/" & "prub.jpg"
  PictureBox2.Picture = Picture.Load(user.home & "/" & "prub.jpg")
 
End
0
Bruce Steers On

You have over-complicated it I think.

As you can use the Paint.class on Images and pictures directly and as you can load an Image directly into a PictureBox you could simply do the following to load an image into a picturebox with custom text...

  Public Sub btnSetImage_Click()
  
    Dim hImage As Image
    Dim sText As String = "Hello World 12.345"
  
    hImage = Image.Load("bird212.jpg")
    Paint.Begin(hImage)
    Paint.Font = Font["Mono, 12, bold"]
    Paint.Background = Color.White
    Paint.DrawRichTextShadow(sText, 0, hImage.Height - Paint.Font.Height * 2, Me.Width, Paint.Font.Height, Align.Center,, 1)
    Paint.Stroke
    Paint.Background = Color.black
    Paint.DrawRichText(sText, 0, hImage.Height - Paint.Font.Height * 2, Me.Width, Paint.Font.Height, Align.Center)
    Paint.End
  
    Try PictureBox2.Image.Clear
    PictureBox2.Image = hImage
  
  End

Public Sub btnSaveImage_Click()

  PictureBox2.Picture.Save(user.home &/  "prub.jpg")
  Label1.text = "Image saved in: " & user.home &/ "prub.jpg"

End