back to top

Canon EF 100mm f/2.8L IS USM Macro Lens Review

A- A+

Subscribe Below to Download the Article Immediately

You can also select your interests for free access to our premium training:

Your privacy is safe. I will never share your information.
Related course: Macro Magic

Today, I’m reviewing Canon’s flagship consumer macro lens, the EF 100mm f/2.8L IS USM Macro. This lens has long been among my favourites for macro and portrait photography.

So, as part of our quest to find the best macro lens for Canon cameras, it seems a natural choice to review this lens first.

Let’s see why the Canon EF 100mm f/2.8L IS USM Macro is a popular professional option, and whether it’s something you should care about.

photo of the Canon 100mm f/2.8L lens

[Note: ExpertPhotography is supported by readers. Product links on ExpertPhotography are referral links. If you use one of these and buy something, we make a little bit of money. Need more info? See how it all works here.]


Overview of the 100mm f/2.8L

The EF 100mm f/2.8L IS USM Macro is a fairly new optic as far as EF lenses go. It was introduced in 2009, in order to partially supersede and improve upon its predecessor, the 100mm f/2.8 USM Macro lens.

It’s unlikely that we see an update in the upcoming years. But a dedicated RF version for Canon’s full-frame mirrorless cameras is supposedly in the works.

Currently, it’s the highest-grade macro lens Canon offers, along with the super-rare, super-niche MP-E 65mm 5:1 macro lens, which is far less versatile.

Compared to its cheaper predecessor, it offers slightly better image quality, weather sealing, and hybrid image stabilisation.

Being a true macro lens, this lens gives you a magnification ratio of 1:1. This essentially means that, at the closest focusing distance, subjects appear in their real-life size on the sensor. When you view the image on a screen, this results in an impressive close-up experience.

macro photo of flowers with raindrops
Photo by Anthony from Pexels

When you open up the box, you’ll find a few accessories included. A plastic hood (ET-73), a leather carrying pouch, and the front and rear caps are part of the package.

As this is part of Canon’s professional L-series lenses, it’s not exactly cheap, although it’s the cheapest L prime lens available. If you don’t have the budget, there are a number of less expensive dedicated macro lenses available.

If you’d like to dive deeper into the mesmerising world of macro photography, I recommend checking out our course, Macro Magic.

We actually use the Canon EF 100mm f/2.8L IS USM Macro lens in the course, along with budget alternatives.photo of the Canon EF 100mm f/2.8L attached to a camera body

Who Is the Canon EF 100mm f/2.8L IS USM Macro For?

The Canon EF 100mm f/2.8L IS USM Macro is ideal for a number of different uses. It’s great for professionals who need macro capabilities often enough to justify buying a dedicated macro lens.

For example, it’s excellent for wedding photography. Not only is it perfect for the ring shot and other detail images, but it’s also a great general portrait lens. It might just be your choice on your second camera body.

It will find its way just as easily to the bags of food, architecture, and portrait photographers. Although for the latter on its own, there are better choices. We even used it to shoot landscapes in our Simply Stunning Landscapes course, because of its exceptional image quality.

Enthusiasts can also benefit greatly from this lens if looking for a versatile, high-quality macro lens.

You will need a compatible interchangeable-lens camera to use this 100mm lens – but as you’ll see shortly, the list of these is quite long.

photo of Canon accessories

Key Features

Mount and Compatibility

The Canon EF 100mm f/2.8L IS USM Macro is made primarily for full-frame EF-mount cameras. These are the Canon EOS 6D, EOS 5D, and EOS 1DX/1Ds series of digital cameras, as well as all of Canon’s 35mm film cameras since 1987.

However, the lens will work perfectly on crop-sensor EOS bodies (such as the 7D, 10D-90D series, and all the Rebels). It can also be adapted flawlessly to Canon’s full-frame mirrorless R bodies (currently the R, RP, R6, and R5).

It will work just fine with a slight drop in autofocusing speed on Canon’s crop-sensor mirrorless EF-M-mount cameras (e.g. the M100, M50, M5, M6).

