Official results showed Garcia had 55% of the vote in the runoff with Humala, with 77% of votes counted on Sunday.
Humala told a news conference: “We recognise the results … and we salute the forces that competed against us, those of Mr Garcia.”
Garcia’s win marks a political comeback after his 1980s government ended in economic ruin, rebel violence and accusations of rights abuses.
It is also a blow to Hugo Chavez, Venezuela’s president, who sparked a diplomatic dispute with Peru after openly throwing his weight behind Humala.
A jubilant Garcia waved a white handkerchief – a traditional victory symbol of his APRA party – as thousands of supporters gathered outside his campaign headquarters in Lima and fireworks filled the sky.
“Today, Peru has sent a message of national sovereignty and has defeated efforts by Hugo Chavez to incorporate us in the expansion strategy of his military and backward-looking model, which he’s tried to implant in Latin America,” Garcia said.
But some Peruvians saw him merely as less hostile to business and the lesser of two evils.
Ida Blanc, a 45-year-old psychologist, said after she cast her vote for Garcia in an upper middle-class neighbourhood of Lima: “It’s a sad day. Neither of them is a good candidate.”