Here is a solution that works with XeLaTeX and LaTeX->dvipdfmx in any document class. It uses some JavaScript and hence works best in AdobeReader. Just insert the code below into the document preamble. The code defines the command
\zoombox[box line width]{general text}
to be used in the document. It makes general text clickable to toggle between zoomed-in and zoomed-out states. In the zoomed-in state general text is magnified just enough to fit entirely into the application window.
In your case, general text should be something like \inlcudegraphics[scale=0.1]{picture}, which includes your picture at its original resolution but scaled down to the desired size of the thumbnail. That is, only one version of the picture needs to be included.
Note that the document requires at least two runs of (Xe)LaTeX.
Alexander
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\usepackage{hyperref}
\makeatletter
\InputIfFileExists{\jobname.zom}{}{}
\newsavebox\zbox
\newcounter{zoom}
\newwrite\zoomdat
\immediate\openout\zoomdat=\jobname.zom
\newcommand{\zoombox}[2][0]{%
\sbox\zbox{#2}%
\special{pdf: dest (zb\thezoom.out) [@thispage /Fit]}%
\raisebox{-\dp\zbox}{\pdfsavepos}%
\protected@write\zoomdat{}{%
\string\expandafter\string\def\string\csname\space zb\thezoom.llx\string\endcsname{%
\noexpand\number\pdflastxpos}%
\string\expandafter\string\def\string\csname\space zb\thezoom.lly\string\endcsname{%
\noexpand\number\pdflastypos}%
}%
\ifcsname zb\thezoom.llx\endcsname\ifcsname zb\thezoom.urx\endcsname%
\special{pdf: dest (zb\thezoom.in) [ @thispage /FitR
\hypercalcbp{\csname zb\thezoom.llx\endcsname sp}
\hypercalcbp{\csname zb\thezoom.lly\endcsname sp}
\hypercalcbp{\csname zb\thezoom.urx\endcsname sp}
\hypercalcbp{\csname zb\thezoom.ury\endcsname sp}
]}%
\special{pdf: ann
width \the\wd\zbox\space
height \the\ht\zbox\space
depth \the\dp\zbox\space
<<
/Type/Annot/Subtype/Link/H/N
/Border [0 0 #1 [1 2]]
/A <<
/S/JavaScript
/JS (
if(typeof(zoomed\thezoom)=='undefined'){
this.gotoNamedDest('zb\thezoom.out');
var zoomed\thezoom=false;
}
)
/Next <<
/S/GoTo/D (zb\thezoom.in)
/Next <<
/S/JavaScript
/JS(
if(zoomed\thezoom){
this.gotoNamedDest('zb\thezoom.out');
zoomed\thezoom=false;
}else{
zoomed\thezoom=true;
}
)
>>
>>
>>
>>}%
\fi\fi%
\usebox{\zbox}\raisebox{\ht\zbox}{\pdfsavepos}%
\protected@write\zoomdat{}{%
\string\expandafter\string\def\string\csname\space zb\thezoom.urx\string\endcsname{%
\noexpand\number\pdflastxpos}%
\string\expandafter\string\def\string\csname\space zb\thezoom.ury\string\endcsname{%
\noexpand\number\pdflastypos}%
}%
\stepcounter{zoom}%
}
\makeatother
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
EDIT:
Optional argument box line width added to \zoombox macro. Adds a dotted line around the zoom area of given line width, measured in screen pixels. Default: 0 (no visible box).
A pdftex version of the \zoombox macro is given in: Automatic "Zoom in" hypertext boxes in PDF.