This is an extended comment on @VitalyKaurov's answer. That edit interface is actually loaded from here:
FrontEnd`FindFileOnPath["AttachedImage2D.nb",
"PrivatePathsSystemResources"] // FrontEndExecute
So you can look at the source for that to see how it's implemented in the front end (the code is actually pretty cool). You can also get the thing to wrap on a selected image box like so:
FEPrivate`WrapImageWithEditCell[InputNotebook[]] // FE`Evaluate;
Here's an example of that:
SelectionMove[EvaluationCell[], Before, Cell];
NotebookWrite[
InputNotebook[],
Cell[
BoxData@ToBoxes@Import["https://i.sstatic.net/36JuK.png"],
"Output"
]
];
box =
Nest[
First@*FrontEndExecute@*FrontEnd`ObjectChildren,
PreviousCell[],
1
];
SelectionMove[box, All, Box];
FEPrivate`WrapImageWithEditCell[InputNotebook[]] // FE`Evaluate;
Theoretically, then we could find a way to reuse what the FE uses to get a (mostly) pure front-end approach to this. Whether this is better than a Manipulate
is up to preference.