The striker has made the move from Championship club Sheffield United for a reported Â£3.5 million.
"James is a player who has an absolutely phenomenal goal-scoring record and I am delighted to have him here," Stoke boss Tony Pulis told the club's official website.
"He has averaged more than a goal every other game for Sheffield, and he has a proven record of scoring in the top flight.
"He is someone I have admired for a very, very long time.
The former Everton player has scored 36 goals in 18 months in the Championship and has signed a two-and-a-half-year deal with Stoke.