Maybe it is better to pass coordinates as an array. Single argument will simplify the interface as well as cover possible pass of “Point” object:
```
public function watermark($filename, $watermarkFilename, $point = null)
{
    if (is_array($point)) {
        list($x, $y) = $point;
        $point = new Point($x, $y);
    } elseif ($point instanceof Point) {
        // do nothing  
    }
}
```
Same strategy can be applied for all methods.