How to make a pie chart using custom image

i = Import@"http://i.stack.imgur.com/8I3B1.jpg";
f[{{tmin_, tmax_}, {rmin_, rmax_}}, ___] :=
 Module[{l = Join[{{0, 0}}, Table[{Cos@t, Sin@t}, {t, tmin, tmax, (tmax-tmin)/100}]]},
  {Texture[i], EdgeForm[],
   Polygon[l, VertexTextureCoordinates -> 1/2 Transpose[Transpose[l] + {1, 1}]]}]

Framed@PieChart[{1, 2, 3, 4, 5, 6}, ChartElementFunction -> f]

Mathematica graphics

Edit

You may also want to get a better visual feedback:

Module[{cd = ColorData[3, "ColorList"]},
 f[{{tmin_, tmax_}, {rmin_, rmax_}}, ___] := 
  Module[{l = Join[{{0, 0}}, Table[{Cos@t, Sin@t}, {t, tmin, tmax, (tmax - tmin)/100}]]},
   cd = RotateLeft@cd;
   {Texture[ImageCompose[i, {Graphics[{cd[[1]], Disk[]}], 0.5}]], EdgeForm[], 
     Polygon[l, VertexTextureCoordinates -> 1/2 Transpose[Transpose[l] + {1, 1}]]}]
 ]

Framed@PieChart[{1, 2, 3, 4, 5, 6}, ChartElementFunction -> f]

Mathematica graphics


Combinining @belisarius's cool solution for the key challenge with some built-in ChartElementDataFunctions you can do a number of tricks:

onecent=Import["http://i.stack.imgur.com/8I3B1.jpg"];
ClearAll[cEDF];
cEDF[datafunc_: ChartElementDataFunction["NoiseSector",
     "AngularFrequency" -> 13, "RadialAmplitude" -> 0.1]][texture_:
       ExampleData[{"TestImage", "Mandrill"}]][{{t0_, t1_}, {r0_, r1_}}, y_, z___] := 
(datafunc[{{t0, t1}, {r0, r1}}, y , z] /. 
  Polygon[a_, b___] :> Sequence[Texture[texture], 
   Polygon[a, VertexTextureCoordinates -> 
   1/2 Transpose[Transpose[a/(r1 + 2 ("RadialAmplitude" /. Options[datafunc]))] + {1,1}]]]);


noiseF = ChartElementDataFunction["NoiseSector", 
        "AngularFrequency" -> 13, "RadialAmplitude" -> 0.1]; 
oscltngF =  ChartElementDataFunction["OscillatingSector", 
       "AngularFrequency" -> 6, "RadialAmplitude" -> 0.21`]; 
sqrwvF =  ChartElementDataFunction["SquareWaveSector", 
     "AngularFrequency" -> 50, "RadialAmplitude" -> 0.1`];
trnglwvF =   ChartElementDataFunction["TriangleWaveSector", 
     "AngularFrequency" -> 18, "RadialAmplitude" -> 0.1`];


Row[PieChart[{{2, 2, 3, 4}}, ChartElementFunction -> cEDF[#][onecent], 
     SectorOrigin -> {Automatic, .5}, ImageSize -> 300] & /@ 
    {noiseF, oscltngF, sqrwvF, trnglwvF}, Spacer[5]]

enter image description here

 Row[PieChart[{{2, 2, 3, 4}}, ChartElementFunction -> cEDF[#][], 
   SectorOrigin -> {Automatic, .5}, ImageSize -> 300] & /@ 
     {noiseF, oscltngF, sqrwvF, trnglwvF}, Spacer[5]]

enter image description here

Update: Combining with ChartStyle colors:

cEDF2[datafunc_: ChartElementDataFunction["NoiseSector",
     "AngularFrequency" -> 13, "RadialAmplitude" -> 0.1]][texture_:
       ExampleData[{"TestImage", "Mandrill"}]][{{t0_, t1_}, {r0_, r1_}}, y_, z___] :=
  (datafunc[{{t0, t1}, {r0, r1}}, y, z] /. Polygon[a_, b___] :>
     Sequence[Dynamic@Texture[ImageMultiply[texture, CurrentValue["Color"]]], 
  Polygon[a,  VertexTextureCoordinates -> 1/2 
    Transpose[Transpose[a/(r1 + 2 ("RadialAmplitude" /. Options[datafunc]))] + {1,1}]]]);


Row[PieChart[{{2, 2, 3, 4}}, ChartElementFunction -> cEDF2[#][onecent],
   SectorOrigin -> {Automatic, .2},ImageSize -> 300,
   ChartStyle -> (Directive[Opacity[.9], #] & /@Rest[ColorData[3, "ColorList"]])] & /@
     {noiseF, 
      oscltngF /.HoldPattern["AngularFrequency" -> _] :> "AngularFrequency" -> 9,
      sqrwvF /.HoldPattern["AngularFrequency" -> _] :> "AngularFrequency" -> 15,
      trnglwvF}, Spacer[5]]

enter image description here


Here is a simple 3d version modified from belisarius's answer, by just stacking many layers of polygons together.

i = Import@"http://i.stack.imgur.com/8I3B1.jpg";
f3d[{{tmin_, tmax_}, {rmin_, rmax_}, {hmin_, hmax_}}, ___] := 
 Module[{l = Join[{{0, 0}}, Table[{Cos@t, Sin@t}, {t, tmin, tmax, (tmax - tmin)/100}]]}, 
  Table[{Texture[i], EdgeForm[], Polygon[Append[#, n] & /@ l, 
     VertexTextureCoordinates -> 1/2 Transpose[Transpose[Append[#, n] & /@ l] + {1, 1, 1}]]}, 
  {n,0., 1.0, 0.05}]]
PieChart3D[{1, 2, 3}, ChartElementFunction -> f3d]

enter image description here