The 13th seed whose game has lifted this week will play the winner as top seed Novak Djokovic faces number five Gael Monfils of France in their quarter-final.
Tsonga needed one break per set and less than 90 minutes to dispatch Almagro, firing ten aces and saving three points in the final game for victory.
Tsonga, now 6-0 over Almagro, duplicated his final four showing from 2009, his only previous Canadian appearance.
At the bottom of the draw, Mardy Fish ended Swiss hopes here, running away with the final set in a 6-3, 6-7 (8/10), 6-0 defeat of Stanislas Wawrinka.
The 14th seed followed Swiss compatriot Federer out of the event.
Wawrinka rallied to win the second set in a tight tiebreaker but collapsed in the final set to hand over victory to sixth seed Fish in two hours, 21 minutes.
Fish, the top American on the ATP Tour, next faces Serb Janko Tipsarevic who defeated seventh-seeded Czech Tomas Berdych 6-4, 6-4.
"The second set was very strange for both of us," said Fish, who won the match with six aces and a massive 10 breaks of the Wawrinka serve.
"There were a lot of variables. We couldn't hold serve to save our lives, but we returned really well. There's the positive, I guess.
"To dwell on how you played, you're going to have some problems. It's nice that I'm able to move on and to be able to rectify my serve game."
The victory continues a career success story for the 29-year-old Fish, who had never won a match at the event before this week.
In fact, the world number eight American has been a stranger in Canada, playing only in 2003 and 2008.
"It's a fluke, having played here only a couple of times. I've played the US Open probably 12 times. I've played Cincinnati (next week's tournament) probably 10 or 11 times," he said.
"But it's certainly nice to be here and to play on these courts because they are pretty quick, and they suit my game very well. I can get away with not playing great tennis but still winning."
Wawrinka had won three matches in a row this week for the first time since Roland Garros and was playing his second straight quarter-final after Gstaad at home on clay.
"It was a bad day today for me, I was not feeling the ball very well," said the Swiss. "Even if I won the second set, I didn't feel comfortable.
"I tried to fight the best I could. I was able to win that second set all the same, but I lost many opportunities to close it out."
Fish was playing in his eighth quarter-final of the season and improved his 2011 record to 32-15.
He has now won 10 of 11 matches on North American summer hardcourts, winning the Atlanta title last month before finishing runner-up in Los Angeles to Ernests Gulbis.
What the stars mean:
★ Poor ★ ★ Promising ★★★ Good ★★★★ Very good ★★★★★ Exceptional