View Full Version : How to add image text automatically to images?
evildrome
05-27-2024, 01:59 AM
Hi All,
I'm making an A1 poster with 346 images of people and I want to make a grid of images with the name of the person plus location (like "Robert James - London") in a text box under the image.
I got as far as creating the image grid with blank text boxes.
I have all the images in a folder (like 1.jpg, 2.jpg) and I have all the associated text in another folder (like 1.txt, 2.txt).
I could add this manually but... phew... and it may change so being able to just re-run a program would be super helpful.
If there was a way do this programmatically I would be grateful to know how :)
I'm a bit of an old fart. I don't know VBA but can program in Python, Cobol and err.. 6502 assembler.
I did say I was old!
Cheers,
Wilson Logan.
jdelano
05-27-2024, 02:57 AM
I don't have your exact use case; I helped a person before to add images to a table. I switched it around to also add the file name, which it seems you're doing? (or is the name contained inside the text file?)
This code loops a folder for all the jpg files, put the image in a table and writes the name of the image file in the associated row
Private Sub btnAddPictures_Click()
Dim tbl As Table
Set tbl = FindTable("imagesTable", Slide2)
Dim currentTableRow As Integer
currentTableRow = 1
Dim shp As Shape
Dim imageFileName As String ' add Microsoft Scripting Runtime (in tools > references)
imageFileName = Dir("F:\PPT_SlideImages\*.jpg")
Do While Len(imageFileName) > 0
tbl.Cell(currentTableRow, 1).Shape.Fill.UserPicture "F:\PPT_SlideImages\" & imageFileName
tbl.Cell(currentTableRow, 2).Shape.TextFrame.TextRange.Text = imageFileName
imageFileName = Dir
currentTableRow = currentTableRow + 1
Loop
End Sub
Private Function FindTable(tblName As String, whichSlide As Slide) As Table
Dim shp As Shape
For Each shp In whichSlide.Shapes
If shp.HasTable And shp.Name = tblName Then
' this is an image and it has logo in the name
Set FindTable = shp.Table
Exit Function
End If
Next
End Function
evildrome
05-27-2024, 03:26 AM
Thanks!
My images aren't in a table but I guess I could do that and the description is in the filename but I can probably make the description the filename so.. yeah... I think this could work.
Thanks again!
Wilson.
jdelano
05-27-2024, 03:43 AM
You're welcome, happy to help a fellow grey beard COBOLian (also RPG II here)
You definitely add code to open the associated text file to grab the name contained therein, if you need that.
EDIT: create a function like this
Add Microsoft Scripting Runtime is Tools > References, add code to read the text file.
Private Function ReadNameFromFile(imageFileName as String) as String
' open the text file that shares the name of the image file passed
' read the name in it and pass it back.
Dim textFileName as String
Dim txtFile as TextStream
Dim txtName as String
' remove the image extension add the txt
textFileName = Left(imageFileName, Len(imageFileName - 4)) & ".txt"
Set txtFile = fso.OpenTextFile(textFileName, ForReading)
txtName = txtFile.ReadLine ' there is just one line containing the name?
txtFile.Close
Set txtFile = Nothing
ReadNameFromFile = txtName
End Function
You'll want to add some error trapping for no file and empty file.
edit2: fix typo and added removed blank lines when I edited it just before now
evildrome
05-27-2024, 06:22 AM
Yes, the text file is '<name> "Location -" <location>'
e.g. "Robert Shaw Location - London"
so swapping the line of txt for the filename should work.
Powered by vBulletin® Version 4.2.5 Copyright © 2025 vBulletin Solutions Inc. All rights reserved.