The REST solution is probably the most elegant. But an alternative is to write a script and use a content editor webpart to attach a script to solve the issue by client side rendering. An example is shown below (I modified some things from an older script I had and have not tested it, so I am pretty sure you will need to do some testing and tweaking to make it work):
_spBodyOnLoadFunctionNames.push("imgshow");
// Function Name: getElementsByContains
// Function Purpose: Returns array of all DOM elements with any value in the array passed into within the elements of a certain tag
function getElementsByContains(val, tag) {
var i;
const getElementsByContains = [];
const allElements = document.getElementsByTagName(tag);
for (let key in allElements) {
if (isNumeric(key)) {
if(allElements.hasOwnProperty(key)) {
const element = allElements[key];
if(element.innerHTML != undefined) {
if(Array.isArray(val)) {
for(i = 0; i < val.length; i++) {
if(element.innerHTML.search(val[i]) != -1) {
getElementsByContains.push(element);
break;
}
}
} else {
if(element.innerHTML.search(val) != -1) {
getElementsByContains.push(element);
}
}
}
}
}
}
return getElementsByContains;
}
// Function Name: imgshow
// Function Purpose: Show imgs displayed as text
function imgshow() {
var planLink;
var arrCalCol = getElementsByContains(["<img", "<img"], "td"); //Can be td or anything, look in your DOM
debugger;
for (i=0; i < arrCalCol.length; i++) {
if (arrCalCol[i].innerHTML.search("<img") != -1 || arrCalCol[i].innerHTML.search("<img") != -1) {
var planLink = arrCalCol[i];
var pic = document.createElement("img");
pic.src = "____________" //Add what you need to extract the attributes from the img string including the src field, then dump your tag attributes here other than src and etc. before the element gets amended/appended.
pic.style = "height:35px; width:35px";
planLink.innerHTML = "";
if (planLink) {
planLink.appendChild(pic);
}
}
}
}