You're right, background-blend-mode may be your simplest option! For more information about background-blend-mode, click here, but it more or less combines all of an element's background images by using a set of blend modes. For a description of the different blend modes, click here.
In the example below, the important lines are:
background-image: url("https://i.stack.imgur.com/tMO8g.png"), url("https://i.stack.imgur.com/tMO8g.png"), linear-gradient(hsl(0 0% 50%) 0 100%);
background-blend-mode: color, darken, normal;
These lines do the following:
• It gives the div three images: two that are your image, and one that is a solid color with a lightness of 50%.
• It applies the 'color' blend mode to the first image, the 'darken' blend mode to the second image, and the 'normal' blend mode to the solid color.
This means that the second image's lightest color will match that 50% lightness solid color, and the first image will restore the color that was lost when doing so.
Unfortunately, this does not work with transparent images, as the transparency will most likely be replaced with the solid gray color created by the linear-gradient().
div {
display: flex;
width: 15ch;
height: 12ch;
justify-content: center;
align-items: center;
font-size: 5em;
color: white;
background-size: contain;
background-repeat: no-repeat;
background-position: center;
background-image: url("https://i.stack.imgur.com/tMO8g.png"), url("https://i.stack.imgur.com/tMO8g.png"), linear-gradient(hsl(0 0% 50%) 0 100%);
background-blend-mode: color, darken, normal;
}
<div>Hello, World!</div>
Hopefully this solution is useful to you!