You can also use any EF mount adaptor currently in use with this lens. These include adaptors to Sony E-mount, Fujifilm X-mount, Micro Four Thirds, Nikon Z-mount, Leica L-mount, and more.

Autofocusing speed and reliability on these off-brand cameras will depend on the quality of the adaptor used.

The lens’ image circle is large enough (with IS turned off) to cover smaller medium-format sensors, like those in Fujifilm’s GFX cameras. As macro lenses for these formats are quite rare, and even if they exist, they cost a fortune, the 100mm is a real prospect here.

photo of the Canon EF 100mm f/2.8L attached to a camera body

Image Quality

In my experience, the Canon EF 100mm f/2.8L IS USM Macro is a very sharp lens, although not the all-time sharpest I’ve used.

A large portion of the frame is tack-sharp already at f/2.8, with the exception of the extreme corners. As you’d expect from a macro lens, close-up image quality is identically excellent.

The corners finally match up to the centre area entirely at f/5.6.

photo of a color scale

It’s basically distortion-free. This is usually not an issue at focal lengths in this range anyway, but such performance is exceptionally good.

Chromatic aberration is also almost non-existent. There is a minor purple-green coloration of out-of-focus edges present, but it’s only noticeable when shooting grey or white subjects.

The quality of out-of-focus backgrounds is really pleasing and creamy. Obviously, this is a major consideration in a macro-joint-portrait lens – much of your frame can be blurry in both instances.

The lens responds to direct sunlight in a decent way. There’s a slight loss of contrast and a quite apparent flaring – but this can even be appealing if done on purpose. For general shooting, I recommend keeping the lens hood on.

Focusing

The Canon EF 100mm f/2.8L IS USM Macro is equipped with quick autofocus and a sensitive manual focus ring.

During my tests (conducted on 5D MkIII, 5D MkIV, and 7D MkII camera bodies), the 100mm generally performed really well.

It’s extremely consistent. Even though it’s not the fastest I’ve used, its speed is still more than decent.

It’s quick enough to capture street scenes full of motion or keep close-up subjects constantly in focus in servo mode. If you flick the limiter switch and cut off the closer distances up to 0.5m, it’s even faster.

The manual focus ring is mechanically connected to the focusing elements, but it’s coupled only one way. The motor doesn’t turn the ring when focusing. Therefore, it offers full-time manual override even during autofocus mode.

Speaking of the motor, it’s an almost completely silent ultrasonic drive motor (reflected in the name as ‘USM’). When focusing, the front element stays completely still. This ensures better sealing and filter usability.

Furthermore, this 100mm lens offers a distance scale on the lens, which is particularly useful in macro photography. As mentioned, there is a limiter switch between 0.3m-infinity and 0.5m-infinity, which makes focusing in non-macro situations quicker.

macro photo of a spider in its web

Stabilisation

One of the big hit features of the Canon EF 100mm f/2.8L IS USM Macro is its hybrid Image Stabilisation (IS) module. Developed specifically for close-up applications, this system has greater leverage on the lens axis than most other systems.

Thanks to this, I was able to hand-hold a shutter speed of 1/20s at maximum magnification. That’s almost 5 stops better than without stabilisation, which is a great feat.

Handling and Build Quality

This lens is primarily built of plastic, with the exception of the lens mount, which is metal. Unfortunately, it feels to be one of the most fragile L-series lenses I’ve used, and I encountered a lot of them.

Yet, it’s weather-sealed, so it should withstand rainy, dusty, or sandy environments pretty well. I have first-hand experience for the first, but no doubts about the other conditions either.

It has a 67mm filter thread, which puts it in the same league as the 70-200 f/4 lenses by Canon. Filters of this size are not too expensive.

On the side, there are three switches: a manual/autofocus switch, a stabilisation on/off switch, and the aforementioned focus limiter switch. They are easy enough to be flicked quickly without much effort, but hard to occasionally switch, because they’re slightly below the surrounding surface.

The lens measures 123mm in length and 78mm in diameter and weighs 625 grams. It balances really well with 90D and 5D-sized camera bodies.

It’s coated in black, except for the signature red ring of the L-series towards the front.

