Is there any way to make a polaroid photo effect in TikZ? I am thinking of something like this enter image description here

A computer font as the caption might be better in fact but I couldn't find a suitable example online.

I think what is needed is a nice shadow effect outer box, the image placed inside it, a way to do the caption suitably and then for the whole thing to be rotated. I found a few related looking answer but I have no idea how to put them together or if they are suitable. For example, Translate and rotate an object in TikZ (2D) and Faded drop-shadow using tikz-based rounded rectangle? .

My beginning attempt doesn't use TikZ at all and is


      \tiny{Hello world!}

This gives

enter image description here

  • 2
    Welcome to TeX.SX. Questions about how to draw specific graphics that just post an image of the desired result are really not reasonable questions to ask on the site. Please post a minimal compilable document showing that you've tried to produce the image and then people will be happy to help you with any specific problems you may have. See minimal working example (MWE) for what needs to go into such a document.
    – user31729
    Aug 6, 2014 at 9:43
  • 5
    Oh! Aishwarya Rai in TeX.SX. :-)
    – user11232
    Aug 6, 2014 at 9:50
  • 3
    @ChristianHupfer Thanks. You are right. I have never used TikZ except by copy and pasting to be honest but I will do my best.
    – Simd
    Aug 6, 2014 at 9:57

4 Answers 4


Edit (2016/05/27): Improved version at the end -- cleaner box style, usage of xparse.

Something like this

Description: I defined a command \polaroid, taking five arguments, the first being optional, designed for the tcolorbox only.

  • 1st arg: tcolorbox settings
  • 2nd arg: Rotation angle in degrees
  • 3rd arg: Scaling of the image
  • 4th arg: Image file name
  • 5th arg: Caption

The shadow is blurred now, the detailed settings depend on the personal request and can not be done here, change the fuzzy shadow option values at will.





\newcommand{\polaroid}[5][top=1cm,left=1cm,right=1cm,bottom=1cm,boxsep=0pt,colback=white,width=8cm,arc=0pt,auto outer arc,fuzzy shadow={2mm}{-2mm}{1mm}{0.3mm}{black}]{%


\polaroid{-10}{0.25}{face}{\Large \textsf{\textbf{Hello World!}}}%


enter image description here

Old version





\Huge Hello World%


enter image description here

About the jaggy lines issue: Adding a tight \fbox around the image overprints the lines, but it is only a work around.

enter image description here

Admitted, Erwin Schrödinger is not as sexy as that actress ;-)

Update A better version, with tikz styles and special settings:

Another version of the \polaroid command, this time with xparse:

  • 1st arg optional: tcolorbox settings
  • 2nd arg: file name
  • 3rd arg optional : Scaling of the image
  • 4th arg: caption
  • 5th arg optional : rotation angle



    sharp corners,
    lower separated=false,
    halign lower=center,
    fuzzy shadow={2mm}{-2mm}{1mm}{0.3mm}{black}





\polaroid{face}[0.2]{\Large\bfseries \sffamily Hello World}[180]
\polaroid{face}[0.2]{\Large\bfseries \sffamily Hello World}[0]
\polaroid{face}[0.2]{\Large\bfseries \sffamily Hello World}[90]
\polaroid{face}[0.2]{\Large\bfseries \sffamily Hello World}[270]


enter image description here

  • 12
    You made a mistake. There are not enough stars to spell brainy.
    – Simd
    Aug 6, 2014 at 10:13
  • 3
    Erwin is very aishwary in that foto though
    – percusse
    Aug 6, 2014 at 10:37
  • @eleanora: I meant sexy, not brainy :D :D
    – user31729
    Aug 6, 2014 at 10:39
  • @eleanora: The only jaggy part is the image itself, since it's a non-vector graphic format (*.jpg), the tcolorbox and its shadow is not jaggy at all, since they are using vector graphics commands. I can't do anything against jaggy formats as is
    – user31729
    Aug 6, 2014 at 10:44
  • 1
    I think everyone understands it's a joke :)
    – Simd
    Aug 6, 2014 at 11:56

Here is a flexible and customizable solution usable into a tikzpicture.

Description of keys:

  • at defines the center of the picture,
  • graphics options defines the options used by \includegraphics,
  • rotate defines the global rotation of the polaroid,
  • caption define the content of the caption,
  • caption distance defines the distance between the top of caption and the bottom of the picture,
  • top margin, bottom margin, left margin, right margin, vmargin, hmargin and margin are used to define the margins between the picture and the borders of the polaroid,

  • caption option defines the options used by the caption node,

  • frame options defines the options used by the frame node (the whole polaroid).

