array("GalleryID" => "Countries/England", "SubsetID" => "London"), "Budapest" => array("GalleryID" => "Countries/Hungary", "SubsetID" => "Budapest"), "Cairo" => array("GalleryID" => "Countries/Egypt", "SubsetID" => "Cairo"), "Paris" => array("GalleryID" => "Countries/France", "SubsetID" => "Paris"), "Vienna" => array("GalleryID" => "Countries/Austria", "SubsetID" => "Vienna"), "Prague" => array("GalleryID" => "Countries/CzechRepublic", "SubsetID" => "Prague"), "Istanbul" => array("GalleryID" => "Countries/Turkey", "SubsetID" => "Istanbul"), "New-York-City" => array("GalleryID" => "Countries/USA", "SubsetID" => "New-York-City"), "Melbourne" => array("GalleryID" => "Countries/Australia", "SubsetID" => "Melbourne"), "Malta" => array("GalleryID" => "Countries/Malta", "SubsetID" => "") ); class MapHandler { var $GMap; var $MapConfig; var $MapMarkers; var $WrapperHTML = ""; var $MappableGalleries; var $MapPageID; // Indexes the $MappableGalleries array var $GalleryHandler; var $LinkGenerator; var $GalleryID; var $SubsetID; var $MarkerCounter = 0; function MapHandler(& $GalleryHandler) { global $MappableGalleries; // Should be passed as a parameter $this->GalleryHandler = & $GalleryHandler; $this->LinkGenerator = $this->GalleryHandler->LinkGenerator; $this->MappableGalleries = $MappableGalleries; $this->GalleryID = $this->GalleryHandler->Directory; $this->SubsetID = $this->GalleryHandler->SubsetID; $this->MapPageID = $this->GetMapPageID(); $this->LoadConfig(); } function InitMap() { $this->GMap = new GMap(); $this->GMap->width = '100%'; $this->GMap->addLargeMapControl(); if ($this->MapConfig['map_type_control']) { $this->GMap->addMapTypeControl(); } $this->GMap->setMapType('G_SATELLITE_MAP'); $this->GMap->zoom = $this->MapConfig['zoom']; $this->GMap->center = new GPoint($this->MapConfig['center_x'], $this->MapConfig['center_y']); } function IsMapEnabled() { $IsMapEnabled = GetAssocElement($this->MapConfig, 'map_enabled'); $IsMapEnabled = $IsMapEnabled && (boolean)$this->MapPageID; return $IsMapEnabled; } function LoadConfig() { $MapMarkerFile = $this->LinkGenerator->GetRelativePath($this->GalleryHandler->GalleryInfoSubdir . "map.txt", RELATIVE_TO_FILEROOT); $MapConfigFile = $this->LinkGenerator->GetRelativePath($this->GalleryHandler->GalleryInfoSubdir . "mapconfig.txt", RELATIVE_TO_FILEROOT); $MapConfigFile = LocalizeFile($MapConfigFile); $this->MapConfig = $this->GalleryHandler->GalleryHelper->LoadDescriptions($MapConfigFile); $this->MapMarkers = $this->GalleryHandler->GalleryHelper->LoadDescriptions($MapMarkerFile); } function GenerateMap() { $this->LoadHTML(); $this->AddMarkers(); $this->ReplaceTags(); return $this->WrapperHTML; } function ReplaceTags() { $GalleryTitle = $this->GalleryHandler->GalleryTitle; $MapCode = $this->GMap->getHeader('', false); $MapInfo = $this->MapConfig['info']; $MapCode .= " "; $this->WrapperHTML = str_replace("<-%MapCode%->", $MapCode, $this->WrapperHTML); $this->WrapperHTML = str_replace("<-%MapInfo%->", $MapInfo, $this->WrapperHTML); $this->WrapperHTML = str_replace("<-%GalleryTitle%->", $GalleryTitle, $this->WrapperHTML); $this->WrapperHTML = str_replace("<-%LowercaseGalleryTitle%->", mb_strtolower($GalleryTitle, DEFAULT_ENCODING), $this->WrapperHTML); $Crumbtrail = array(); $Crumbtrail[LocalizeString("Home", "Főoldal")] = "/"; $Crumbtrail[LocalizeString("Photos", "Fotók")] = "/"; $Crumbtrail[$this->GalleryHandler->NonSubsetGalleryTitle] = $this->LinkGenerator->GetGalleryLink($this->GalleryHandler->Directory); $Crumbtrail[$this->GalleryHandler->GalleryTitle] = $this->LinkGenerator->GetGalleryLink($this->GalleryHandler->Directory, false, true, $this->GalleryHandler->SubsetID); $Crumbtrail[LocalizeString("Photo Map", "Fotótérkép")] = ""; $this->WrapperHTML = str_replace("<-%SiteHeader%->", FetchSiteHeader($Crumbtrail, false, false), $this->WrapperHTML); } function LoadHTML() { $MapFilename = LocalizeFile("Maps/Map.html"); $fp = fopen($MapFilename, "r"); while (!feof($fp)) { $this->WrapperHTML .= fgets($fp, 4096); } fclose($fp); } function AddMarkers() { //echo $_SERVER['HTTP_HOST']; $UsedCoordinates = array(); foreach ($this->MapMarkers as $Picture => $Coordinates) { if ($Coordinates) { list ($X, $Y) = $this->GetURLCoordinates($Coordinates); if ($X === false || $Y === false) { if ($_SERVER['HTTP_HOST'] == 'localhost') { echo 'Invalid coordinate URL for ' . $Picture . '
'; } continue; } $this->AddMarker($X, $Y, $this->GalleryHandler->Descriptions[$Picture], $Picture); $CombinedCoordinates = $Y . "," . $X; if (isset($UsedCoordinates[$CombinedCoordinates]) && $_SERVER['HTTP_HOST'] == 'localhost') { echo "Coordinate clash at $CombinedCoordinates: $UsedCoordinates[$CombinedCoordinates] and $Picture
"; } else { $UsedCoordinates[$CombinedCoordinates] = $Picture; } if ($this->MarkerCounter >= 20) { //break; } $this->MarkerCounter++; } } } function CenterAndZoom($X, $Y, $Zoom) { return "CenterAndZoom($X, $Y, $Zoom);"; //return "maphandler.zoomTo(2);"; //return "maphandler.recenterOrPanToLatLng(new GPoint($X, $Y));"; } function AddMarker($X, $Y, $Caption, $Picture) { $HighlightedPicture = HTTPGETParam("photo") . ".jpg"; $CurrentHighlighted = $HighlightedPicture == $Picture; $Link = "/" . $this->GalleryID . "/" . basename($Picture, ".jpg") . ".html"; $ThumbnailPath = $this->GalleryID . "/thumbnails/" . $Picture; $ThumbnailWeb = $this->LinkGenerator->GetRelativePath($ThumbnailPath, RELATIVE_TO_WEBROOT, true);; //"/photos/" . $ThumbnailPath; $ThumbnailFilesystem = $this->LinkGenerator->GetRelativePath($ThumbnailPath, RELATIVE_TO_FILEROOT, true); $ImageSizeTags = GetImageSizeTags($ThumbnailFilesystem); $ZoomInCommand = $this->CenterAndZoom($X, $Y + 0.0006, $this->MapConfig['street_level_zoom']); $ZoomOutCommand = $this->CenterAndZoom($X, $Y + 0.0048, "maphandler.getZoomLevel() + 3"); $ZoomInLabel = LocalizeString("zoom in", "térképet nagyít"); $ZoomOutLabel = LocalizeString("zoom out", "térképet kicsinyít"); $HTML = '
' . '' . '' . '
' . $Caption . '
' . '
' . '
' . '' . $ZoomInLabel . '   ' . '' . $ZoomOutLabel . '' . '
' . '
'; //$HTML = 'zoom in   '; $HTML = str_replace("'", "\'", $HTML); $Marker = new GMarker(new GPoint($X, $Y), $HTML, "click", $CurrentHighlighted); $this->GMap->addOverlay($Marker); } function GetURLCoordinates($Coordinates) { if (StartsWith($Coordinates, "http://") || StartsWith($Coordinates, "https://")) { if (strpos($Coordinates, '&ll=') === false) { return array(false, false); } else { list ($tmp, $Coordinates) = explode("&ll=", $Coordinates); list ($Coordinates, $tmp) = explode("&", $Coordinates); } } list ($Y, $X) = preg_split("/,/", $Coordinates); if (!((float) $X) || (!(float) $Y)) { $X = false; $Y = false; } return array($X, $Y); } function LogMap() { LogElement("Maps/maps.log", $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']); LogReferrer(); } function GetMapLink($Picture = false) { if ($PageID = $this->MapPageID) { $Link = "/Maps/" . $PageID . ".html"; if ($Picture && !IsRequestBySearchEngine()) { $Link .= "&photo=" . basename($Picture, ".jpg"); } return $Link; } else { return false; } } function IsPictureMapped($Picture) { return (isset($this->MapMarkers[$Picture]) && $this->MapMarkers[$Picture]); } /* AUXILIARY */ function GetMapPageID() { reset($this->MappableGalleries); foreach ($this->MappableGalleries as $PageID => $GalleryDetails) { if ($GalleryDetails['GalleryID'] == $this->GalleryID && ($GalleryDetails['SubsetID'] == $this->SubsetID || $this->SubsetID == false)) { return $PageID; } } } } ?> link] pairs function DisplaySiteHeader($Crumbtrail = false, $BuyPictureLink = false, $PictureToBuy = false) { echo FetchSiteHeader($Crumbtrail, $BuyPictureLink, $PictureToBuy); } function FetchSiteHeader($Crumbtrail = false, $BuyPictureLink = false, $PictureToBuy = false, $Root = "") { $TemplateManager = new Smarty; if ($Crumbtrail) { $FilteredCrumbtrail = array(); foreach ($Crumbtrail as $CrumbtrailEntryName => $CrumbtrailEntryLink) { // CSS font-variant: small-caps doesn't seem to work on this $FilteredCrumbtrail[mb_strtolower($CrumbtrailEntryName, DEFAULT_ENCODING)] = $CrumbtrailEntryLink; } $TemplateManager->assign("Crumbtrail", $FilteredCrumbtrail); } else { $TemplateManager->assign("Crumbtrail", array()); } $TemplateManager->assign("PictureToBuy", $PictureToBuy); $TemplateManager->assign("BuyPictureLink", $BuyPictureLink); $TemplateManager->assign("Language", GetLanguage()); $TemplateManager->assign("VisitorSource", GetVisitorSource()); if (GetLanguage() == LANG_HUN) { $BlogLinkProvider = new BlogLinkProvider(); list ($BlogPostLink, $BlogPostTitle) = $BlogLinkProvider->getRandomLink(LANG_HUN); $TemplateManager->assign("BlogPostLink", $BlogPostLink); $TemplateManager->assign("BlogPostTitle", strtolower($BlogPostTitle)); } return $TemplateManager->fetch($Root . TEMPLATE_ROOT . "SiteHeader.html"); } ?>= sizeof($filelist) - 1) return false; $nextfile = $filelist[$index + 1]; if ($this->MatchesPrefix($nextfile, $prefix)) return $nextfile; $index++; } } function PrivateGallery($Gallery) { if (StartsWith($Gallery, "Duhongo") || StartsWith($Gallery, "Private") || StartsWith($Gallery, "NonPublic") || StartsWith($Gallery, "Others") || StartsWith($Gallery, "tmp")) { return true; } else { return false; } } // Megadja a galeriaban az elozo file nevet, vagy false-t, ha az elso file-nal vagyunk function GetPrevFile($filelist, $curfile, $prefix) { $index = array_search($curfile, $filelist); if ($index === false) return false; while (1) { if ($index == 0) return false; $prevfile = $filelist[$index - 1]; if ($this->MatchesPrefix($prevfile, $prefix)) return $prevfile; $index--; } } function DisplayText($text, $CSS, $Extra = "") { if ($Extra) $Extra = " " . $Extra; echo ("" . $text . ""); } function StartCell($CellWidth, $VAlign) { echo ("\n

\n"); } function EndCell() { echo ("

\n\n\n"); } function SmallSpacerTable($Size, $Return = false) { $Table = "\n
\n"; if ($Return) { return $Table; } else echo $Table; } function MatchesPrefix($CurPic, $Prefix) { return (!$Prefix || $Prefix && substr($CurPic, 0, strlen($Prefix)) == $Prefix); } function InsertEmptyCell($Extra = "") { echo (" {$Extra}"); } function FilterLanguageParam($Gallery, $Picture) { $Language = false; list ($Language_tmp, $Gallery) = $this->LanguageRegexp($Gallery); if ($Language_tmp) $Language = $Language_tmp; list ($Language_tmp, $Picture) = $this->LanguageRegexp($Picture); if ($Language_tmp) $Language = $Language_tmp; return array($Language, $Gallery, $Picture); } function LanguageRegexp($String) { $LanguageRegexp = "-(..)"; if (ereg($LanguageRegexp, $String, $Regs)) { $Language = $Regs[1]; $String = ereg_replace($LanguageRegexp, "", $String); } else $Language = false; return array($Language, $String); } } ?>  Buying a camera | Photo equipment tips

What Photo Equipment to Buy?

The author
Peter Visontay, the photographer of the
pictures displayed on

Over the years I've been asked the question “What equipment do you use?” many times. I created this page for people struggling with doubts about getting new (or their first) camera equipment, and I also hope to dispel some myths and mention some often overlooked aspects of photography. At the end of the article you'll also find a list of photo equipment I recommend.

Note that most of what I write about here applies to the type of photography you can see on this site (that is, — “generic” travel photography, urban photography, street scenes, daily life, architecture and landscapes.

What makes a good picture?

Most people believe that the better equipment you have the better pictures you take. While some specialized types of photography (e.g. wildlife photography and portraiture) do require a certain “level” of equipment (e.g. a long enough lens for animal shots), most “general” kinds of photography (including the large majority of the pictures you can see on this site) don't require any special or really high quality equipment, in fact, most of these images could be taken with entry-level cameras.

Entry-level camera

Photo taken with a fairly basic camera (click to zoom).

The reason is that a camera is “just” a tool, and it's ultimately your choices (the subject, the framing, the angle, the white balance, etc.) that define the picture. Different cameras and lenses do have different capabilities (different zoom ranges, different sharpnesses, different ISO ranges), but most of the time it's up to you to take a good picture, and if you can do it, then chances are you can do it with a not-state-of-the-art camera too. Nevertheless, a better camera gives you more possibilities, but you have to be able to make use of those possibilities — don't expect to take better shots just because you have a better camera; you'll have to work hard to be able to use it to its full potential. Of course if you know you need a better camera and also know why, then go for it! :) 

You might have noticed that this does not answer the question 'What makes a good picture?'. It's very hard to answer that, but the answer hardly ever is “a good camera”.

Camera categories

What is an SLR?
Non-SLR Cameras

Non-SLR basically means that you can't change the lens on the camera (you can usually buy converters that modify the zoom range though).

SLR Cameras 

SLR essentially means that you can replace the lens with another one if, for example, you want to achieve a greater zoom range or want to be able to take shots in low light conditions. These are also called DSLR when talking about a digital SLR, as opposed to a film one.

Digital cameras can roughly be put into the following three categories: 

Which camera category to choose?

The most important thing to decide is the type of camera you want, and first you should answer the question: 'Why do I want a (new) camera?'. Depending on your answer, I would recommend the following camera types:

Midrange camera

Photo taken with a midrange camera (click to zoom).

To try photography for the first time

Go for an entry-level camera (see some good examples below). They're inexpensive, small, easy-to-use, and many come with lenses covering large zoom ranges; they're ideal for getting to know how cameras work without having to lug around large sets of equipment that you're not really comfortable with. And since cheaper cameras don't give you so many options, it's easier to concentrate on the things that make most pictures good (like choosing your subject, composition, etc.) Also, forget the myth that inexpensive cameras take bad pictures — you'd be surprised how good the pictures of most of these cameras are. And there's absolutely no need to feel “bad” about not having a professional-looking camera if your pictures look great.

To take better pictures

This is the dangerous one, which I've already addressed in the “What makes a good picture?” section. It's easy to blame the tool's faults for the lack of success — which, unless the current camera has an actual deficiency that the photographer is trying to get rid of, is probably not the answer. I think the thing to ask oneself here is: why are the pictures not good enough? If they can be explained with an actual deficiency of the camera (e.g. a small zoom range on an entry-level camera when you're supposed to be taking shots of pictures in the street from far away), then an upgrade makes sense. However, if they cannot (“they're just not good enough”), the camera's probably not at fault. In the  latter case I'd recommend that you first read a few articles on technique and composition.

Camera type summary

Small, easy-to-use, inexpensive, lens cannot be changed.


Bulkier, has more feaures, relatively expensive, lens interchangeability depends on type.


Bulky, lots of feaures, very high resolution, very expensive, lens interchangeable.

To explore different areas of photography

This is a completely legitimate reason to want to upgrade — more advanced cameras give you wider possibilities (including simple things like bulb mode or a wider array of lenses). If you're already comfortable with your current camera and satisfied with the results, but feel you want to explore your abilities, you'd probably be best off with a better mid-range camera (not necessarily an SLR — there are some really good non-SLR prosumer cameras out there). For some examples see below.

To take images for publications

This is probably the best reason for getting at least a high resolution (at least 10 megapixels) mid-range camera or a professional one. Since you don't know how large your images will be zoomed, your best bet is to get as much information in your images as possible; the more megapixels the image has and the sharper it is the better. However, you still don't need to go megapixel-crazy — when confronted with a great shot, few people will go pixel-hunting and count the hairs of your subject.

To replace a broken camera

Well, there's no arguing with that :)

Camera details

There is a list of things you may want to pay attention to when buying a camera (e.g. the zoom range of a compact camera, to mention one of the most basic ones). Listing all of these, or even describing some of them in detail is beyond the scope of this article, but I'll try to sum up the ones that can be the most important for the kind of photography I do (i.e. travel, landscape and street photography). 

Some other useful features:

Buying your camera

Below you can find a table containing cameras that I would personally recommend. By taking your mouse over each link you'll see a short description of the camera and its current price on

Note: if you purchase a camera from by clicking one of the links below, I will receive a commission (even though you won't pay a penny more), which is a great way to support me :) In case you're worried I'm trying to sell you random cameras just to make money — I'm not. These actually are cameras that I would recommend based on either personal experience or reviews by people I trust. 

Canon Nikon Pentax Sony Fujifilm Olympus
Entry-level  Nikon Coolpix S700    

Lenses and Accessories

In the near future I will be adding a section on recommended lenses and accessories (filters, tripods, etc.) as well to help you get the maximum out of your camera. 

» homepage
» photo galleries
» licensing information