The included ET-73 hood is made of plastic, and doesn’t feel too solid – but it does the job in all other aspects, and has a light-absorbent surface on the inside. With the hood on, your working distance shortens to around 5cm at 1:1.

I don’t recommend keeping it on when shooting macro, but it’s useful when capturing portraits.photo of the Canon EF 100mm f/2.8L IS USM Macro lens

Alternatives

There are a number of alternatives to the Canon EF 100mm f/2.8L IS USM Macro lens.

The Tamron AF SP 90mm f/2.8 Di VC USD is the most comparable. At a slightly lower price, it offers very similar build quality, stabilisation, and image performance.

The Sigma 105mm f/2.8 EX DG OS HSM Macro is another third-party lens that has comparable specifications on paper, and it’s significantly cheaper than both the Tamron and the Canon lens. However, it’s known to have some reliability issues, especially with autofocus, so for professional applications, it might not be ideal.

The Canon EF 100mm f/2.8 USM Macro is the aforementioned predecessor of the 100mm f/2.8L. It’s very slightly behind in image quality and doesn’t have stabilisation like the previous two. However, it’s also quite cheap, and some say that it’s better built than its ‘L’ counterpart.

For crop sensors, the Canon EF-S 60mm f/2.8 USM Macro offers a 100mm-equivalent view and great close-up performance. Its image quality is exceptional among EF-S lenses. It’s also not too expensive, although crop-sensor lenses are generally cheaper anyway. This lens lacks image stabilisation.

You can also convert your existing lenses to decent-enough macro lenses if you only need macro capabilities occasionally. Read my article on macro photography gear on a budget here.

Our Verdict

The Canon EF 100mm f/2.8L IS USM Macro is an excellent lens. In my opinion, it’s worth the price. But if that’s hard to justify for you, it also has less expensive, more than decent alternatives.

The lens lives up to the expectations of the L-series in all areas, except maybe build quality.

Check it out on Amazon here.

Scores

Image Quality (25)
22
Focusing (20){{column-name-2}}: 17
Build and Handling (20){{column-name-2}}: 16
Value for Money (20){{column-name-2}}: 16
Miscellaneous (15){{column-name-2}}: 15
Total (100){{column-name-2}}: 86

 

