I am sure you have see images where the texture of a brick wall is seemingly applied to a person. Or an image appears to be reflected or mirrored on water. This is usually done using a Displacement Map in Photoshop.
Here is a super fast summary of the process (I will add photos when I get a chance):
Select an image that you want to distort to make it appear as though it was printed on a piece of fabric. Open up the fabric image. Go go Image > Duplicate to make an exact copy of it. Convert it to grayscale by going to Image > Mode > Grayscale. Zoom into the image until you are are 100%. Then to go Blur > Gaussian Blur. Set the Radius until the texture of the image disappears. Apply a Curves or a Levels to greatly increase the contrast. You must have a high contrast image in order for this to work. Then save the image as a Photoshop document (it will then have the default .PSD extension). Close the file.
Place the image of the person (just an example) on the image of the fabric (the original color version). Then select the face layer. Go to Filter > Distort > Displace. Start with a value of 10 for both input fields. Click okay then select the grayscale version of the image. This will then load the image as a displacement map and distort the shirt image. Basically, the darker the part of the displacement map image, the more distorted the face image will be. Try playing with the blending modes. Multiply Mode generally makes them blend together pretty well. You will likely have to use Curves or Levels to lighten the image after you apply the Blending Mode change.
Here are some other tutorials, but I think they both miss a few steps.