How not to overwrite current "Render Result" but generate a new image with different name (bpy)?
Though I am still serch and apreciate better answer, but temporally
I made new render-slot for &quot;Render Result&quot; image as &quot;icon-img&quot;,
then when save json, if there is no slot name (icon-img) for &quot;Render Result&quot;
make new one, or if there is already &quot;icon-img&quot; slot, set to it as active one.
Then generate json, save render.opengl() image to the user defined path,
and return all setting as same as before.
rr = bpy.data.images[&quot;Render Result&quot;]
rs = rr.render_slots
cslot = rs.active
fl = False
for slot in rs:
    if slot.name == &quot;icon-slot&quot;:
        fl = True
        rs.active = slot
        break
        
if not fl:
    aslot = rs.new(name = &quot;icon-slot&quot;)
    rs.active = aslot

(functions to generate json with render.opengl image from blender file exploler)
rs.active = cslot
it seems worked for me.. (but I do not know way to remove icon-slot, without use UI)