With the current structure (which you indicate is required) a pseudo-element positioned over the main div would do the trick.
Note: I am only solving the overlay issue. You would still need to position the text elements. Ideally restructuring the HTML would be the best course.
CSS
* {
margin: 0;
padding: 0;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
.content {
position: relative;
margin:10px;
border:1px solid grey;
display: inline-block;
}
.content img {
display: block;
}
.content:after {
position: absolute;
content:"";
height:100%;
width:100%;
top:0;
left:0;
background: linear-gradient(to bottom, rgba(255,0,0,0) 0%,rgba(255,0,0,0.65) 100%);
}
Prefixing would be required and browser support would probably be IE9+ (non-filter gradients)