There are over 2700 points and because they fill out a thick region, there is no real order to them. It seems to me to get a single line, one would want to approximate the image by lines first. One way is to use Thinning.
img = Import["http://euler.nmt.edu/mathwiki/images/e/ef/Borromean.png"]; comp = MorphologicalComponents @ Thinning[ColorNegate @ Binarize[img]]; splice[{list1_?VectorQ, list2_?VectorQ}] /; First@list1 == First@list2 := Join[Reverse@list1, Rest@list2]; splice[lists_] := Join @@ lists; Graphics[ Table[ {Hue[c/6 - 0.1], With[{pos = Position[comp, c]}, Line[pos[[ splice @ FindCurvePath[pos] ]]]]}, {c, 6}] ]

Update: It happens in this case that FindCurvePath splits the first three lines into two components with the same starting point; the fourth into two disjoint components; and the rest are just one line. When I first posted, I had forgotten to check all of them. The update fixes how they are spliced together. Some smoothing may obtained by skipping some points:
splice[FindCurvePath[pos]] ~Part~ (3 ;; -3 ;; 3)

Another way is to fit a circle:
circle = FindFit[ Transpose[Append[Transpose[#], ConstantArray[0, Length @ #]]] &@ PixelValuePositions[img, Blue, 0.5], (x - a)^2 + (y - b)^2 - r^2, {a, b, r}, {x, y}] (* {a -> 95.864, b -> 97.5503, r -> 89.9539} *) Graphics[{ PixelValuePositions[img, Blue, 0.5] // Point, Red, Circle[{a, b}, r] /. circle }]

One can use the circle data to generate a Line if desired.
There is also the methods found in Derive a smooth circle with cusp from an image
PixelValuePositionsis a list of positions of the "points". $\endgroup$PixelValuePositionsI get a list of unordering points, what I want is like thisLine[{p1,p2...pn}]$\endgroup$FindCurvePathcan make the ordering. $\endgroup$