tikz 生成 50x50 像素 png 文件

tikz 生成 50x50 像素 png 文件

我需要生成 50x50 png 图标,我按如下方式操作:

  1. 创建一个半径为 25 的圆的 tikz 文件。
\documentclass[border=0pt]{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
    \draw(0,0) circle (25);
\end{tikzpicture}
\end{document}
  1. 运行以下命令将 pdf 转换为 png 文件:

    转换-密度 2 测试.pdf 测试.png

  2. 检查 png 文件大小:39x39 像素

这样看起来图像尺寸较小,质量较差!我希望图像为 50x50,线宽为 1 像素。获得正确像素尺寸和良好质量的正确方法是什么?

在此处输入图片描述

答案1

Z 使用厘米作为默认单位,但光栅化使用每英寸点数。所以我们要么需要做一些数学运算,要么需要告诉 TiZ 使用英寸。

半径为 25 厘米的圆适合 50 × 50 厘米的正方形。如果以每英寸 2 点 (= dpi = px/in) 将其栅格化,则得到 50 厘米 × 2 px/in × 0.393701 in/cm = 约 39 像素。这正是您得到的。

由于使用 dpi(默认的光栅化单位)进行光栅化意味着将英寸转换为像素,因此您可以在 Ti 中使用英寸作为基本单位Z 图片(例如使用绘制一个半径为 25 英寸的圆圈\draw(0,0) circle (25in);),然后使用 1 dpi 将其栅格化。

这里只有一个问题:在 TiZ,边框总是会扩展到路径的两侧,这就是为什么圆的边框会被剪掉一半。所以,你实际上需要把它画小半英寸,确保它不会被剪掉。

因此,以下使用 1 dpi(可能使用convert -density 1 filename.pdf filename.png)进行栅格化应该可以得到您想要的结果(我没有尝试使用您的方法对其进行栅格化):

\documentclass[border=0pt,tikz]{standalone}
\begin{document}
\begin{tikzpicture}
    \fill[transparent] (-25in,-25in) rectangle (25in,25in);
    \draw[line width=1in] (0,0) circle (24.5in); 
\end{tikzpicture}
\end{document}

结果:一个 50 × 50 像素的正方形,带有一个边框为 1 像素的圆圈。

在此处输入图片描述

答案2

在此示例中,我使用 ghostscript 将 pdf 输出翻录为 900 dpi、900x900 像素的光栅 png。您可以使用 指定所需的任何 dpi,-r并使用 指定图像大小-g

gs -sDEVICE=pngalpha -dPDFFitPage -r900 -g900x900 -o test.png test.pdf

撕开

\documentclass[border=0pt]{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
    \draw(0,0) circle (25);
\end{tikzpicture}
\end{document}

答案3

我想用python画小图标:

#!/usr/bin/env python3
from skimage import draw
import numpy as np
import cv2

def main():
    circle()
    return

def circle():
    r = 25
    arr = np.zeros((2*r, 2*r),dtype=np.uint8)
    arr.fill(255)# white
    rr, cc = draw.circle_perimeter(r, r, radius=r-1, shape=arr.shape)
    arr[rr, cc] = 0 #black
    cv2.imwrite("logo.png",arr)
    winname = "test"
    cv2.imshow(winname,arr)
    cv2.waitKey(0)
    return

if __name__ == "__main__":
    main()

在此处输入图片描述

相关内容