Ao usar o tikz para gerar um arquivo pdf, eu uso o comando abaixo para convertê-lo em um arquivo png 1920x1080.
convert -density 300 exam.pdf -resize 1920x1080 out.png
Mas se o PDF original não tiver a proporção de 16:9, o arquivo de saída não será exatamente o esperado (por exemplo, 1080x1080).
Como posso instruir o tikz a gerar um pdf com proporção fixa (16:9, por exemplo).
Aliás, esse método usará redimensionamento. Essa conversão perderá a qualidade da imagem? como manter a melhor qualidade para converter um pdf em png?
por exemplo:
\documentclass[border=2mm]{standalone}
\usepackage{tikz}
\begin{document}
\tiny\begin{tikzpicture}[]
\draw (0,0) circle (5cm);
\end{tikzpicture}
\end{document}
Este círculo irá gerar um pdf com 10cmx10cm, então a proporção padrão é 1:1. o que eu preciso é que o círculo ainda seja um círculo, mas a proporção é 16:9.
Responder1
Este é um código que estende a caixa delimitadora simetricamente para corresponder a uma relação largura:altura alvo. Fá-lo de uma forma que respeita as margens adicionais que podem vir da classe autónoma, mas também funciona para documentos não autónomos.
\documentclass[tikz,border=2mm]{standalone}
\makeatletter
\tikzset{fixed ratio/.code={\def\tikz@pft##1:##2;{\edef\pgfutil@tempx{##1}\edef\pgfutil@tempy{##2}}%
\expandafter\tikz@pft#1;%
\tikzset{execute at end picture={%
\ifcsname sa@border@right\endcsname
\pgfmathsetmacro\pgfutil@tempa{((\pgf@picmaxx+\sa@border@right-\pgf@picminx+\sa@border@left)/%
(\pgf@picmaxy+\sa@border@top-\pgf@picminy+\sa@border@bottom)}%
\else
\pgfmathsetmacro\pgfutil@tempa{((\pgf@picmaxx-\pgf@picminx)/(\pgf@picmaxy-\pgf@picminy)}%
\fi
\pgfmathsetmacro\pgfutil@tempb{(\pgfutil@tempx/\pgfutil@tempy)}%
\ifdim\pgfutil@tempa pt=\pgfutil@tempb pt\relax
\else
\ifdim\pgfutil@tempb pt>\pgfutil@tempa pt\relax
% target ratio greater than actual
\pgfmathsetmacro\pgfutil@tempc{-(\pgf@picmaxx-\pgf@picminx)%
+\pgfutil@tempb*(\pgf@picmaxy-\pgf@picminy)}%
\path ([xshift=-0.5*\pgfutil@tempc]current bounding box.west)
([xshift=0.5*\pgfutil@tempc]current bounding box.east);
\else
% target ratio smaller than actual
\pgfmathsetmacro\pgfutil@tempc{-(\pgf@picmaxy-\pgf@picminy)%
+(\pgf@picmaxx-\pgf@picminx)/\pgfutil@tempb}%
\path ([yshift=-0.5*\pgfutil@tempc]current bounding box.south)
([yshift=0.5*\pgfutil@tempc]current bounding box.north);
\fi
\fi
}%
}}
}
\makeatother
\begin{document}
\begin{tikzpicture}[fixed ratio=16:9]
\draw (0,0) circle [radius=5cm];
\end{tikzpicture}
\begin{tikzpicture}[fixed ratio=9:16]
\draw (0,0) circle [radius=5cm];
\end{tikzpicture}
\end{document}
Responder2
Se as dimensões do resultado final forem conhecidas, você pode usar tcolorbox
adições para TikZ
redimensionar uma figura TiKZ para ajustar no caminho desejado. Este caminho pode corrigir as dimensões finais. Alguns exemplos:
\documentclass[tikz, border=2mm]{standalone}
\usepackage[skins]{tcolorbox}
\begin{document}
\begin{standalone}
\begin{tikzpicture}
\path[fill zoom picture={%
\draw (0,0) circle (5cm);}] (0,0) rectangle ++(16,9);
\end{tikzpicture}
\begin{tikzpicture}
\path[fill zoom picture={%
\draw (0,0) circle (5cm);}] (0,0) rectangle ++(10,10);
\end{tikzpicture}
\begin{tikzpicture}
\path[fill zoom picture={%
\draw (0,0) circle (5cm);}] (0,0) rectangle ++(20,25);
\end{tikzpicture}
\end{standalone}
\end{document}
Responder3
Outra solução, faça algumas contas:
\documentclass[border=0mm]{standalone}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\tiny\begin{tikzpicture}[]
\draw (0,0) circle (5cm);
% keep ratio
\def\ratio{16/9}
\path let \p1=(current bounding box.center),
\p2=(current bounding box.east),
\p3=(current bounding box.north),
\p4=(current bounding box.west),
\p5=(current bounding box.south),
\n1={\y3-\y1},
\n2={\n1*\ratio},
\n3={\y5 - \y1},
\n4={\n3*\ratio}
in
[use as bounding box] (\n4,\y5) rectangle (\n2,\y3);
\end{tikzpicture}
\end{document}
Aliás, não adicione borda, pois isso terá impacto na proporção.