The 31-year-old will join Stoke on loan until the end of the season.
“This is a fantastic signing,” Stoke boss Tony Pulis told the club’s official website.
“John’s record speaks for itself because he has scored goals at the highest level throughout his career.
“As well as all the experience he has gained at international level, he has played for some top, top clubs across Europe and performed in the Champions League for many seasons, including an appearance in the final for Valencia.
“On top of that, he was Aston Villa’s leading scorer last season with 17 goals, so we have acquired a striker with outstanding pedigree.”