%!TEX pdflatex
% !TeX TXS-program:compile = txs:///arara
% arara: pdflatex: {shell: no, synctex: no, interaction: batchmode}

\documentclass{article}
\usepackage[margin=5mm,a4paper]{geometry}
\usepackage{tikz,simplekv,ifthen,xstring}
\usetikzlibrary{calc,shapes}
\usepackage{calc}

\makeatletter
\newsavebox\tmpmystampbox
\newlength\rayon@tampon@approuve
\newlength\largeur@texte@vstretch@tampon@approuve
\setlength\rayon@tampon@approuve{2cm}
\colorlet{couleurtampon}{black}

\defKV[TamponApprouve]{%
	Rayon=\setlength\rayon@tampon@approuve{#1},%
	Couleur=\colorlet{couleurtampon}{#1},%
	Rotation=\def\rotation@tampon@approuve{#1},%
	Police=\def\police@tampon@approuve{#1}
}
\setKVdefault[TamponApprouve]{%
	Rayon=2cm,%
	Couleur=black,%
	Rotation=20,%
	Police=\bfseries\sffamily
}

\tikzstyle{stampstars}=[star,star points=5,star point ratio=2.25]%

\newcommand\intstampstar[4][0]{%1 = rotate, %2=pos, %3 = big radius, %4 = small radius
	\begin{scope}[shift={#2},rotate=#1]
		\draw[stampstars,rounded corners=0.02\rayon@tampon@approuve,line width=0.02\rayon@tampon@approuve] 
		(0:#3\rayon@tampon@approuve) -- 
		(36:#4\rayon@tampon@approuve) -- 
		(72:#3\rayon@tampon@approuve) -- 
		(108:#4\rayon@tampon@approuve) -- 
		(144:#3\rayon@tampon@approuve) -- 
		(180:#4\rayon@tampon@approuve) -- 
		(216:#3\rayon@tampon@approuve) -- 
		(252:#4\rayon@tampon@approuve) -- 
		(288:#3\rayon@tampon@approuve) -- 
		(324:#4\rayon@tampon@approuve) -- 
		cycle;
	\end{scope}
}

\newcommand\inttamponapprouve{%
	%bordure grande
	\draw[line width=0.05\rayon@tampon@approuve,line cap=round] (25:0.975\rayon@tampon@approuve) arc(25:155:0.975\rayon@tampon@approuve) ;
	\draw[line width=0.05\rayon@tampon@approuve,line cap=round] (-25:0.975\rayon@tampon@approuve) arc(-25:-155:0.975\rayon@tampon@approuve) ;
	%bordure petite
	\draw[line width=0.02\rayon@tampon@approuve,line cap=round] (27:0.875\rayon@tampon@approuve) arc(27:153:0.875\rayon@tampon@approuve) ;
	\draw[line width=0.02\rayon@tampon@approuve,line cap=round] (-27:0.875\rayon@tampon@approuve) arc(-27:-153:0.875\rayon@tampon@approuve) ;
	%grand rectangle
	\draw[rounded corners=0.15\rayon@tampon@approuve,line width=0.05\rayon@tampon@approuve,line cap=round] (0.95\rayon@tampon@approuve,-0.3\rayon@tampon@approuve) -| (1.2\rayon@tampon@approuve,0.3\rayon@tampon@approuve) -| (-1.2\rayon@tampon@approuve,-0.3\rayon@tampon@approuve) -- (0.66\rayon@tampon@approuve,-0.3\rayon@tampon@approuve);
	\draw[line width=0.05\rayon@tampon@approuve,line cap=round] (0.75\rayon@tampon@approuve,-0.3\rayon@tampon@approuve)--++(0.075\rayon@tampon@approuve,0) ;
	%petit rectangle
	\draw[rounded corners=0.1\rayon@tampon@approuve,line width=0.02\rayon@tampon@approuve] (1.125\rayon@tampon@approuve,0.225\rayon@tampon@approuve) rectangle (-1.125\rayon@tampon@approuve,-0.225\rayon@tampon@approuve) ;
	%étoiles haut
	\intstampstar[18]{(0,0.6\rayon@tampon@approuve)}{0.15}{0.06}
	\intstampstar[18]{(0.2\rayon@tampon@approuve,0.575\rayon@tampon@approuve)}{0.12}{0.05}
	\intstampstar[18]{(-0.2\rayon@tampon@approuve,0.575\rayon@tampon@approuve)}{0.12}{0.05}
	%étoiles bas
	\intstampstar[54]{(0,-0.6\rayon@tampon@approuve)}{0.15}{0.06}
	\intstampstar[54]{(0.2\rayon@tampon@approuve,-0.575\rayon@tampon@approuve)}{0.12}{0.05}
	\intstampstar[54]{(-0.2\rayon@tampon@approuve,-0.575\rayon@tampon@approuve)}{0.12}{0.05}
	%le texte, de largeur maximale 1.95\rayon@tampon@approuve et hauteur maximale 0.375\rayon@tampon@approuve
	\begin{scope}
		\clip (1.125\rayon@tampon@approuve,0.225\rayon@tampon@approuve) rectangle (-1.125\rayon@tampon@approuve,-0.225\rayon@tampon@approuve) ;
		\ifthenelse{\largeur@texte@vstretch@tampon@approuve < \dimexpr1.95\rayon@tampon@approuve\relax}%
		{%
			\draw (0,0) node[inner sep=0pt] {\resizebox*{!}{0.375\rayon@tampon@approuve}{\police@tampon@approuve\vphantom{qÉ}\texte@tampon@approuve}} ;
		}%
		{%
			\draw (0,0) node[inner sep=0pt] {\resizebox*{1.95\rayon@tampon@approuve}{!}{\police@tampon@approuve\vphantom{qÉ}\texte@tampon@approuve}} ;
		}%
	\end{scope}
}

\NewDocumentCommand\TamponApprouve{ s O{} D<>{} m }{%
	\restoreKV[TamponApprouve]%
	\setKV[TamponApprouve]{#2}%
	\if\relax\detokenize{#4}\relax%
		\def\texte@tampon@approuve{APPROUVÉ}%
	\else%
		\def\texte@tampon@approuve{#4}%
	\fi%
	%gestion de la mise à l'échelle...
	\savebox{\tmpmystampbox}{\resizebox*{!}{0.375\rayon@tampon@approuve}{\police@tampon@approuve\vphantom{qÉ}\texte@tampon@approuve}}%
	%\usebox{\tmpmystampbox}%
	\settowidth\largeur@texte@vstretch@tampon@approuve{\usebox{\tmpmystampbox}}%
	%position normale ou absolue...
	\IfBooleanTF{#1}%
		{%
			\begin{tikzpicture}[overlay,remember picture,shift={#3},couleurtampon,rotate=\rotation@tampon@approuve,transform shape]%
				\inttamponapprouve
			\end{tikzpicture}%
		}%
		{%
			\begin{tikzpicture}[#3,couleurtampon,rotate=\rotation@tampon@approuve,transform shape]%
				\inttamponapprouve
			\end{tikzpicture}%
		}%
}
\makeatother

\usepackage{codehigh}

\begin{document}

\begin{demohigh}[language=latex/latex2]
\TamponApprouve{}%
\TamponApprouve[Couleur=blue!50!black]{VALIDÉ}
\end{demohigh}

\begin{demohigh}[language=latex/latex2]
\TamponApprouve[Rayon=1.5cm,Rotation=0]{}%
\TamponApprouve[Rayon=1.5cm,Rotation=-15,Couleur=red]{CERTIFIÉ}
\end{demohigh}

\begin{demohigh}[language=latex/latex2]
\TamponApprouve%
  [Rayon=1cm,Police=\ttfamily\bfseries,Couleur=green!50!black]%
  {FÉLICITATIONS}%
\end{demohigh}


\vspace*{5cm}

\begin{codehigh}[language=latex/latex2]
\TamponApprouve*%
  [Rayon=1.25cm,Couleur=pink]%
  < ([xshift=-2.5cm,yshift=2.5cm]current page.south east) >%
  {CHAPITRE 01}%
\end{codehigh}

\TamponApprouve*%
  [Rayon=1.25cm,Couleur=pink!50!black]%
  < ([xshift=-2.5cm,yshift=2.5cm]current page.south east) >%
  {CHAPITRE 01}%
\end{document}