Here’s one example, perhaps it gives ideas to solve your problem. Not a solution on its own.
First I made an alpha texture of your leaves and saved as .png (which supports alpha transparency).
Then I prepared a simple test object and gave it vertex groups, which particle systems use for particle density and length.
Next I added vertex weight proximity modifiers and use two empty objects to control the length and density by modifying the vertex groups. I would’ve used one particle system and one vertex group but I couldn’t put two vertex weight modifiers with different target objects to influence one group. I might have overlooked something.
I used only one leaf texture and modify its color with material, based on the position:
From top row, left:
I used object info node to get the location and separate X direction from using separate RGB node.
Leaves are -X and +X directions and both sides have to be set to output positive values (“invert negative direction”). Those are then set inside given range and normalized to give values for hue, which is in range 0-1. I didn’t want to use whole hue range but just a small portion of it, so that is what “hue range and color” nodes are for.
That color is then mixed with the original image texture color to give finer control over how the color changes. Can mute this node if only modified colors are wanted, or disconnect factor for setting the mix manually.
Transparent parts of the image are then set as transparent for the material (leaf texture is on a single plane).
leaves_ja12.blend (1.54 MB)
Edit: did a quick adjustment to those settings and made a test render