Each key has a default value. The optional argument of \polaroid macro is used to change these value for a particular polaroid. You may use \polaroidset to change the default values for all subsequent polaroids in the current group.

enter image description here

enter image description here

  at/.store in=\polaroidat,
  graphics options/.store in=\polaroidgraphicsoptions,
  graphics options=,
  rotate/.store in=\polaroidrotate,
  caption/.store in=\polaroidcaption,
  caption distance/.store in=\polaroidcaptiondistance,
  caption distance=1mm,
  top margin/.store in=\polaroidtopmargin,
  bottom margin/.store in=\polaroidbottommargin,
  left margin/.store in=\polaroidleftmargin,
  right margin/.store in=\polaroidrightmargin,
  vmargin/.style={top margin=#1,bottom margin=#1},
  hmargin/.style={left margin=#1,right margin=#1},
  caption default/.style={font=\bfseries,node distance=1mm},
  caption options/.style={caption default/.append style={#1}},
  frame default/.style={draw,inner sep=0},
  frame options/.style={frame default/.append style={#1}},
    \node[rotate=\polaroidrotate,inner sep=0]
    (shoot) {\expandafter\includegraphics\expandafter[\polaroidgraphicsoptions]{#2}};
    \path (shoot.north) ++(0,\polaroidtopmargin) coordinate (polaroid top);
    \path (shoot.south) ++(0,{-1*(\polaroidbottommargin)}) coordinate (polaroid bottom);
    \path (shoot.west) ++({-1*(\polaroidleftmargin)},0) coordinate (polaroid left);
    \path (shoot.east) ++(\polaroidrightmargin,0) coordinate (polaroid right);
    \node[rotate fit=\polaroidrotate,fit=(polaroid top)(polaroid bottom)(polaroid left)(polaroid right),polaroid/frame default]{};
    \node[rotate=\polaroidrotate,inner sep=0]
    (shoot) {\expandafter\includegraphics\expandafter[\polaroidgraphicsoptions]{#2}};
    \coordinate (caption center) at ($(shoot.south)!-1 * \polaroidcaptiondistance!(shoot.north)$);
    \node[anchor=north,rotate=\polaroidrotate,polaroid/caption default]
    (caption) at (caption center) {\polaroidcaption};


  frame options={line width=1pt,draw,rounded corners=.5mm,fill=white,drop shadow},
  graphics options={width=4cm}]

    frame options={line width=1pt,draw=cyan,rounded corners=.5mm,fill=cyan!10,drop shadow},
    graphics options={width=2.5cm},
    caption options={font=\footnotesize,align=center},
    caption distance=.5mm,
    bottom margin=5mm+1em,
  \foreach \i in {0,...,6}{

  • That is really great. Thank you. I notice that you (and others) have really made an attractive picture frame not a polaroid. The dimensions in a polaroid are different as are the margins. That is narrow margins at the top and side and the overall frame is not square. Of course with your lovely flexible solution this is easy to fix.
    – Simd
    Aug 7, 2014 at 14:33

Based on https://tex.stackexchange.com/a/180442/36296

\usetikzlibrary{backgrounds, calc, shadows, shadows.blur}

    % #1: Optional aditional tikz options
    % #2: Name of the node to "decorate"
            \path[blur shadow={shadow xshift=0pt, shadow yshift=0pt, shadow blur steps=6}, #1]
            ($(#2.north west)+(.3ex,-.5ex)$)
            -- ($(#2.south west)+(.5ex,-.7ex)$)
            .. controls ($(#2.south)!.3!(#2.south west)$) .. (#2.south)
            .. controls ($(#2.south)!.3!(#2.south east)$) .. ($(#2.south east)+(-.5ex,-.7ex)$)
            -- ($(#2.north east)+(-.3ex, -.5ex)$)
            -- cycle;




            \node[draw=black!40, fill=white, rectangle, minimum width=4.5cm, minimum height=4.5cm]
            (example) {


enter image description here

  • 4
    That's a very nice shadow!
    – Simd
    Aug 6, 2014 at 11:22

For fun, here is a solution in ConTeXt. The solution relies on my wrapper around the drops module by Peter Rolf. The drops module uses imagemagic to draw the shadow (which looks more realistic than the tikz-style shadows)




which gives

enter image description here

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .