I am trying to dynamically change images by using callbacks. Below are the snippets of my code;
Function to get the Image:
def get_and_display_player_image(df, player_name):
df['player_face_url']= df['player_face_url'].str.strip('')
df['player_face_url']= df['player_face_url'].map(lambda x: x.rstrip('\nName'))
image_url = df.query('long_name == @player_name')['player_face_url'].values[0]
print(image_url)
image = ImageOps.expand(Image.open(requests.get(image_url, stream=True).raw),border=5,fill='black')
display(image)
**Html.IMG component:**
html.Img(id="player_image1", style={'display': 'block', 'height': 300, 'width': 300,
'border': '0.5rem solid black',
'position': 'relative',
'margin': 'auto'})
**the callback :**
@app.callback(
[Output('player_image1', component_property='src')],
[Input('player1','value')]
)
def update_player_image(player_choice):
image_src = get_and_display_player_image(df1, player_choice)
if image_src is None:
raise PreventUpdate
else:
return image_src
my terminal is showing that the image has been generated successfully:

But it is not rendering in my Dashboard
Help will be very appreciated.
Thank you in advance
hi @Arsalan107
Welcome to the community.
We recommend you put your code in pre-formatted text. The image below shows how to do it.
There is a good post on incorporating images into an app, written by a long-time community member. Hopefully, this helps.
You are really close! You don’t need to do anything other than pass the url to the image source.
Should be something like this
html.Img(src = 'https://cdn.sofifa.net/players/158/023/22_120.png')
Hi, I have been trying the url logic for a while(Sample code attached)
html.Img(id="player_image1", src = 'https://cdn.sofifa.net/players/158/023/22_120.png',
style={'display': 'block', 'height': 300, 'width': 300,
'border': '0.5rem solid black', 'position': 'relative',
'margin': 'auto'}),
@app.callback(
[Output('player_image1', 'src')],
[Input('player1','value')]
)
def update_player_image(player_choice):
image_src1 = get_url(df, player_choice)
if image_src1 is None:
raise PreventUpdate
else:
return image_src1
but I keep getting this error :
Expected type: (<class ‘tuple’>, <class ‘list’>)
Received value of type <class ‘str’>:
‘https://cdn.sofifa.net/players/158/023/22_120.png’
I am very new to this so trying to get a hang of it all
What is the function get_url? Is it the same as get_and_display_player_image? If so, I don’t see a return.
This is the get_url function
def get_url(df, player_name):
df['player_face_url']= df['player_face_url'].str.strip('')
df['player_face_url']= df['player_face_url'].map(lambda x: x.rstrip('\nName'))
image_url = df.query('long_name == @player_name')['player_face_url'].values[0]
return image_url
I have managed to make it work, hopefully others like me might benefit from this:
Earlier my callback looked like this
@app.callback(
[Output('player_image1', 'src')],
[Input('player1','value')]
)
What I did was to remove the square brackets around my Output and Input in the Callback and now my callback looks like:
@app.callback(
Output('player_image1', 'src'),
Input('player1','value')
)
and now the app works fine
That was going to be my next suggestion. Gald you worked it out!