Show Comments (0)
[type='text']
[type='text']
[type='password']
[type='password']
[activeKey]
[activeKey]
['rmockx.RealPlayer G2 Control', 'rmocx.RealPlayer G2 Control.1', 'RealPlayer.RealPlayer(tm) ActiveX Control (32-bit)', 'RealVideo.RealVideo(tm) ActiveX Control (32-bit)', 'RealPlayer']
['rmockx.RealPlayer G2 Control', 'rmocx.RealPlayer G2 Control.1', 'RealPlayer.RealPlayer(tm) ActiveX Control (32-bit)', 'RealVideo.RealVideo(tm) ActiveX Control (32-bit)', 'RealPlayer']
[index]
[index]
[i]
[i]
[type='text']
[type='text']
[type='password']
[type='password']
[activeKey]
[activeKey]
['rmockx.RealPlayer G2 Control', 'rmocx.RealPlayer G2 Control.1', 'RealPlayer.RealPlayer(tm) ActiveX Control (32-bit)', 'RealVideo.RealVideo(tm) ActiveX Control (32-bit)', 'RealPlayer']
['rmockx.RealPlayer G2 Control', 'rmocx.RealPlayer G2 Control.1', 'RealPlayer.RealPlayer(tm) ActiveX Control (32-bit)', 'RealVideo.RealVideo(tm) ActiveX Control (32-bit)', 'RealPlayer']
[index]
[index]
[i]
[i]
[type='text']
[type='text']
[type='password']
[type='password']
[activeKey]
[activeKey]
['rmockx.RealPlayer G2 Control', 'rmocx.RealPlayer G2 Control.1', 'RealPlayer.RealPlayer(tm) ActiveX Control (32-bit)', 'RealVideo.RealVideo(tm) ActiveX Control (32-bit)', 'RealPlayer']
['rmockx.RealPlayer G2 Control', 'rmocx.RealPlayer G2 Control.1', 'RealPlayer.RealPlayer(tm) ActiveX Control (32-bit)', 'RealVideo.RealVideo(tm) ActiveX Control (32-bit)', 'RealPlayer']
[index]
[index]
[i]
[i]
[type='text']
[type='text']
[type='password']
[type='password']
[activeKey]
[activeKey]
['rmockx.RealPlayer G2 Control', 'rmocx.RealPlayer G2 Control.1', 'RealPlayer.RealPlayer(tm) ActiveX Control (32-bit)', 'RealVideo.RealVideo(tm) ActiveX Control (32-bit)', 'RealPlayer']
['rmockx.RealPlayer G2 Control', 'rmocx.RealPlayer G2 Control.1', 'RealPlayer.RealPlayer(tm) ActiveX Control (32-bit)', 'RealVideo.RealVideo(tm) ActiveX Control (32-bit)', 'RealPlayer']
[index]
[index]
[i]
[i]
[type='text']
[type='text']
[type='password']
[type='password']
[activeKey]
[activeKey]
['rmockx.RealPlayer G2 Control', 'rmocx.RealPlayer G2 Control.1', 'RealPlayer.RealPlayer(tm) ActiveX Control (32-bit)', 'RealVideo.RealVideo(tm) ActiveX Control (32-bit)', 'RealPlayer']
['rmockx.RealPlayer G2 Control', 'rmocx.RealPlayer G2 Control.1', 'RealPlayer.RealPlayer(tm) ActiveX Control (32-bit)', 'RealVideo.RealVideo(tm) ActiveX Control (32-bit)', 'RealPlayer']
[index]
[index]
[i]
[i]
[type='text']
[type='text']
[type='password']
[type='password']
[activeKey]
[activeKey]
['rmockx.RealPlayer G2 Control', 'rmocx.RealPlayer G2 Control.1', 'RealPlayer.RealPlayer(tm) ActiveX Control (32-bit)', 'RealVideo.RealVideo(tm) ActiveX Control (32-bit)', 'RealPlayer']
['rmockx.RealPlayer G2 Control', 'rmocx.RealPlayer G2 Control.1', 'RealPlayer.RealPlayer(tm) ActiveX Control (32-bit)', 'RealVideo.RealVideo(tm) ActiveX Control (32-bit)', 'RealPlayer']
[index]
[index]
[i]
[i]
[type='text']
[type='text']
[type='password']
[type='password']
[activeKey]
[activeKey]
['rmockx.RealPlayer G2 Control', 'rmocx.RealPlayer G2 Control.1', 'RealPlayer.RealPlayer(tm) ActiveX Control (32-bit)', 'RealVideo.RealVideo(tm) ActiveX Control (32-bit)', 'RealPlayer']
['rmockx.RealPlayer G2 Control', 'rmocx.RealPlayer G2 Control.1', 'RealPlayer.RealPlayer(tm) ActiveX Control (32-bit)', 'RealVideo.RealVideo(tm) ActiveX Control (32-bit)', 'RealPlayer']
[index]
[index]
[i]
[i]
[type='text']
[type='text']
[type='password']
[type='password']
[activeKey]
[activeKey]
['rmockx.RealPlayer G2 Control', 'rmocx.RealPlayer G2 Control.1', 'RealPlayer.RealPlayer(tm) ActiveX Control (32-bit)', 'RealVideo.RealVideo(tm) ActiveX Control (32-bit)', 'RealPlayer']
['rmockx.RealPlayer G2 Control', 'rmocx.RealPlayer G2 Control.1', 'RealPlayer.RealPlayer(tm) ActiveX Control (32-bit)', 'RealVideo.RealVideo(tm) ActiveX Control (32-bit)', 'RealPlayer']
[index]
[index]
[i]
[i]
[type='text']
[type='text']
[type='password']
[type='password']
[activeKey]
[activeKey]
['rmockx.RealPlayer G2 Control', 'rmocx.RealPlayer G2 Control.1', 'RealPlayer.RealPlayer(tm) ActiveX Control (32-bit)', 'RealVideo.RealVideo(tm) ActiveX Control (32-bit)', 'RealPlayer']
['rmockx.RealPlayer G2 Control', 'rmocx.RealPlayer G2 Control.1', 'RealPlayer.RealPlayer(tm) ActiveX Control (32-bit)', 'RealVideo.RealVideo(tm) ActiveX Control (32-bit)', 'RealPlayer']
[index]
[index]
[i]
[i]
[type='text']
[type='text']
[type='password']
[type='password']
[activeKey]
[activeKey]
['rmockx.RealPlayer G2 Control', 'rmocx.RealPlayer G2 Control.1', 'RealPlayer.RealPlayer(tm) ActiveX Control (32-bit)', 'RealVideo.RealVideo(tm) ActiveX Control (32-bit)', 'RealPlayer']
['rmockx.RealPlayer G2 Control', 'rmocx.RealPlayer G2 Control.1', 'RealPlayer.RealPlayer(tm) ActiveX Control (32-bit)', 'RealVideo.RealVideo(tm) ActiveX Control (32-bit)', 'RealPlayer']
[index]
[index]
[i]
[i]
[type='text']
[type='text']
[type='password']
[type='password']
[activeKey]
[activeKey]
['rmockx.RealPlayer G2 Control', 'rmocx.RealPlayer G2 Control.1', 'RealPlayer.RealPlayer(tm) ActiveX Control (32-bit)', 'RealVideo.RealVideo(tm) ActiveX Control (32-bit)', 'RealPlayer']
['rmockx.RealPlayer G2 Control', 'rmocx.RealPlayer G2 Control.1', 'RealPlayer.RealPlayer(tm) ActiveX Control (32-bit)', 'RealVideo.RealVideo(tm) ActiveX Control (32-bit)', 'RealPlayer']
[index]
[index]
[i]
[i]
[type='text']
[type='text']
[type='password']
[type='password']
[activeKey]
[activeKey]
['rmockx.RealPlayer G2 Control', 'rmocx.RealPlayer G2 Control.1', 'RealPlayer.RealPlayer(tm) ActiveX Control (32-bit)', 'RealVideo.RealVideo(tm) ActiveX Control (32-bit)', 'RealPlayer']
['rmockx.RealPlayer G2 Control', 'rmocx.RealPlayer G2 Control.1', 'RealPlayer.RealPlayer(tm) ActiveX Control (32-bit)', 'RealVideo.RealVideo(tm) ActiveX Control (32-bit)', 'RealPlayer']
[index]
[index]
[i]
[i]
[type='text']
[type='text']
[type='password']
[type='password']
[activeKey]
[activeKey]
['rmockx.RealPlayer G2 Control', 'rmocx.RealPlayer G2 Control.1', 'RealPlayer.RealPlayer(tm) ActiveX Control (32-bit)', 'RealVideo.RealVideo(tm) ActiveX Control (32-bit)', 'RealPlayer']
['rmockx.RealPlayer G2 Control', 'rmocx.RealPlayer G2 Control.1', 'RealPlayer.RealPlayer(tm) ActiveX Control (32-bit)', 'RealVideo.RealVideo(tm) ActiveX Control (32-bit)', 'RealPlayer']
[index]
[index]
[i]
[i]
[type='text']
[type='text']
[type='password']
[type='password']
[activeKey]
[activeKey]
['rmockx.RealPlayer G2 Control', 'rmocx.RealPlayer G2 Control.1', 'RealPlayer.RealPlayer(tm) ActiveX Control (32-bit)', 'RealVideo.RealVideo(tm) ActiveX Control (32-bit)', 'RealPlayer']
['rmockx.RealPlayer G2 Control', 'rmocx.RealPlayer G2 Control.1', 'RealPlayer.RealPlayer(tm) ActiveX Control (32-bit)', 'RealVideo.RealVideo(tm) ActiveX Control (32-bit)', 'RealPlayer']
[index]
[index]
[i]
[i]
[type='text']
[type='text']
[type='password']
[type='password']
[activeKey]
[activeKey]
['rmockx.RealPlayer G2 Control', 'rmocx.RealPlayer G2 Control.1', 'RealPlayer.RealPlayer(tm) ActiveX Control (32-bit)', 'RealVideo.RealVideo(tm) ActiveX Control (32-bit)', 'RealPlayer']
['rmockx.RealPlayer G2 Control', 'rmocx.RealPlayer G2 Control.1', 'RealPlayer.RealPlayer(tm) ActiveX Control (32-bit)', 'RealVideo.RealVideo(tm) ActiveX Control (32-bit)', 'RealPlayer']
[index]
[index]
[i]
[i]
[type='text']
[type='text']
[type='password']
[type='password']
[activeKey]
[activeKey]
['rmockx.RealPlayer G2 Control', 'rmocx.RealPlayer G2 Control.1', 'RealPlayer.RealPlayer(tm) ActiveX Control (32-bit)', 'RealVideo.RealVideo(tm) ActiveX Control (32-bit)', 'RealPlayer']
['rmockx.RealPlayer G2 Control', 'rmocx.RealPlayer G2 Control.1', 'RealPlayer.RealPlayer(tm) ActiveX Control (32-bit)', 'RealVideo.RealVideo(tm) ActiveX Control (32-bit)', 'RealPlayer']
[index]
[index]
[i]
[i]
[type='text']
[type='text']
[type='password']
[type='password']
[activeKey]
[activeKey]
['rmockx.RealPlayer G2 Control', 'rmocx.RealPlayer G2 Control.1', 'RealPlayer.RealPlayer(tm) ActiveX Control (32-bit)', 'RealVideo.RealVideo(tm) ActiveX Control (32-bit)', 'RealPlayer']
['rmockx.RealPlayer G2 Control', 'rmocx.RealPlayer G2 Control.1', 'RealPlayer.RealPlayer(tm) ActiveX Control (32-bit)', 'RealVideo.RealVideo(tm) ActiveX Control (32-bit)', 'RealPlayer']
[index]
[index]
[i]
[i]
[type='text']
[type='text']
[type='password']
[type='password']
[activeKey]
[activeKey]
['rmockx.RealPlayer G2 Control', 'rmocx.RealPlayer G2 Control.1', 'RealPlayer.RealPlayer(tm) ActiveX Control (32-bit)', 'RealVideo.RealVideo(tm) ActiveX Control (32-bit)', 'RealPlayer']
['rmockx.RealPlayer G2 Control', 'rmocx.RealPlayer G2 Control.1', 'RealPlayer.RealPlayer(tm) ActiveX Control (32-bit)', 'RealVideo.RealVideo(tm) ActiveX Control (32-bit)', 'RealPlayer']
[index]
[index]
[i]
[i]
[type='text']
[type='text']
[type='password']
[type='password']
[activeKey]
[activeKey]
['rmockx.RealPlayer G2 Control', 'rmocx.RealPlayer G2 Control.1', 'RealPlayer.RealPlayer(tm) ActiveX Control (32-bit)', 'RealVideo.RealVideo(tm) ActiveX Control (32-bit)', 'RealPlayer']
['rmockx.RealPlayer G2 Control', 'rmocx.RealPlayer G2 Control.1', 'RealPlayer.RealPlayer(tm) ActiveX Control (32-bit)', 'RealVideo.RealVideo(tm) ActiveX Control (32-bit)', 'RealPlayer']
[index]
[index]
[i]
[i]
[type='text']
[type='text']
[type='password']
[type='password']
[activeKey]
[activeKey]
['rmockx.RealPlayer G2 Control', 'rmocx.RealPlayer G2 Control.1', 'RealPlayer.RealPlayer(tm) ActiveX Control (32-bit)', 'RealVideo.RealVideo(tm) ActiveX Control (32-bit)', 'RealPlayer']
['rmockx.RealPlayer G2 Control', 'rmocx.RealPlayer G2 Control.1', 'RealPlayer.RealPlayer(tm) ActiveX Control (32-bit)', 'RealVideo.RealVideo(tm) ActiveX Control (32-bit)', 'RealPlayer']
[index]
[index]
[i]
[i]